2013-10-02 59 views
0

我有一個hughe數據庫,其中一些數據集鏈接到某些YouTube視頻。正如我們都知道一些youtube視頻從youtube過去一段時間後消失,這導致我的解決方案和我的問題 - >我想檢查是否youtube視頻仍然存在,只需通過JSON檢查,如果有數據檢索從視頻。如果不是,我會簡單地刪除那個特定的數據集。從Youtube API檢索while循環中的數據

所以我的解決方案的第一部分是要經過我的數據表的每一行,並檢查每個ID是否有數據從YouTube獲取如下面的代碼所示:

$result = $db->query("SELECT id, link FROM songs"); 
    while($row = $result->fetch_assoc()) 
    { 
     $number = 1+$rown++; 
     $id  = $row['id']; 
     $link  = $row['link']; 
 $video_ID = $link; 
     $JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/{$video_ID}?v=2&alt=json"); 
     $JSON_Data = json_decode($JSON); 
     $views = $JSON_Data->{'entry'}->{'yt$statistics'}->{'viewCount'}; 

     echo $number .' row<br />'; 
     echo $link .' link<br />'; 
     echo $views .' views<br /><br />'; 

    } 

此嘗試正常工作,並輸出我需要的數據。唯一的問題是,它只是從第一個150-190行獲得數據,就是這樣。現在我正在檢查一個解決方案,檢查每一行是否存在空的YouTube數據,這導致我有兩個具體問題:

1st)由於限制從單個查詢中檢索數據,您可能會對此負責嗎?

2)可能這是我的服務器問題,停止查詢後x秒(但我已經擴大了時間限制,把一條線set_time_limit(10000000);到我的PHP代碼,但沒有成功)?

希望你能幫忙,提前致謝。

回答

0

當然,YouTube會對每個時間段可以發出的請求數量進行限制。不幸的是,對於V2什麼這些限制沒有明確的指導方針...,準則只是狀態:

通過YouTube API強制配額,以防止 不規則API的使用相關的問題。具體而言,too_many_recent_calls錯誤 表示API服務器在短時間內收到了來自 相同調用者的太多調用。如果您收到此類型的 錯誤,那麼我們建議您等待幾分鐘,然後再次嘗試您的 請求。

如果時間對您而言不是問題,您可以減慢每個查詢的速度,以便每10-15秒左右發出一次請求。另外,你可能會有更好的運氣批處理。有了這個,您可以一次完成50個請求(這個數量可以算作50個針對您每天總體請求限額的請求,但僅限於針對您每次時間限額的請求)。使用API​​的v2進行批處理有一點涉及,因爲您首先向批處理端點發出POST請求,然後根據這些結果發送多個請求。這裏的文檔:

https://developers.google.com/youtube/2.0/developers_guide_protocol?hl=en#Batch_processing

批處理是與V3容易得多,因爲你只是有VideoID的參數是一個逗號分隔的視頻列表你想上的信息 - 所以你的情況,你會在這樣一個URL,執行file_get_contents

https://www.googleapis.com/youtube/v3/videos?part=id&id={comma-separated-list-of-IDs}&maxResults=50&key={YOUR_API_KEY} 

在列表中的所有視頻的ID不回來的JSON響應不存在了。如果你一次做50個,等待15秒,再做50個等,這應該會給你更好的表現。