好吧,假设我有一个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中一样吗?
答案 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
')是您的页面令牌。