Циклический код с использованием PHP - PullRequest
1 голос
/ 15 февраля 2011

В настоящее время я использую ответ JSON-C API YouTube для извлечения данных из списка воспроизведения и отображения содержимого в списке.Я делаю это с помощью 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 />";
            }
        }
    }
}

и так далее ....

Если бы вы могли мне помочь или, по крайней мере, указать мне правильное направление, это было бы здорово, спасибо.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Что я хотел бы сделать, это сначала вызвать 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 
0 голосов
/ 16 февраля 2011

Один из способов - циклическое выполнение запросов, а затем - каждого элемента в запросе.Например:

$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 байт, в то время как здесь вы достигли конца, если вы получите меньше, чем вы просили.)

...