Php 用于任意页面的Youtube数据API v3 pageToken

Php 用于任意页面的Youtube数据API v3 pageToken,php,youtube-api,youtube-data-api,Php,Youtube Api,Youtube Data Api,另一个问题是,如果页码和maxResults设置相同,则PageToken对于不同的搜索是相同的 API的版本2通过设置起始位置允许您转到任意页面,但v3只提供下一个和上一个标记。即使你知道有5页的结果,也不能从第1页跳到第5页 那么我们如何解决这个问题呢?YouTube页面令牌有六个字符长。以下是我能够确定的格式: 角色1:我看到的总是“C”。 字符2-3:编码的起始位置 char 4-5:我看到的总是“QA”。 字符6:“A”表示列表项的位置大于或等于起始位置Q’表示开始位置前的列表项 由于

另一个问题是,如果页码和maxResults设置相同,则PageToken对于不同的搜索是相同的

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


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

YouTube页面令牌有六个字符长。以下是我能够确定的格式:

角色1:我看到的总是“C”。 字符2-3:编码的起始位置 char 4-5:我看到的总是“QA”。 字符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的列表,每增加1,列表中就增加4个。序列是a,E,I,M,Q,U,Y,c,g,k,o,s,w,0,4,8。字符2从a到B到c到D等等。出于我的目的,我没有处理大的结果集,所以我懒得去看第二个字符在几个h之后会发生什么未刷新的结果。也许有人会使用更大的集合来更新角色2之后的行为


由于字符串仅包含起始位置和“>=”或“选项,YouTube的pagetokens可以被视为索引

  • 可以找到前1000个项目的PageToken
  • 可以找到范围(100000)内每10项的PageToken
  • 最高可用的pagetoken是“CJ NBhAA”,它指向位置为99.999的第100.000项
  • maxresults的最大可能值为50
使用pagetoken指定起点,使用maxresults指定项数

示例:

  • 第一项
https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=1&pageToken=CAAQAA

  • 第555项
https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=1&pageToken=CKoEEAA

  • 第99999项
https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=1&pageToken=CJ6NBhAA

  • 10项从第10项开始
https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=10&pageToken=CAkQAA

  • 30项,从第555项开始
https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=30&pageToken=CKoEEAA

  • 从第9999项开始的50项

https://www.googleapis.com/youtube/v3/playlistItems?part=id%2Csnippet&playlistId=&key=&maxResults=50&pageToken=CI9OEAA

使用^Quihico的文件作为参考点,我在用JS编写前一张海报的pageToken生成器的增强功能时感到有点有趣。如果我关于4000s place编码变量的假设是正确的如果超过N>=98304,它应该能够为以第N项开始的页面构造pageToken,在[04194304]中提供了N。它只在N=99999之前进行测试,所以YMMV


链接此处:

这对我来说非常令人印象深刻……一些很好的反向工程。在500个结果之后,API停止提供nextPageTokens,因此您需要证明的模式有一个有限的限制。每页50个项目的页面标记列表。如果您要求每50个项目的页面标记列表,您可以使用包含所有可用pagetokens(100000)如何为youtube api总结果创建分页链接
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;
}