php – 任意页面的Youtube Data API v3 pageToken
作者:互联网
关于SO的另一个问题显示,如果页码和maxResults设置相同,则pageTokens对于不同的搜索是相同的.
API的第2版允许您通过设置起始位置转到任意页面,但v3仅提供下一个和上一个令牌.即使你知道有5页的结果,也没有从第1页跳到第5页.
那么我们如何解决这个问题呢?
解决方法:
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使用AZ中的列表,然后是az,然后是0-9,并且在列表中每增加1,增量为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-data-api,php,youtube-api 来源: https://codeday.me/bug/20191001/1839694.html