如何获得我所有的YouTube观看记录

How to get my entire YouTube watch history?

本文关键字:YouTube 记录 何获得      更新时间:2023-09-26

我试图在我的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无法实现,但有一种(尽管稍微涉及)计算手表时间的方法:

  1. 下载你的手表历史列表作为JSON文件使用谷歌外卖。
  2. 不幸的是,JSON文件不包括视频持续时间,所以下一步是提取视频id ("watch?v="后面的部分)title " url "
  3. 现在把你的视频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