2013-05-06 220 views
1

我正在使用PHP腳本查找特定用戶標識已上傳的所有播放列表。問題是腳本沒有返回所有的播放列表,而只是其中的一部分。Youtube獲取所有播放列表

我想獲得所有播放列表,但並非所有播放列表都被抓取。

看看這裏:Link

這裏是我的代碼(GET參數是/頻道名稱):

<?php 
header('Content-Type: text/html; charset=utf-8'); 
    $feedUrl='https://gdata.youtube.com/feeds/api/users/'.$_GET['id'].'/playlists?v=2&alt=json'; 
    $data = json_decode(file_get_contents($feedUrl),true); 
    $info = $data["feed"]; 
    $entry = $info["entry"]; 
    $nEntry = count($entry); 
/* echo "Playlist Name: ".$info["title"]['$t'].'<br/>'; 
    echo "Number of Videos (".$nVideo."):<br/>";*/ 
    $MainFeed=array(); 
    for($i=0;$i<$nEntry;$i++){ 
     $thumbId=split('/',$entry[$i]['media$group']['media$thumbnail'][0]['url']); 
     $thumbId=$thumbId[4];  
     $playList=array(    
         'title' => $entry[$i]['title']['$t'], 
         'playlistId' => $entry[$i]['yt$playlistId']['$t'], 
         'published'=>$entry[$i]['published']['$t'], 
         'thumbId'=>$thumbId, 
         'videosCount'=>$entry[$i]['yt$countHint']['$t'], 
         'videos'=>getVideos($entry[$i]['yt$playlistId']['$t'])      
        ); 
     array_push($MainFeed,$playList); 
     //print_r($entry[$i]); 
        /* 
     echo "Name: ".$entry[$i]['title']['$t'].'<br/>'; 
     echo 'http://www.youtube.com/playlist?list='.$entry[$i]['yt$playlistId']['$t'].'&feature=plcp'.'<br/>';  
     echo '<br>$thumbId : '.$thumbId .'<br>'; 
     echo "playlistId: ".$entry[$i]['yt$playlistId']['$t']."<br />"; 
     echo "published: ".$entry[$i]['published']['$t']."<br />"; 
     */ 
    // break; 
    } 
    echo '{ "feed":'.json_encode($MainFeed).'}'; 

