在YouTube API中按页码获取PlaylistItems?

时间:2015-04-26 06:18:28

标签: youtube-api

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

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

在50个项目之后,它会为您提供nextPageToken,您可以使用该$searchResponse = $youtube->search->listSearch('id,snippet', array( 'q' => $_GET['q'], 'maxResults' => '10', 'pageToken' => $_GET['pageToken'] )); 在查询中指定以获取下一页。这样做,您可以遍历整个播放列表,在10个查询中获取所有500个项目。

然而,如果我只想获得最后一页怎么办?第10页?

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

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

那么可以在V3 API中设置起始索引,就像在V2 API中一样吗?

1 个答案:

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