如何获得我所有的YouTube观看记录
How to get my entire YouTube watch history?
我试图在我的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
- 有可能过滤来自嵌入式YouTube的声音吗
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- AngularJs对所有页面中的所有记录进行排序
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- window.location替换并传递URL历史记录条目中的变量
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- Javascript历史记录转换为php行
- html5视频中的Youtube类型注释
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 猫鼬在特定记录中查找嵌套记录
- 浏览器何时记录历史记录
- 链接和youtube的Javascript和regex
- 将一个表的id与另一个表中的user_id进行匹配,以获取mysql中的记录
- 更新成员数据模型中的记录列表
- 如何使用提交按钮搜索表中的记录
- 正在OrientDB中嵌入函数中的记录
- YouTube作为弹出窗口在桌面版本上播放,但不在移动设备上播放
- 使用javascript将视频从我的android应用程序上传到youtube
- 如何获得我所有的YouTube观看记录
- 可能吗?记录播放计数嵌入YouTube视频