1

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

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

在这里查看:链接

这是我的代码( 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;
}
?>

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

4

2 回答 2

1

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

使用此 URL 获取前 25 个视频(明确指定 max-results 是个好主意):

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 开始
  • 您可以使用该节点来确定结果总数以及是否需要分页。
  • 您还可以使用节点来确定下一个结果的 URL。
于 2013-05-08T18:45:54.800 回答
0

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

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

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

于 2015-01-14T00:43:31.143 回答