2013-05-06 123 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

所以,作为一个最终答案,答案是你不能。可能会有您看不到的私人播放列表,并且此错误会阻止您看到保存的播放列表。

相关问题