YouTube 数据 API returns 结果多于 maxResults
YouTube Data API returns more results than maxResults
我创建了这个 PHP 脚本,它从 YouTube 频道打印出指定数量的最新 YouTube 视频。我将 maxResults 设置为 10,但它 returns 有数百个结果。请仔细阅读代码并提供帮助。
<?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。自己看图
截图如下:
您获得这么多项目的原因是,在第一个请求之后,您有一个 while
循环,该循环向 YouTube API 发出后续请求以获取下一页数据,直到 nextPageToken
未在响应负载中找到,这意味着您可以发出 1 到数十或数百个请求,具体取决于有多少页数据可用,每个请求最多带回 10 个额外项目。
每个单独的请求将按照您指定的时间一次带回 10 件物品,但累计总数显然远不止于此。由于您只对前 10 个感兴趣,只需删除 while
块就可以阻止代码在第一个请求之后发出更多请求,因此不会将它们添加到数组中。
我创建了这个 PHP 脚本,它从 YouTube 频道打印出指定数量的最新 YouTube 视频。我将 maxResults 设置为 10,但它 returns 有数百个结果。请仔细阅读代码并提供帮助。
<?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。自己看图
截图如下:
您获得这么多项目的原因是,在第一个请求之后,您有一个 while
循环,该循环向 YouTube API 发出后续请求以获取下一页数据,直到 nextPageToken
未在响应负载中找到,这意味着您可以发出 1 到数十或数百个请求,具体取决于有多少页数据可用,每个请求最多带回 10 个额外项目。
每个单独的请求将按照您指定的时间一次带回 10 件物品,但累计总数显然远不止于此。由于您只对前 10 个感兴趣,只需删除 while
块就可以阻止代码在第一个请求之后发出更多请求,因此不会将它们添加到数组中。