使用 PHP for 和 foreach 循环从 JSON 数据中检索视频信息时遇到问题 - YouTube API 3
Trouble retrieving video info from JSON data using PHP for and foreach loops - YouTube API 3
基本上我想列出 YouTube 频道的最后上传,但我在使用 for
循环时遇到了问题,或者我也缺少 foreach
使用。
我尝试了以下方法:
function last_uploads() {
for($i = 0; $i < 20; ){
error_reporting(E_ALL);
$url = 'https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=UCBR8-60-B28hp2BmDPdntcQ&maxResults=3&key={key}&type=video';
$json = file_get_contents($url);
$json_data = json_decode($json, false);
$id = $json_data->items[0]->id->videoId;
echo '<iframe id="ytplayer" type="text/html" width="auto" height="auto"
src="http://www.youtube.com/embed/' . $id . '?rel=0&showinfo=1"
frameborder="0" allowfullscreen></iframe><br class="clear" />';
}
$i++;
break;
}
提要 url ( $url
) 的输出如下:
{
"kind": "youtube#searchListResponse",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/sa0AWnsYjVk9MPM3sjMlLcrfFxU\"",
"nextPageToken": "CAMQAA",
"pageInfo": {
"totalResults": 219,
"resultsPerPage": 3
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/2QHwn2uxHHlB9OQ9ViQw0LdnQwI\"",
"id": {
"kind": "youtube#video",
"videoId": "AbqT_ubkT0Y"
},
"snippet": {
"publishedAt": "2015-03-03T17:44:56.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "#DearMe - What Advice Would You Give Your Younger Self?",
"description": "Share your advice by making your own #DearMe GIF at http://youtubedearme.com ** In celebration of International Women's Day, take part in YouTube's global ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/PoM38fElRhJodbFBOt_g1xgJ2RE\"",
"id": {
"kind": "youtube#video",
"videoId": "OUmMAAPX6E8"
},
"snippet": {
"publishedAt": "2015-02-23T14:35:35.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "Introducing the YouTube Kids app",
"description": "Download YouTube Kids for free on your Android or iOS device. Android: http://goo.gl/SsDTHh iOS: http://goo.gl/P0cikI The YouTube Kids app is designed for ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/-017SY9hNMURE5Slk5j5CU087wE\"",
"id": {
"kind": "youtube#video",
"videoId": "SDdXVOD4llU"
},
"snippet": {
"publishedAt": "2015-01-24T02:59:11.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "Highlights From the YouTube Interview with President Obama",
"description": "On Jan 22, 2015, President Obama sat down for his first interview after the State of the Union with popular YouTube creators, Bethany Mota, Hank Green and ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
}
]
}
问题是 last_uploads()
returns 最后 1 个视频并不断重复,直到出现 120 seconds exceeded
错误。
有什么想法吗?
此致,
谢谢!
简直一团糟。
- 您的 for 循环将无限期执行直到超时,因为 $i++ 在 for 循环之后。 (事实是,甚至不需要 for 循环,因为您正在从频道中获取最新的 3 个视频 - 无需执行 20 次)。
您的代码仅获取返回的第一个视频的 ID。这是 for 循环应该循环遍历结果的地方。
foreach ( $json_data->items 作为 $item ) {
$id = $item->id->videoId;
# 打印你的东西
}
感谢@johnh10 [],删除 for 循环让它工作:
function last_uploads() {
$url = 'https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=UCBR8-60-B28hp2BmDPdntcQ&maxResults=3&key={key}&type=video';
$json = file_get_contents($url);
$json_data = json_decode($json, false);
foreach ( $json_data->items as $item ) {
$id = $item->id->videoId;
echo '<iframe id="ytplayer" type="text/html" width="auto" height="auto"
src="http://www.youtube.com/embed/' . $id . '?rel=0&showinfo=1"
frameborder="0" allowfullscreen></iframe><br class="clear" />';
}
}
谢谢约翰 :)
基本上我想列出 YouTube 频道的最后上传,但我在使用 for
循环时遇到了问题,或者我也缺少 foreach
使用。
我尝试了以下方法:
function last_uploads() {
for($i = 0; $i < 20; ){
error_reporting(E_ALL);
$url = 'https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=UCBR8-60-B28hp2BmDPdntcQ&maxResults=3&key={key}&type=video';
$json = file_get_contents($url);
$json_data = json_decode($json, false);
$id = $json_data->items[0]->id->videoId;
echo '<iframe id="ytplayer" type="text/html" width="auto" height="auto"
src="http://www.youtube.com/embed/' . $id . '?rel=0&showinfo=1"
frameborder="0" allowfullscreen></iframe><br class="clear" />';
}
$i++;
break;
}
提要 url ( $url
) 的输出如下:
{
"kind": "youtube#searchListResponse",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/sa0AWnsYjVk9MPM3sjMlLcrfFxU\"",
"nextPageToken": "CAMQAA",
"pageInfo": {
"totalResults": 219,
"resultsPerPage": 3
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/2QHwn2uxHHlB9OQ9ViQw0LdnQwI\"",
"id": {
"kind": "youtube#video",
"videoId": "AbqT_ubkT0Y"
},
"snippet": {
"publishedAt": "2015-03-03T17:44:56.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "#DearMe - What Advice Would You Give Your Younger Self?",
"description": "Share your advice by making your own #DearMe GIF at http://youtubedearme.com ** In celebration of International Women's Day, take part in YouTube's global ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/AbqT_ubkT0Y/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/PoM38fElRhJodbFBOt_g1xgJ2RE\"",
"id": {
"kind": "youtube#video",
"videoId": "OUmMAAPX6E8"
},
"snippet": {
"publishedAt": "2015-02-23T14:35:35.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "Introducing the YouTube Kids app",
"description": "Download YouTube Kids for free on your Android or iOS device. Android: http://goo.gl/SsDTHh iOS: http://goo.gl/P0cikI The YouTube Kids app is designed for ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/OUmMAAPX6E8/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"IHLB7Mi__JPvvG2zLQWAg8l36UU/-017SY9hNMURE5Slk5j5CU087wE\"",
"id": {
"kind": "youtube#video",
"videoId": "SDdXVOD4llU"
},
"snippet": {
"publishedAt": "2015-01-24T02:59:11.000Z",
"channelId": "UCBR8-60-B28hp2BmDPdntcQ",
"title": "Highlights From the YouTube Interview with President Obama",
"description": "On Jan 22, 2015, President Obama sat down for his first interview after the State of the Union with popular YouTube creators, Bethany Mota, Hank Green and ...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/default.jpg"
},
"medium": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/mqdefault.jpg"
},
"high": {
"url": "https://i.ytimg.com/vi/SDdXVOD4llU/hqdefault.jpg"
}
},
"channelTitle": "YouTube",
"liveBroadcastContent": "none"
}
}
]
}
问题是 last_uploads()
returns 最后 1 个视频并不断重复,直到出现 120 seconds exceeded
错误。
有什么想法吗?
此致,
谢谢!
简直一团糟。
- 您的 for 循环将无限期执行直到超时,因为 $i++ 在 for 循环之后。 (事实是,甚至不需要 for 循环,因为您正在从频道中获取最新的 3 个视频 - 无需执行 20 次)。
您的代码仅获取返回的第一个视频的 ID。这是 for 循环应该循环遍历结果的地方。
foreach ( $json_data->items 作为 $item ) { $id = $item->id->videoId; # 打印你的东西 }
感谢@johnh10 [
function last_uploads() {
$url = 'https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=UCBR8-60-B28hp2BmDPdntcQ&maxResults=3&key={key}&type=video';
$json = file_get_contents($url);
$json_data = json_decode($json, false);
foreach ( $json_data->items as $item ) {
$id = $item->id->videoId;
echo '<iframe id="ytplayer" type="text/html" width="auto" height="auto"
src="http://www.youtube.com/embed/' . $id . '?rel=0&showinfo=1"
frameborder="0" allowfullscreen></iframe><br class="clear" />';
}
}
谢谢约翰 :)