YouTube API v3会返回截断的观看记录

时间:2015-02-11 20:19:39

标签: python youtube-api youtube-data-api

我可以通过YouTube v3数据API访问我的观看记录,但它只返回我最近的30个视频(尽管我在YouTube.com上观看观看记录时看到的更多)。

然后当我观看另一个视频时,它返回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

1 个答案:

答案 0 :(得分:2)

更新:截至2016年9月15日,watchHistory已不再以任何身份提供,因此,遗憾的是,现在无关紧要。

这似乎是2013年最初报道的一个已知错误。谷歌代码主题解释了完全相同的行为:https://code.google.com/p/gdata-issues/issues/detail?id=4642

“我收到了结果,但是就像一些海报一样,它们是最近的视频(可能是一天的价值)。我似乎无法找到任何关于检索时间限制的文档。任何人都找到了解决方法或想出来历史有多长?“ (最近对该主题的评论)

在谷歌决定解决此问题之前,我似乎已经不幸了。希望有人证明我(以及Google Code代码中的任何其他人)错误。