我正在尝试在我的YouTube API应用程序中获取给定用户的观看视频的完整列表。我想加上所有视频的总持续时间。
当我从历史播放列表中获取视频列表时,API会将其限制在50个项目中。有分页但项目总数为50(不仅仅是每页);我无法使用它出现的API访问更多数据。
有没有办法在没有数据上限的情况下获得此播放列表?我希望有另一种方法(使用API)或没有API的方法。我知道YouTube会存储这些数据,因为我可以查看我的整个历史记录(远远超过50个视频)。
我正在使用此代码:
var requestOptions = {
playlistId: playlistId,
part: 'snippet',
maxResults: 50
};
gapi.client.youtube.playlistItems.list(requestOptions);
其中playlistId
是我从gapi.client.youtube.channels.list
请求获得的历史播放列表的ID。
编辑(2017):我想澄清一下,我总是打算下载自己的历史记录,只是出于兴趣,看看我花了多少时间观看视频。我仍然无法做到这一点。
答案 0 :(得分:14)
我刚刚为此任务编写了一个刮刀(在Python 2.7(更新为3.5)和Scrapy中)。 无官方API,它使用登录的会话cookie和html解析。默认情况下转储到SQLite。 https://github.com/zvodd/Youtube-Watch-History-Scraper
如何完成:基本上它打开了网址
https://www.youtube.com/feed/history'
从Chrome获取有效(已登录)会话Cookie。为名称,视频(网址),频道/用户,描述,长度绘制所有视频条目。然后,它会在页面底部找到带有 data-uix-load-more-href 属性的按钮,其中包含指向下一页的链接,如:< / p>
"/browse_ajax?action_continuation=1&continuation=98h32hfoasau0fu928hf2hf908h98hr%253D%253D&target_id=item-section-552363&direct_render=1"
...从那里重新擦除视频条目并将它们全部转储到sqlite数据库中;您可以按任何字段(姓名,长度,用户,描述等)搜索条目。
因此,在他们更改其Feed /历史记录页面之前,它是可行的并且已完成。 我甚至可以更新它。
答案 1 :(得分:13)
API目前仅检索Watch History的最后两周。有关更多信息,请参阅报告的错误问题:https://code.google.com/p/gdata-issues/issues/detail?id=4642
注意:强> SO上有一个类似的问题:YouTube API v3 returns truncated watch history
答案 2 :(得分:3)
这似乎是2013年最初报道的一个已知错误。谷歌代码主题解释了完全相同的行为:https://code.google.com/p/gdata-issues/issues/detail?id=4642
答案 3 :(得分:0)
头脑风暴,从未尝试过:您是否尝试使用API 不而是解析https://www.youtube.com/feed/history网址?
理论上,可以模拟用户浏览,包括分页。我不知道有多难(可能非常),因为你需要处理身份验证,而YouTube可能会尝试验证人类正在浏览。
答案 4 :(得分:0)
虽然目前仅靠YouTube API无法做到这一点,但有一种(虽然有些涉及)方法来计算您的观看时间):
function execute() {
return gapi.client.youtube.videos.list({
"part": [
"contentDetails"
],
"id": [
"VIDEO IDs"
],
"fields": "items(contentDetails(duration))"
})
(使用YouTube API Explorer创建的代码)
注意:您可能需要将视频ID列表分成较小的列表(我必须这样做),否则API可能会拒绝该请求。如[由stvar在评论中指出,ID列表的最大长度为50,因此这是列表的最大长度。 (完整披露:我正在使用Python发送请求)
最好的部分是我不认为这实际上违反了任何ToS。