上的另一个问题显示,如果页码和maxResults设置相同,则不同搜索的pageTokens是相同的。
版本2允许您通过设置开始位置转到任意页面,但v3只提供下一个和前一个令牌。即使你知道有5页的结果,也不会从第1页跳到第5页。
那么我们该如何解决这个问题呢?
发布于 2015-06-20 10:08:52
YouTube pageToken的长度为六个字符。以下是我对该格式所能确定的:
char 1:我见过的总是'C‘。char 2-3:编码的起始位置char 4-5:我看到的总是'QA‘。char 6:'A‘表示列表项的位置大于或等于起始位置。“q”表示起始位置之前的列表项。
由于字符6的性质,有两种不同的方式来表示同一页。给定maxResults=1,可以通过将页面标记设置为"CAEQAA“或"CAIQAQ”来访问页面2。第一个表示从结果编号2(由字符2-3“AE”表示)开始,并列出1个项目。第二个表示返回结果编号3之前的一项(由字符2-3 "AI“表示)。
字符2-3是一种奇怪的16进制编码。
字符3使用A -Z中的列表,然后是a-z,然后是0-9,列表中的增量为4。该序列为A、E、I、M、Q、U、Y、c、g、k、o、s、w、0、4、8。字符2从A到B再到C到D,依此类推。出于我的目的,我不会处理大的结果集,所以我没有费心去看第二个字符在几百个结果之外会发生什么。也许有人使用更大的集合将提供更新,关于角色2在那之后如何表现。
由于该字符串仅包含起始位置和">=“或"<”选项,因此同一字符串可用于多种情况。例如,每页有2个结果,第二页的开始位置是结果3,其pageToken是"CAIQAA“。这与第三个页面的令牌相同,每个页面一个结果。
由于我主要是php用户,下面是我用来获取给定页面的pageToken的函数:
function token($limit, $page) {
$start = 1 + ($page - 1) * $limit;
$third_chars = array_merge(
range("A","Z",4),
range("c","z",4),
range(0,9,4));
return 'C'.
chr(ord('A') + floor($start / 16)).
$third_chars[($start % 16) - 1].
'QAA';
}
$limit = 1;
echo "With $limit result(s) per page...".PHP_EOL;
for ($i = 1; $i < 6; ++$i) {
echo "The token for page $i is ".token($limit, $i).PHP_EOL;
}
请在你的项目中测试这个函数,如果你发现一个缺陷或增强,请更新我们的其余部分,因为YouTube没有为我们提供一个简单的方法来做到这一点。
编辑: YouTube接口v3的页面令牌序列已更改,该系统将不再工作。有关最新的和工作页面标记的示例,请参阅this page。
https://stackoverflow.com/questions/30949556
复制相似问题