2015-02-11 105 views
2

我可以通過YouTube v3數據API訪問我的觀看記錄,但它只會返回我最近的30個視頻(儘管在YouTube上觀看觀看記錄時我會看到更多視頻。 COM)。YouTube API v3會返回截斷的觀看記錄

然後,當我看另一個視頻時,它返回31.當我看另一個,32.如果它可以返回超過30,爲什麼它本來沒有返回更多?我知道API可能有限制,但爲什麼從30開始增長呢?而使用分頁功能,實際上不應該有限制,對吧?

我一定在做錯事。這裏是我的代碼:

def getWatchHistory(youtube): 
    playlistId = getWatchHistoryPlaylistId(youtube) 
    videos = retrieveVideos(youtube, playlistId); 
    return videos # Only returns 30, 31, 32 videos, etc. though I have many more in my History 

def getWatchHistoryPlaylistId(youtube): 
    channels_response = youtube.channels().list(
     part="contentDetails", 
     mine=True, 
    ).execute() 

    channel = channels_response["items"][0] 

    playlistId = channel["contentDetails"]["relatedPlaylists"]["watchHistory"] 
    return playlistId 

def retrieveVideos(youtube, playlistId, nextPageToken=None): 
    # Search the specified playlist and list all videos 
    playlistItems_response = youtube.playlistItems().list(
     part="snippet,contentDetails", 
     playlistId=playlistId, 
     maxResults=50, 
     pageToken=nextPageToken 
    ).execute() 

    results = [] 
    for x in playlistItems_response["items"]: 
     videoTitle = x["snippet"]["title"] 
     videoId = x["contentDetails"]["videoId"] 
     videoSpec = videoId + ": " + videoTitle 
     print 'adding to results: ' + videoSpec 
     results.append(videoSpec) 

    if ("nextPageToken" in playlistItems_response): 
     pageToken = playlistItems_response["nextPageToken"] 
     results.extend(retrieveVideos(youtube, playlistId, pageToken)); 
     return results 
    else: 
     return results 
+0

許多在其API中實現分頁的網站仍然會施加限制。 Twitter只允許你在特定的終端上發送1000個帖子。其他可能是由日期驅動的(這可能是爲什麼你只看到你的一些歷史記錄和一個可變數字的可能解釋)。 – ceejayoz 2015-02-11 20:21:21

回答

2

更新:截至2016年9月15日的watchHistory被以任何名義不再提供,所以這是可悲的是,現在無關。

看起來這是一個已知的bug最初在2013年報道的完全相同的行爲是在谷歌代碼線程解釋說:https://code.google.com/p/gdata-issues/issues/detail?id=4642

「等我回來的結果,但像幾張海報後,他們都非常近視頻(可能是一天的價值),我似乎無法找到任何關於檢索時間限制的文檔,任何人都找到了解決方法或找出了歷史可用的時間? (最近對該主題的評論)

看起來我運氣不好,直到谷歌決定解決這個問題。希望有人證明我(和谷歌代碼線程中的其他人)是錯誤的。