我目前正在使用YouTube的API JSON-C响应来从播放列表中提取数据并在列表中显示内容。我这样做是使用PHP,但是因为YouTube限制了所调用的最大视频数量,所以我遇到了绊脚石。我可以请求的最大值是50,而我需要将200多个视频放入列表中,我希望能够动态地执行此操作。
据我所知,我必须循环响应,这就是我所做的,但有没有办法可以动态完成?
如果你能帮助我,那将是很棒的,我的代码是:
$count = 0;
foreach($data->data->items as $item) {
$count++;
echo $count." ".$item->id;
echo " - ";
echo $item->title;
echo "<br />";
if($count == 50) {
$query = "http://gdata.youtube.com/feeds/api/videos?q=USERNAME&start-index=50&max-results=50&v=2&alt=jsonc";
$data = file_get_contents($query);
if($data){
$data = json_decode($data);
foreach($data->data->items as $item) {
$count++;
echo $count." ".$item->id;
echo " - ";
echo $item->title;
echo "<br />";
}
}
}
if($count == 100) {
$query = "http://gdata.youtube.com/feeds/api/videos?q=USERNAME&start-index=100&max-results=50&v=2&alt=jsonc";
$data = file_get_contents($query);
if($data){
$data = json_decode($data);
foreach($data->data->items as $item) {
$count++;
echo $count." ".$item->id;
echo " - ";
echo $item->title;
echo "<br />";
}
}
}
}
依旧......
如果你能帮助我,或者至少指出我的方向非常好,谢谢。
答案 0 :(得分:0)
一种方法是循环请求,然后遍历请求中的每个项目。像这样:
$count = 1;
do {
$data = ...; // get 50 results starting at $count
foreach ($data->items as $item) {
echo "$count {$item->id} - {$item->title}<br />\n";
$count++;
}
} while (count($data->items) == 50);
请注意start-index
1 为基础,因此您必须查询1,51,101等。
(这实际上非常类似于通过缓冲区读取文件,除非文件已经到达结尾,如果读取给你0字节,而在这里,如果你的数量少于金额,你就到了最后你问过。)
答案 1 :(得分:0)
我要做的是首先调用4个页面,然后将结果合并为1个单独的数组,然后迭代数据。
$offsets = array(0,50,100,150);
$data = array();
foreach($offsets as $offset)
{
$query = "http://gdata.youtube.com/feeds/api/videos?q=USERNAME&start-index=" . $offset . "&max-results=50&v=2&alt=jsonc";
$set = file_get_contents($query);
if(!emprty($set ))
{
$data = array_merge($data,json_decode($set));
}
}
//use $data here