2015-04-26 59 views
0

好吧,可以说我有一个YouTube播放列表,其中有500个项目。 YouTube的PlaylistItems终点只允许同时检索50项:通过YouTube API中的页码获取播放列表项?

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页。

这似乎是资源的巨大浪费和卷曲单独操作可能是一个杀手。

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

+0

没有什么,现在证明,虽然看着是返回它的nextPageToken串看来,他们总是为相同数量的maxResults的(即是相同的,就是你一直在做的maxResults = 50,nextPageToken这个拿到第2页将是相同的,无论'q'的值是什么,nextPageToken也会得到第3页,第4页等等)。这看起来不像是你想在生产应用程序中依赖的东西,但找出“第10页,第50页结果”令牌是什么是可行的... – jlmcdonald

+0

绝对不是我想要使用的东西。 –

回答

-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')是您的页面令牌。

相关问题