2014-10-19 14 views
0

我使用的是YouTube的數據API請求搶頻道ID,但我也不太清楚爲什麼它不工作:JSON提取數據爲可變使用PHP

返回的JSON請求我是得到的是:

{ 
    "kind": "youtube#channelListResponse", 
    "etag": "\"PSjn-HSKiX6orvNhGZvglLI2lvk/k5qSWj-xcF96jAN3p1uQH1amSRc\"", 
    "pageInfo": { 
     "totalResults": 1, 
     "resultsPerPage": 5 
    }, 
    "items": [ 
     { 
     "kind": "youtube#channel", 
     "etag": "\"PSjn-HSKiX6orvNhGZvglLI2lvk/e1xTbLf6JLhwwzeWbdMfWdPfcwg\"", 
     "id": "UC-lHJZR3Gqxm24_Vd_AJ5Yw" 
     } 
    ] 
    } 

要提取JSON數據我使用的代碼的幾行和在PHP的函數:

$banner_data = file_get_contents('https://www.googleapis.com/youtube/v3/channels?part=brandingSettings&forUsername=pewdiepie&key=AIzaSyDTxvTLWXStUrhzgCDptVUG4dGBCpyL9MY'); 
$banner_data = json_decode($banner_data, true); 
$YTid = $banner_data['items']['id']; 

在i:

echo "YouTube Channel Id Of pewdiepie is " . $YTid . ".<br />"; 

我沒有收到頻道ID?我的問題是什麼?

回答

1

項目是一個包含一個或多個對象的數組。因此,它必須是:

$YTid = $banner_data['items'][0]->id; 

你搶項目陣列從第一項「身份證」這種方式。

順便說一句:學習調試對學習編碼至關重要。如果你解碼JSON,然後打印結果可以看到陣列的結構,這可以幫助你發現問題,如:

$banner_data = json_decode($banner_data, true); 
var_dump($banner_data); 
+0

這有一直是一個有用的答案,但仍然沒有解決問題!謝謝,我從來沒有想過使用var_dump。這真的有幫助!在我的其他代碼部分,我似乎可以使用$ stats_data = $ data ['entry'] ['yt $ statistics']; – 2014-10-19 21:03:17

+0

@ConorReid未解決?我的工作很好。你基本上只提供了一個絕對沒有上下文的變量 – 2014-10-19 21:06:33

+0

現在它工作嗎?我認爲johnh10在他的回答中是正確的,它必須是 - > id,因爲它是一個對象。我編輯了我的答案。 – vrijdenker 2014-10-20 09:16:26

1

試試這個:

$YTid = $banner_data['items'][0]['id']; 
+0

不起作用。沒有錯誤或任何東西 – 2014-10-20 17:00:01

+0

我只注意到你用第二個參數爲真,所以json返回assoc數組。以上代碼將起作用。 – johnh10 2014-10-21 18:06:52

+0

我最終遇到了阻止它正常工作的衝突代碼。對不起,它確實有效。 – 2014-10-21 18:35:34