【问题标题】:YouTube Data API returns more results than maxResultsYouTube 数据 API 返回的结果多于 maxResults
【发布时间】:2020-01-02 14:01:28
【问题描述】:

我创建了这个 PHP 脚本,它从 youtube 频道打印出指定数量的最新 youtube 视频。我将 maxResults 设置为 10,但它返回数百个结果。请通过代码和帮助。

<?php

$API_Url = 'https://www.googleapis.com/youtube/v3/';
$API_Key = '...';
$channelId = 'UCX6OQ3DkcsbYNE6H8uQQuVA';

$parameter = [
    'id'=> $channelId,
    'part'=> 'contentDetails',
    'key'=> $API_Key
];
$channel_URL = $API_Url . 'channels?' . http_build_query($parameter);
$json_details = json_decode(file_get_contents($channel_URL), true);

$playlist=$json_details['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

$parameter = [
    'part'=> 'snippet',
    'playlistId' => $playlist,
    'maxResults'=> 10,
    'key'=> $API_Key
];
$channel_URL = $API_Url . 'playlistItems?' . http_build_query($parameter);
$json_details = json_decode(file_get_contents($channel_URL), true);


$my_videos = [];
foreach($json_details['items'] as $video){
    //$my_videos[] = $video['snippet']['resourceId']['videoId'];
    $my_videos[] = array( 'v_id'=>$video['snippet']['resourceId']['videoId'], 'v_name'=>$video['snippet']['title'] );
}

while(isset($json_details['nextPageToken'])){
    $nxt_page_URL = $channel_URL . '&pageToken=' . $json_details['nextPageToken'];
    $json_details = json_decode(file_get_contents($nxt_page_URL), true);
    foreach($json_details['items'] as $video)
        $my_videos[] = $video['snippet']['resourceId']['videoId'];
}

print_r($my_videos);

//foreach($my_videos as $video){
    //if(isset($video)){

        //echo '<a href="https://www.youtube.com/watch?v='. $video['v_id'] .'">
                    //<div>'. $video['v_name'] .'</div>
            //</a><br><br><br>';
    //}
//}

而且它返回的额外结果甚至没有标题或 ID。自己看图

这是一个屏幕截图:

【问题讨论】:

  • 您的循环似乎不断获得更多结果,所以您是否预计会有超过 10 个结果?这段代码是你写的吗?
  • 不是全部...我遵循了 youtube 教程
  • 好的,那能回答你的问题吗?以while(isset($json_details['nextPageToken'])){ 开头的块获取下一页,然后是之后的页面并继续执行,直到每次将视频 ID 添加到 $my_videos 时,API 都不会在响应中返回 nextPageToken 参数。
  • 据我说,循环是无关紧要的。 api 已经在发送所有这些结果。
  • 好的。那么您建议进行哪些更改

标签: php youtube youtube-api youtube-data-api


【解决方案1】:

您得到这么多项目的原因是,在第一次请求之后,您有一个 while 循环,该循环向 YouTube API 发出后续请求以获取下一页数据,直到在响应负载中找不到 nextPageToken,这意味着您可以发出 1 到数十或数百个请求,具体取决于可用的数据页数,每个请求最多返回 10 个附加项。

每个单独的请求将按照您指定的时间一次带回 10 个项目,但累计总数显然远不止于此。由于您只对前 10 个感兴趣,因此只需删除 while 块即可阻止代码在第一个之后发出任何请求,因此不会将它们添加到数组中。

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2019-05-12
    • 1970-01-01
    • 2018-11-03
    • 2019-08-29
    相关资源
    最近更新 更多