igbas90 / youtube-data-api
Youtube 数据 API v3
2.0
2020-10-19 09:40 UTC
Requires
- php: ^7.2
- ext-json: *
- guzzlehttp/guzzle: ^7.1
Requires (Dev)
- phpunit/php-invoker: ^2.0
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2024-09-19 23:07:45 UTC
README
支持的API
- channels.list
- commentsThread.list
- subscriptions.list
- videos.list
- playlistItems.list
- videoCategories.list
授权
!!! 此库不支持 OAuth2,仅支持 GOOGLE CONSOLE API KEY
安装
在下面的控制台运行以下命令以将包下载到您的项目中
composer require igbas90/youtube-data-api
用法
实例
使用单个壳。 服务在访问时创建
use Igbas90\YoutubeDataApi\YoutubeDataApi; $dataApiClient = new YoutubeDataApi(); $commentsThreadClient = $dataApiClient->commentsThreadList;
仅创建服务
use Igbas90\YoutubeDataApi\Services\CommentsThreadList; $commentsThreadClient = new CommentsThreadList();
设置参数
您可以分别为每个服务设置参数
/** @var $dataApiClient Igbas90\YoutubeDataApi\YoutubeDataApi */ $dataApiClient->commentsThreadList->setApiKey('you google console api key'); $dataApiClient->subscriptionsList->setVideoId('9L9UQANH5oI');
批量设置
/** @var $dataApiClient Igbas90\YoutubeDataApi\YoutubeDataApi */ $dataApiClient->commentsThreadList->setParams([ 'apiKey' => "you google console api key", 'params' => [ 'part' => ['part1', 'part2', ...], 'videoId' => 'string or array', ... ] ]);
例如 apiKey、proxy、responseFormatter 等参数可以在壳中创建服务时设置,为这些参数在壳中设置这些参数。创建服务后,您只能通过服务本身的方
use Igbas90\YoutubeDataApi\YoutubeDataApi; $dataApiClient = new YoutubeDataApi([ 'apiKey' => 'your google console api key', 'proxy' => 'http://username:password@ip:port', 'responseFormatter' => new ResponseFormatter() ]);
使用代理
要使用代理服务器,请将其设置为服务
use Igbas90\YoutubeDataApi\YoutubeDataApi; $dataApiClient = new YoutubeDataApi(); //set proxy $dataApiClient->commentsThreadList->setProxy('http://username:password@ip:port'); //reset proxy $dataApiClient->commentsThreadList->resetProxy();
获取结果
/** @var $client Igbas90\YoutubeDataApi\Services\CommentsThreadList */ $response = $client->request();
分页
对于分页,您可以手动设置 pageToken
use Igbas90\YoutubeDataApi\YoutubeDataApi; $client = (new YoutubeDataApi())->commentsThreadList->setParams([...]); $response = $client->setPageToken('pageToken')->request();
此包内置了对分页数据的支持。使用 迭代器 来实现。
!!! 注意,客户端 pageToken 将用作迭代器的起始位置
/** @var $client \Igbas90\YoutubeDataApi\Services\CommentsThreadList*/ $comments = []; foreach($client->getIterator() as $response) { $body = json_decode($response->getBody(), true); $comment = array_merge($comments, $body['items']); }
默认情况下,迭代器与原始服务一起工作,这在使用多个迭代器时不太方便。为了排除迭代器对服务的影响,您可以设置迭代器与服务的 clone 一起工作。为此,请调用 getIterator() 方法,并传递参数 true。
/** @var $client \Igbas90\YoutubeDataApi\Services\CommentsThreadList*/ $iterator1 = $client->getIterator(true); $iterator2 = $client->setVideoId('videoId')->getIterator(true); $iterator3 = $client->setParams([ 'videoId' => '9L9UQANH5oI', 'apiKey' => 'google console api key' ])->getIterator(true);
响应格式
默认情况下,返回 Psr\Http\Message\ResponseInterface。如果您需要返回不同的格式,则可以指定一个实现 Igbas90\YoutubeDataApi\Classes\ResponseFormatter 接口的对象,该对象将用于转换返回的结果。
use Igbas90\YoutubeDataApi\Classes\ResponseFormatter; use Psr\Http\Message\ResponseInterface; /* * Create custom response converter */ class BodyJsonDecodeFormatter implements ResponseFormatter { public function format(ResponseInterface $response) { $content = $response->getBody(); return json_decode($content, true); } } /** @var $client Igbas90\YoutubeDataApi\Services\CommentsThreadList */ $client->setResponseFormatter(new BodyJsonDecodeFormatter()); //@var $response array $response = $client->request();
TEST
要运行所需的测试,需要在 define.php 中设置环境变量。为此,只需将 define-example.php 复制到 define.php 中。
cp define-example.php define.php
将 define.php 中的值替换为您自己的值。
define("API_KEY", "google console key"); define("PROXY", "http://username:password@ip:port"); define("CHANNEL_ID", "UCf-b4GSsV5HJysCi6A0Bm6g"); define("PLAYLIST_ID", "UU_x5XG1OV2P6uZZ5FSM9Ttw"); define("VIDEO_ID", "oxQ7wfiS4GY");