我试图在我的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):我想澄清一下,我一直打算下载我自己的历史,只是出于兴趣,看看我花了多少时间看视频。我还是没能做到
API目前只检索最近两周的Watch History。有关详细信息,请参阅报告的Bug问题:https://code.google.com/p/gdata-issues/issues/detail?id=4642
注意:这里有一个类似的问题:YouTube API v3返回截断的观看历史
我不久前为这个任务写了一个scraper(使用Python 2.7(更新为3.5)和Scrapy)。没有官方API,它使用登录会话cookie和html解析。默认转储到SQLite。https://github.com/zvodd/Youtube-Watch-History-Scraper
如何做:本质上它打开url
https://www.youtube.com/feed/history'
具有从Chrome获取的有效(登录)会话cookie。抓取所有视频条目的名称,vid(url),频道/用户,描述,长度。然后它在页面底部找到带有属性data- ux -load-more-href的按钮,其中包含到下一页的链接,类似于:
"/browse_ajax?action_continuation=1&continuation=98h32hfoasau0fu928hf2hf908h98hr%253D%253D&target_id=item-section-552363&direct_render=1"
…从那里重新抓取视频条目并将它们全部转储到sqlite数据库中;您可以通过任何字段(名称,长度,用户,描述等)搜索条目。
所以在他们改变他们的feed/历史页面之前,这是可行的。我甚至可以更新它
虽然目前仅使用YouTube API无法实现,但有一种(尽管稍微涉及)计算手表时间的方法:
- 下载你的手表历史列表作为JSON文件使用谷歌外卖。
- 不幸的是,JSON文件不包括视频持续时间,所以下一步是提取视频id ("watch?v="后面的部分)title " url "
- 现在把你的视频id列表,并发送一个请求到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
这似乎是一个已知的漏洞,最初在2013年报告。在Google Code线程中解释了完全相同的行为:https://code.google.com/p/gdata-issues/issues/detail?id=4642
头脑风暴,从未尝试过:您是否尝试过不使用API而不是解析https://www.youtube.com/feed/history URL?
理论上,可以模拟用户浏览,包括分页。我不知道有多难(可能非常),因为你需要处理身份验证,YouTube可能会尝试验证一个人正在浏览。
我正在寻找一些方法来获得YouTube历史列表。我刚刚发现谷歌有一个工具。在谷歌外卖中,你有一个选项,你可以获得整个观看视频列表。我的名单一直追溯到2011年。
为了使解释简短,有两个视频解释如何做到这一点:
https://www.youtube.com/watch?v=zlzzO1e6dwshttps://www.youtube.com/watch?v=dto8jGMxHxY