Youtube api 在YouTube API中按页码获取播放列表项?

Youtube api 在YouTube API中按页码获取播放列表项?,youtube-api,Youtube Api,好吧,假设我有一个YouTube播放列表,里面有500个项目。YouTube的PlayItems端点只允许您一次检索50个项目: 在50个项目之后,它将为您提供一个nextpGetOken,您可以使用它在查询中指定以获取下一页。这样,您就可以遍历整个播放列表,在10个查询中获得所有500个项目 但是,如果我只想得到最后一页呢?第10页 在YouTube的V2 API中,您可以告诉它在451位置开始索引,然后它会给出451-500的结果。这似乎不是他们V3API中的选项。现在,如果我只想得到第1

好吧,假设我有一个YouTube播放列表,里面有500个项目。YouTube的PlayItems端点只允许您一次检索50个项目:

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

但是,如果我只想得到最后一页呢?第10页

在YouTube的V2 API中,您可以告诉它在451位置开始索引,然后它会给出451-500的结果。这似乎不是他们V3API中的选项。现在,如果我只想得到第10页,我必须再次重复整个播放列表,扔掉前9页,然后只需要第10页

这似乎是对资源的巨大浪费,而cURL操作本身就是一个杀手


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

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

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


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

目前没有任何文档记录,尽管查看返回的下一个GetOken字符串,对于相同数量的maxResults,它们似乎总是相同的(也就是说,如果你总是做maxResults=50,那么无论“q”的值是多少,下一个GetOken获得第2页的结果都是一样的,下一个GetOken获得第3页、第4页的结果也是一样的)这看起来不像是你想在生产应用程序中依赖的东西,但是找出“第10页、第50页的结果”是可行的代币肯定不是我想用的东西。
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('=')