1

現在、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 />";
            }
        }
    }
}

等々...

あなたが私を助けることができれば、または少なくとも私を正しい方向に向けることができれば、それは素晴らしいことです.

4

2 に答える 2

0

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-index1ベースなので、1、51、101 などを照会する必要があることに注意してください。

(これは実際には、バッファを介してファイルを読み取るのと非常によく似ていますが、読み取りが 0 バイトを返した場合は最後に到達したファイルを除きますが、ここでは、要求した量よりも少なくなった場合は最後に到達したことになります.)

于 2011-02-16T10:52:06.430 に答える
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 
于 2011-02-16T11:03:20.183 に答える