2011-02-15 66 views
1

我目前使用YouTube的API JSON-C響應從播放列表中提取數據並將內容顯示在列表中。我使用PHP來完成這項工作,但是由於YouTube限制了最大數量的視頻,所以我遇到了一個絆腳石。我可以請求的最大數量是50,而我有超過200個視頻需要放入列表中,我希望能夠動態地做到這一點。使用PHP的循環代碼

我明白,我將不得不循環響應,這是我所做的,但有沒有辦法可以動態地完成?

如果你能幫助我,將是巨大的,我的代碼是:

$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

一種方法是循環請求,然後遍歷請求中的每個項目。就像這樣:

$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,51,101等

(這其實很相似,通過一個緩衝區中讀取文件,除非你讀到的文件已經達到0個字節,而在這裏你已經達到了最後的結果,如果你得到的數量少於你要求的數量。)

+0

感謝這個,我設法工作了類似的東西和它的工作就像魔術。謝謝:) – age2011 2011-02-16 20:59:46

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 
+0

感謝你們,如果我知道確切的視頻數量,我會這樣做,但隨着時間的推移可能會有更多的增加,所以我需要偏移動態地增加。我爲aaz創建了一個類似的解決方案,所以我讓它工作,非常感謝您的回答。 – age2011 2011-02-16 21:01:39