php - YouTube API:获取完整的播放列表

标签 php youtube youtube-api google-api-php-client

我试图理解递归:)好吧,特别是使用Google的PHP客户端库获取完整的YouTube播放列表。

这是我的类YTFunctions中的函数。首先使用有效的,经过身份验证的YouTube_Service对象和playlistId进行调用。然后,理论上,只要PlaylistItems响应具有nextPageToken,它就应该一次又一次地调用自身,然后将其附加到其输出中,该输出应包含播放列表中包含的所有对象(视频)。由于某种原因,它只是返回一个空数组。

public static function getFullPlaylistByID($youtube, $playlistId, $pageToken) {
    $params = array(
        'maxResults' => 50,
        'playlistId' => $playlistId,
    );
    if ($pageToken !== false) {
        $params['pageToken'] = $pageToken;
    }
    $playlistResponse = $youtube->playlistItems->listPlaylistItems('snippet,contentDetails', $params);
    error_log(count($playlistResponse['items']));
    $playlistItems = $playlistResponse['items'];
    if (isset($playlistResponse['nextPageToken'])) {
        $playlistItems = array_merge($playlistItems, YTFunctions::getFullPlaylistByID($youtube,$playlistId, $playlistResponse['nextPageToken']));
    } else {
    }
    return $playlistItems;
}

我显然在这里缺少任何东西,任何帮助将不胜感激。

托比亚斯·蒂姆佩

最佳答案

这是我的类(class),将获得所有播放列表项

<?php
class yt{
    public $DEVELOPER_KEY = '{DEVELOPER_KEY}';
    public $client;
    public $youtube;

    public function __construct(){
        $this->client = new Google_Client();
        $this->client->setDeveloperKey($this->DEVELOPER_KEY);
        $this->youtube = new Google_YoutubeService($this->client);      
    }

    public function getPlaylistItems($playlist, $maxResults, $nextPageToken = ''){
        $params = array(
            'playlistId' => $playlist,
            'maxResults' => $maxResults,
        );

        // if $nextPageToken exist
        if(!empty($nextPageToken)){
            //insert $nextPageToken value into $params['pageToken'] 
            $params['pageToken'] = $nextPageToken;
        }

        $youtubeFeed = $this->youtube->playlistItems->listPlaylistItems('id,snippet,contentDetails', $params);
        // function for looping our feed and entry
        $this->setFeed($youtubeFeed);

        //check if nextPageToken are exist 
        if(!empty($youtubeFeed['nextPageToken'])){
            $insert = $this->getPlaylistItems($playlist, $maxResults, $youtubeFeed['nextPageToken']);
            // return to function if nextPageToken are exist
            return $insert;
        }

    }
}

$yt = new yt();

?>

而不是使用我们的类(class)
$yt->getPlaylistItems('PL0823049820348','25');

关于php - YouTube API:获取完整的播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20598758/

相关文章:

php - sql - 更新而不覆盖现有信息

php - 如何使用 PHP 在数组中对连续的月份进行分组?

php - 捕获 PHP fatal error

php - 使用正则表达式解析嵌套的 IF 语句

youtube - 如何(如果可以)通过特定大小(大)的YouTube API视频进行检索?

jquery - 较小尺寸的 Youtube 视频在 Swiper 中无法工作

php - 通过访问 token 提取 Youtube 帐户信息?

android - 将 YouTube 视频播放器嵌入到 Android 移动应用程序中?

python - 从网页中抓取 YouTube 链接

java - 如何在不打开网站的情况下从网站获取信息