【问题标题】:Looping code using PHP使用 PHP 循环代码
【发布时间】:2011-06-27 18:37:53
【问题描述】:

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

等等……

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

【问题讨论】:

    标签: php youtube json json-c


    【解决方案1】:

    一种方法是遍历请求,然后遍历请求中的每个项目。像这样:

    $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 字节,则您已经到达末尾,而在这里,如果您获得的数量少于该数量,则您已经到达末尾你要求的。)

    【讨论】:

    • 谢谢你,我已经设法完成了类似的工作,并且它的工作就像魔术一样。谢谢你:)
    【解决方案2】:

    我会先调用这 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 
    

    【讨论】:

    • 谢谢,如果我知道视频的确切数量,我会这样做,但随着时间的推移可能会添加更多,所以我需要动态增加偏移量。我已经创建了一个与 aaz 类似的解决方案,所以我让它工作了,非常感谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多