首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >适用于任意页面的Youtube Data API v3 pageToken

适用于任意页面的Youtube Data API v3 pageToken
EN

Stack Overflow用户
提问于 2015-06-20 10:08:52
回答 1查看 2.3K关注 0票数 5

上的另一个问题显示,如果页码和maxResults设置相同,则不同搜索的pageTokens是相同的。

版本2允许您通过设置开始位置转到任意页面,但v3只提供下一个和前一个令牌。即使你知道有5页的结果,也不会从第1页跳到第5页。

那么我们该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30949556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档