igbas90/youtube-data-api

Youtube 数据 API v3

2.0 2020-10-19 09:40 UTC

README

支持的API

授权

!!! 此库不支持 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',
        ...
    ]
]);

例如 apiKeyproxyresponseFormatter 等参数可以在壳中创建服务时设置,为这些参数在壳中设置这些参数。创建服务后,您只能通过服务本身的方

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");

文档