alaouy/youtube

Laravel PHP Facade/Wrapper for the YouTube Data API v3

维护者

详细信息

github.com/alaouy/youtube

源代码

问题

安装次数: 956,636

依赖者: 12

建议者: 0

安全性: 0

星标: 779

关注者: 50

分支: 204

v2.2.5 2020-12-14 16:14 UTC

This package is auto-updated.

Last update: 2024-09-11 10:08:16 UTC


README

YouTube Tests Donate

Laravel PHP Facade/Wrapper for the YouTube Data API v3 (非OAuth)

要求

  • PHP 7.0 或更高版本
  • Laravel 5.1 或更高版本
  • Google Console 获取API密钥

寻找适用于PHP 5、Laravel 5.0或Laravel 4的YouTube包?请访问 php5-branch

安装

在控制台中运行以下命令将包下载到您的项目中

composer require alaouy/youtube

配置

/config/app.php 中添加 YoutubeServiceProvider(Laravel < 5.5)

Alaouy\Youtube\YoutubeServiceProvider::class,

别忘了在那里也添加 YouTube Facade(Laravel < 5.5)

'Youtube' => Alaouy\Youtube\Facades\Youtube::class,

发布配置设置

$ php artisan vendor:publish --provider="Alaouy\Youtube\YoutubeServiceProvider"

在文件中设置您的YouTube API密钥

/config/youtube.php

或在 .env 文件中

YOUTUBE_API_KEY = KEY

或者您可以在运行时程序化地设置密钥

Youtube::setApiKey('KEY');

用法

// use Alaouy\Youtube\Facades\Youtube;


// Return an STD PHP object
$video = Youtube::getVideoInfo('rie-hPVJ7Sw');

// Get multiple videos info from an array
$videoList = Youtube::getVideoInfo(['rie-hPVJ7Sw','iKHTawgyKWQ']);

// Get localized video info
$video = Youtube::getLocalizedVideoInfo('vjF9GgrY9c0', 'pl');

// Get comment threads by videoId
$commentThreads = Youtube::getCommentThreadsByVideoId('zwiUB_Lh3iA');

// 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', 'UCk1SpWNzOs4MYmr0uICEntg', 40);

// List videos in a given channel, return an array of PHP objects
$videoList = Youtube::listChannelVideos('UCk1SpWNzOs4MYmr0uICEntg', 40);

$results = Youtube::searchAdvanced([ /* params */ ]);

// Get channel data by channel handle (like https://www.youtube.com/@google), return an STD PHP object
$channel = Youtube::getChannelByHandle('google');

// 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('UCk1SpWNzOs4MYmr0uICEntg');

// Get playlist by ID, return an STD PHP object
$playlist = Youtube::getPlaylistById('PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs');

// 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('UCk1SpWNzOs4MYmr0uICEntg');

// 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('UCk1SpWNzOs4MYmr0uICEntg');

// Retrieve video ID from original YouTube URL
$videoId = Youtube::parseVidFromURL('https://www.youtube.com/watch?v=moSFlvxnbgk');
// result: moSFlvxnbgk

验证规则

// use Alaouy\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 Data API v3

捐赠

如果您觉得这个项目对您有帮助,请考虑请我喝杯茶:)

paypal

鸣谢

基于Madcoda的 php-youtube-api 代码构建。