function getVideos($playListId){ 
    $feedUrl='https://gdata.youtube.com/feeds/api/playlists/'.$playListId.'?v=2&alt=json'; 
    $data = json_decode(file_get_contents($feedUrl),true); 
    $info = $data["feed"]; 
    $entry = $info["entry"]; 
    $nEntry = count($entry); 
    $PLayListVideos=array(); 
    for($i=0;$i<$nEntry;$i++){ 
      $video = array(    
          'title' => $entry[$i]['title']['$t'], 
          'description' => $entry[$i]['media$group']['media$description']['$t'],       
          'published' =>$entry[$i]['published']['$t'], 
          'duration'=>$entry[$i]['media$group']['yt$duration']['seconds'], 
          'videoid'=>$entry[$i]['media$group']['yt$videoid']['$t'], 
          'favoriteCount'=>$entry[$i]['yt$statistics']['favoriteCount'], 
          'viewCount'=>$entry[$i]['yt$statistics']['viewCount'], 
          'numDislikes'=>$entry[$i]['yt$rating']['numDislikes'], 
          'numLikes'=>$entry[$i]['yt$rating']['numLikes'], 
          'rating'=>$entry[$i]['gd$rating']['average'], 
          'max'=>$entry[$i]['gd$rating']['max'], 
          'min'=>$entry[$i]['gd$rating']['min'] , 
          'numRaters'=>$entry[$i]['gd$rating']['numRaters'] , 
          'rtsp1'=>$entry[$i]['media$group']['media$content']['1']['url'], 
          'rtsp2'=>$entry[$i]['media$group']['media$content']['2']['url'], 
         ); 
     array_push($PLayListVideos,$video); 
         /* 
     echo "Name: ".$entry[$i]['title']['$t'].'<br/>'; 
     echo "published: ".$entry[$i]['published']['$t']."<br />"; 
     echo "duration : ".$entry[$i]['media$group']['yt$duration']['seconds'].'<br/>'; 
     echo "videoid : ".$entry[$i]['media$group']['yt$videoid']['$t'].'<br/>'; 
     echo "Image 90 : ".$entry[$i]['media$group']['media$thumbnail'][0]['url'].'<br/>'; 
     echo "Image 180 : ".$entry[$i]['media$group']['media$thumbnail'][1]['url'].'<br/>'; 
     echo "Image 360 : ".$entry[$i]['media$group']['media$thumbnail'][2]['url'].'<br/>'; 
     echo "favoriteCount : ".$entry[$i]['yt$statistics']['favoriteCount'] .'<br/>'; 
     echo "viewCount : ".$entry[$i]['yt$statistics']['viewCount'] .'<br/>'; 
     echo "numDislikes : ".$entry[$i]['yt$rating']['numDislikes'] .'<br/>'; 
     echo "numLikes : ".$entry[$i]['yt$rating']['numLikes'] .'<br/>'; 
     echo "rating : ".$entry[$i]['gd$rating']['average'] .'<br/>'; 
     echo "max : ".$entry[$i]['gd$rating']['max'] .'<br/>'; 
     echo "min : ".$entry[$i]['gd$rating']['min'] .'<br/>'; 
     echo "numRaters : ".$entry[$i]['gd$rating']['numRaters'] .'<br/>'; 

     echo "rtsp1 : ".$entry[$i]['media$group']['media$content']['1']['url'] .'<br/>'; 
     echo "rtsp2 : ".$entry[$i]['media$group']['media$content']['2']['url'] .'<br/>'; 
     */ 
     //print_r($entry[$i]); 
    } 
    return $PLayListVideos; 
} 
?> 

我如何可以更改把所有的通道具有播放列表?

+1

你應該包括你當前得到的輸出和你想得到的。這會讓人們更容易幫助你。 – 2013-05-06 16:06:41

回答

1

max-results ...指定應包含在結果集中的最大結果數 。該參數在結合 起始索引參數來確定返回結果的......這個參數的 默認值是25,最大值爲50 ...

使用此網址拿到第25個視頻(顯式指定最大結果是一個好主意):

http://gdata.youtube.com/feeds/api/playlists/FLz97F7dMxBNOfGYu3rx8aCw?max-results=25&start-index=1 

獲得下一個25個視頻指定啓動指數= 26:

http://gdata.youtube.com/feeds/api/playlists/FLz97F7dMxBNOfGYu3rx8aCw?max-results=25&start-index=26 

注:

  • 編號從1
  • 開始可以使用該節點以確定結果的總數以及是否需要尋呼。
  • 您還可以使用節點確定下一個結果的URL爲 。
0

在這個老問題上做了necro,但我一直在研究這個問題。當您嘗試訪問其他人的播放列表時,您只能看到其他人的播放列表。私人可能包括歷史,收藏夾和觀看播放列表。還有一些可能是私人的。所以你不會看到這些,除非你使用查詢來查看「我的」播放列表。還有已保存的播放列表 - 這些播放列表是其他人的播放列表,有人在自己的頻道上保存了鏈接。所以,你可能會來我的頻道尋找開發視頻,我可能已經保存了對其他頻道的引用 - 所以我不需要在自己的播放列表中託管vids,我只會信任其他人維護他們的列表。無論如何,這個功能似乎並不具備通過API按照此公認的問題訪問:「我怎樣才能修改讓所有的通道有播放列表」

https://code.google.com/p/gdata-issues/issues/detail?id=6610

所以,作爲一個最終答案,答案是你不能。可能會有您看不到的私人播放列表,並且此錯誤會阻止您看到保存的播放列表。

相關問題