2013-08-23 39 views
0
// This is a first attempt at using YouTube's v3 API. It doesn't require authentication. 
getAutoGeneratedPlaylistData: function() { 

    gapi.client.setApiKey('{API_KEY}'); 
    gapi.client.load('youtube', 'v3', function() { 

     var request = gapi.client.youtube.playlistItems.list({ 
      part: 'contentDetails', 
      maxResults: 50, 
      playlistId: 'ALYL4kY05133rTMhTulSaXKj_Y6el9q0JH', 
      fields: 'items/contentDetails' 
     }); 

     request.execute(function (response) { 
      console.log("Response:", response); 
     }); 

    }); 

} 

此代碼獲取自動生成的YouTube播放列表的playlistId,並從中獲取前50項。使用v3 API獲取自動生成的YouTube播放列表的視頻信息列表

提供的響應的contentDetails包含每個視頻的ID。

似乎如果我想檢索自動生成播放列表的所有視頻信息,我需要向YouTube發出2N個請求? N請求從播放列表中檢索所有視頻ID,最多不超過50個。一旦我擁有了所有的視頻ID ......那麼我需要向YouTube索要所有視頻的視頻信息。我可以在一個請求中獲得50個視頻的數據...所以這是另外N個請求YouTube來檢索所有視頻?

這似乎是一個糟糕的設計決定。以前,如果使用v2 API檢索播放列表的所有信息,我可以在初始請求中爲視頻發送所有必要信息。

使用V3 API不再可能嗎?我應該承擔O(2N)的網絡費用......?真?

+0

也許我誤解了,但不是隻有2n個請求?每個視頻2個? – RyanS

+0

啊,是的,你說得對。顯然,生鏽,我認爲這不是很糟糕..只是震驚我無法同時獲得視頻信息。 –

回答

1

你以後還有什麼額外的視頻信息?如果您需要發佈日期,標題,說明,縮略圖,播放列表中的位置等,那麼它就在playlistItem的片段中,而不是contentDetails。事實上,片段還包含一個RESOURCEID,這反過來有VideoID的,所以你可以反正忽略contentDetails,只是做:

var request = gapi.client.youtube.playlistItems.list({ 
    part: 'snippet', 
    maxResults: 50, 
    playlistId: 'ALYL4kY05133rTMhTulSaXKj_Y6el9q0JH' 
}); 

(可能使用fields參數,只能選擇片段的那部分你之後)。

如果您需要除片段中的字段以外的視頻信息,那麼您就必須進行另一組調用(以50批爲單位),這是正確的。這實際上是一個非常好的設計決策。幾乎所有用於播放列表項請求的用例永遠不會比片段中的信息多,因此在將大量數據發送到一大堆忽略它的應用程序時,它們可以大大減少。它確實需要在那些需要額外數據的用例中,需要額外的調用,但整個系統的效率會變得更好(這是一個非常實用的工程選擇)。

+0

夠公平的。我需要視頻的持續時間,作者,標題和ID。看起來我需要承擔額外的請求。 –

+0

我也在那條船上! – jlmcdonald

相關問題