Youtube获取所有播放列表

时间:2013-05-06 15:49:29

标签: php json youtube youtube-api youtube-channels

我正在使用PHP脚本查找特定用户ID已上传的所有播放列表。问题是脚本没有返回所有播放列表,只返回其中一些播放列表。

我想获取所有播放列表,但并非所有播放列表都被提取。

请在此处查看:Link

这是我的代码(GET ARGUMENT是/ channelname):

<?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;
}
?>

如何进行更改以获取频道中的所有播放列表?

2 个答案:

答案 0 :(得分:1)

  

max-results ...指定应该的最大结果数   包含在结果集中。此参数与...一起使用   start-index参数确定返回哪些结果...   此参数的默认值为25,最大值为50 ...

使用此网址获取前25个视频(明确指定最高结果是一个好主意):

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

要获得接下来的25个视频,请指定start-index = 26:

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

注意:

  • 编号从1开始
  • 您可以使用该节点确定结果总数以及是否需要分页。
  • 您还可以使用节点来确定网址 下一个结果。

答案 1 :(得分:0)

对这个老问题做了一个坏消息,但我自己一直在研究这个问题。当您尝试访问其他人的播放列表时,您只能看到公开播放列表。私人可能包括历史记录,收藏夹和观看播放列表。还有一些可能是私人的。因此,除非您使用查询查看“我的”播放列表,否则您不会看到这些内容。还有已保存的播放列表 - 这些是其他人的播放列表,其中有人在自己的频道上保存了链接。所以你可能会来我的频道寻找有关开发的视频,我可能已经保存了对其他频道的引用 - 所以我不需要在我自己的播放列表中托管视频,我只相信其他人来维护他们的列表。无论如何,根据这个公认的问题,此功能似乎无法通过API访问:

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

作为“如何进行更改以获取频道所有播放列表?”的最终答案,答案是您不能。可能会有您无法看到的私人播放列表,此错误会阻止您查看已保存的播放列表。