【问题标题】:Getting PlaylistItems by Page Number in YouTube API?在 YouTube API 中按页码获取播放列表项?
【发布时间】:2015-07-04 15:34:37
【问题描述】:

好的,假设我有一个包含 500 项内容的 YouTube 播放列表。 YouTube 的 PlaylistItems 端点一次只允许您检索 50 个项目:

https://developers.google.com/youtube/v3/docs/playlistItems/list

在 50 个项目之后,它会为您提供一个 nextPageToken,您可以使用它在查询中指定以获取下一页。这样做,您可以遍历整个播放列表以在 10 个查询中获取所有 500 个项目。

但是,如果我只想获取最后一页怎么办?第 10 页?

在 YouTube 的 V2 API 中,您可以告诉它从位置 451 开始索引,然后它会为您提供 451-500 的结果。这似乎不是他们的 V3 API 中的一个选项。现在,如果我只想获得第 10 页,我将不得不再次遍历整个播放列表,丢弃前 9 页,然后只取第 10 页。

这似乎是对资源的巨大浪费,仅 cURL 操作就可能是一个杀手。

那么是否可以像在 V2 API 中一样在 V3 API 中设置起始索引?

【问题讨论】:

  • 目前没有任何记录,尽管查看返回的 nextPageToken 字符串似乎对于相同数量的 maxResults 来说它们总是相同的(也就是说,你总是在做 maxResults=50 , 无论 'q' 的值如何,获取第 2 页的 nextPageToken 都将是相同的,获取第 3 页、第 4 页等的 nextPageToken 也将是相同的。)这似乎不是您想要依赖的东西一个生产应用程序,但可以弄清楚“第 10、50 页结果”令牌是什么......
  • 绝对不是我想用的东西。

标签: youtube-api


【解决方案1】:

您仍然可以使用起始索引,但您必须自己生成相应的页面令牌。

据观察,页面标记基本上是一个以base64编码的字节序列,第一个字节总是8,最后两个是16, 0。我们生成的令牌有点像这样(使用 python 3):

i = 451
k = i // 128
i -= 128 * (k - 1)
b = [8, index]
if k > 1 or i > 127: b += [k]
b += [16, 0]
t = base64.b64encode(bytes(f)).decode('utf8').strip('=')

最后的操作删除用于填充 base64 中不完整块的尾随 '=' 字符。结果 ('CMMDEAA') 是您的页面令牌。

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 2017-08-10
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2017-11-01
    • 2017-05-18
    相关资源
    最近更新 更多