Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP循环代码_Php_Youtube_Json_Json C - Fatal编程技术网

使用PHP循环代码

使用PHP循环代码,php,youtube,json,json-c,Php,Youtube,Json,Json C,我目前正在使用YouTube的API JSON-C响应从播放列表中提取数据,并在列表中显示内容。我是用PHP来做这件事的,但是因为YouTube限制了被调用的视频的最大数量,我遇到了一个绊脚石。我最多可以请求50个,而我有200多个视频,我需要把它们放在一个列表中,我希望能够动态地做到这一点 我知道我必须循环响应,这就是我所做的,但是有没有一种方法可以动态地完成呢 如果您能帮助我,那就太好了,我的代码是: $count = 0; foreach($data->data->items

我目前正在使用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 />";
            }
        }
    }
}
等等


如果您能帮助我,或者至少为我指出正确的方向,那就太好了,谢谢。

一种方法是在请求上循环,然后在请求中的每个项目上循环。像这样:

$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);
注意,开始索引是基于1的,所以您必须查询1、51、101等


这实际上与通过缓冲区读取文件非常相似,不同的是,如果读取的结果为0字节,则文件已到达末尾,而在这里,如果得到的数据少于所需的数量,则文件已到达末尾。

我要做的是先调用4个页面,然后将结果合并到一个数组中,然后对数据进行迭代

$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 

多亏了这一点,我成功地设计出了类似的东西,它的工作就像魔术一样。谢谢:谢谢,如果我知道视频的确切数量,我会这样做,但随着时间的推移,可能会添加更多视频,所以我需要动态增加偏移量。我已经为aaz创建了一个类似的解决方案,所以我让它工作了,非常感谢您的回答。