devsarfo / youtube
Laravel 用于 YouTube 数据 API v3 的包
v1.1.1
2024-03-29 17:31 UTC
Requires
- php: ^7.0|^8.0
- ext-curl: *
Requires (Dev)
- phpunit/phpunit: ^6.1|^9.3
This package is auto-updated.
Last update: 2024-09-29 18:30:29 UTC
README
Laravel 用于 YouTube 数据 API v3 的包
需求
- PHP 7.0 或更高版本
- Laravel 5.1 或更高版本
- 从Google Console获取 API 密钥
安装
在控制台运行以下命令将包下载到您的项目中
composer require devsarfo/youtube
配置
在/config/app.php中添加YoutubeServiceProvider (Laravel < 5.5)
DevSarfo\Youtube\YoutubeServiceProvider::class,
别忘了也要在那里添加 Youtube 门面 (Laravel < 5.5)
'Youtube' => DevSarfo\Youtube\Facades\Youtube::class,
发布配置设置
$ php artisan vendor:publish --provider="DevSarfo\Youtube\YoutubeServiceProvider"
在文件中设置您的 YouTube API 密钥
/config/youtube.php
或在 .env 文件中
YOUTUBE_API_KEY = KEY
或者您可以在运行时程序化地设置密钥
Youtube::setApiKey('KEY');
使用方法
// use DevSarfo\Youtube\Facades\Youtube; // Return an STD PHP object $video = Youtube::getVideoInfo('n5Xp3M8lvzw'); // Get multiple videos info from an array $videoList = Youtube::getVideoInfo(['n5Xp3M8lvzw','Attb0hi2Dpk']); // Get localized video info $video = Youtube::getLocalizedVideoInfo('Attb0hi2Dpk', 'en'); // Get multiple videos related to a video $relatedVideos = Youtube::getRelatedVideos('Attb0hi2Dpk'); // Get comment threads by videoId $commentThreads = Youtube::getCommentThreadsByVideoId('Attb0hi2Dpk'); // Get popular videos in a country, return an array of PHP objects $videoList = Youtube::getPopularVideos('us'); // Search playlists, channels and videos. return an array of PHP objects $results = Youtube::search('Android'); // Only search videos, return an array of PHP objects $videoList = Youtube::searchVideos('Android'); // Search only videos in a given channel, return an array of PHP objects $videoList = Youtube::searchChannelVideos('keyword', 'UCTiH4aWrbJ1u0UVmjH_rUxQ', 40); // List videos in a given channel, return an array of PHP objects $videoList = Youtube::listChannelVideos('UCTiH4aWrbJ1u0UVmjH_rUxQ', 40); $results = Youtube::searchAdvanced([ /* params */ ]); // Get channel data by channel name, return an STD PHP object $channel = Youtube::getChannelByName('xdadevelopers'); // Get channel data by channel ID, return an STD PHP object $channel = Youtube::getChannelById('UCTiH4aWrbJ1u0UVmjH_rUxQ'); // Get playlist by ID, return an STD PHP object $playlist = Youtube::getPlaylistById('PLKreJXVT4v6w2PinY'); // Get playlists by multiple ID's, return an array of STD PHP objects $playlists = Youtube::getPlaylistById(['PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs', 'PL590L5WQmH8cUsRyHkk1cPGxW0j5kmhm0']); // Get playlist by channel ID, return an array of PHP objects $playlists = Youtube::getPlaylistsByChannelId('UCTiH4aWrbJ1u0UVmjH_rUxQ'); // Get items in a playlist by playlist ID, return an array of PHP objects $playlistItems = Youtube::getPlaylistItemsByPlaylistId('PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs'); // Get channel activities by channel ID, return an array of PHP objects $activities = Youtube::getActivitiesByChannelId('UCTiH4aWrbJ1u0UVmjH_rUxQ'); // Retrieve video ID from original YouTube URL $videoId = Youtube::parseVidFromURL('https://www.youtube.com/watch?v=iFshb7ZsXAg'); // result: iFshb7ZsXAg
验证规则
// use DevSarfo\Youtube\Rules\ValidYoutubeVideo; // Validate a YouTube Video URL [ 'youtube_video_url' => ['bail', 'required', new ValidYoutubeVideo] ];
您可以使用 bail 规则与这个结合使用,以防止不必要的查询。
基本搜索分页
// Set default parameters $params = [ 'q' => 'Android', 'type' => 'video', 'part' => 'id, snippet', 'maxResults' => 50 ]; // Make intial call. with second argument to reveal page info such as page tokens $search = Youtube::searchAdvanced($params, true); // Check if we have a pageToken if (isset($search['info']['nextPageToken'])) { $params['pageToken'] = $search['info']['nextPageToken']; } // Make another call and repeat $search = Youtube::searchAdvanced($params, true); // Add results key with info parameter set print_r($search['results']); /* Alternative approach with new built-in paginateResults function */ // Same params as before $params = [ 'q' => 'Android', 'type' => 'video', 'part' => 'id, snippet', 'maxResults' => 50 ]; // An array to store page tokens so we can go back and forth $pageTokens = []; // Make inital search $search = Youtube::paginateResults($params, null); // Store token $pageTokens[] = $search['info']['nextPageToken']; // Go to next page in result $search = Youtube::paginateResults($params, $pageTokens[0]); // Store token $pageTokens[] = $search['info']['nextPageToken']; // Go to next page in result $search = Youtube::paginateResults($params, $pageTokens[1]); // Store token $pageTokens[] = $search['info']['nextPageToken']; // Go back a page $search = Youtube::paginateResults($params, $pageTokens[0]); // Add results key with info parameter set print_r($search['results']);
上面的分页相当基础。根据您要实现的目标,您可能需要创建一个递归函数来遍历结果。
手动类实例化
// Directly call the YouTube constructor $youtube = new Youtube(config('YOUTUBE_API_KEY')); // By default, if the $_SERVER['HTTP_HOST'] header is set, // it will be used as the `Referer` header. To override // this setting, set 'use-http-host' to false during // object construction: $youtube = new Youtube(config('YOUTUBE_API_KEY'), ['use-http-host' => false]); // This setting can also be set after the object was created $youtube->useHttpHost(false);
运行单元测试
如果您已在您的环境中安装了 PHPUnit,请运行
$ phpunit
如果您没有安装 PHPUnit,您可以运行以下
$ composer update $ ./vendor/bin/phpunit
返回数据格式
返回的 JSON 被解码为 PHP 对象(不是数组)。请阅读官方 API 文档的 "参考" 部分。
YouTube 数据 API v3
捐赠
如果您觉得这个项目对您有帮助,请考虑买我一杯茶 :)
致谢
基于 Madcoda 的 php-youtube-api 和 Mustapha Alaouy 的 Youtube 的代码构建。