Бота мы начали писать тут: https://nujensait.ru/10776/
Сейчас он умеет отвечать на простейшие запросы…
Хочется научить его читать мой ютуб канал и выводить последние/случайные видео оттуда.
/**/
Документашка
Ищем по теме ….
-
Как получить список видео с канала ютуб https://qna.habr.com/q/406006
Получаем API токен Google тут
https://code.google.com/apis/consoleРазрешаем доступ YouTube Data API v3
Смотрим ID плейлиста
https://www.youtube.com/playlist?list={id_канала}
https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={id_list}&maxResults=50&key={api_key}— получаем 50 видео с канала в формате JSON
-
АПИ библиотека гугла: https://github.com/googleapis/google-api-php-client
Пишем код
Генерируем ключ API
Получаем API токен Google : https://code.google.com/apis/console
Youtube search:
Активируем:
Далее кнопка “Create credentials“
Здесь нам нужен “ключ API“
Запоминаем/сохраняем ключ:
Ставим API библиотеку
composer require google/apiclient:^2.12.1
- Installing google/auth (v1.21.0): Extracting archive - Installing google/apiclient-services (v0.243.0): Extracting archive - Installing google/apiclient (v2.12.1): Extracting archive 17 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files 13 packages you are using are looking for funding. Use the `composer fund` command to find out more!
Скрипт индексации youtube канала
Пишем скриптик, который найдет нужное кол-во видео роликов с указанным ключевым словом.
Пример №1: поиск видео по ключевому слову (глобальный)
<?php
/**
* Sample PHP code for youtube.search.list
* See instructions for running these code samples locally:
* https://developers.google.com/explorer-help/guides/code_samples#php
* @source https://www.freakyjolly.com/google-api-php-how-to-use-google-api-like-youtube-data-v3-api-in-php/
*/
if (!file_exists(__DIR__ . '/../../../vendor/autoload.php')) {
throw new Exception(sprintf('Please run "composer require google/apiclient:~2.0" in "%s"', __DIR__));
}
require_once __DIR__ . '/../../../vendor/autoload.php';
Class YoutubeApi {
/**
* @return GoogleServiceYouTubeSearchListResponse
*/
public function getVideosList(): GoogleServiceYouTubeSearchListResponse {
$client = new Google_Client();
$client->setApplicationName('API code samples');
$client->setDeveloperKey('ХХХХХХХХХХХХХХХХХХХХХХХХ');
// Define service object for making API requests.
$service = new Google_Service_YouTube($client);
$queryParams = [
'maxResults' => 5,
'q' => 'mishaikon'
];
$response = $service->search->listSearch('snippet', $queryParams);
return $response;
}
}
$ytApi = new YoutubeApi();
$list = $ytApi->getVideosList();
print_r($list['items']);
print "Videos found: " . count($list['items']);
print "n";
Работает: находит 5 видео по запросу “mishaikon“
[4] => GoogleServiceYouTubeSearchResult Object
(
....
[id] => GoogleServiceYouTubeResourceId Object
(
[channelId] =>
[kind] => youtube#video
[playlistId] =>
[videoId] => 9Zjttqj3uk4
[internal_gapi_mappings:protected] => Array
(
)
[modelData:protected] => Array
(
)
[processed:protected] => Array
(
)
)
....
)
)
Videos found: 5
нас тут интересует только ИД видео: [id][videoId](ниже сформируем URL-s с этими ИД)
Допишем наш класс т.о., чтобы могли получать случайное видео по указанной поисковой фразе (метод searchRandomVideo):
<?php
/**
* Work with Youtube API
*/
class MyYoutubeApi
{
private $client = null;
private $service = null;
private const MAX_VIDEOS_LIMIT = 50;
private const CONFIG_NAME = "mishaikon_bot.ini";
public function __construct()
{
// read API key from config
$config = parse_ini_file(__DIR__ . '/' . self::CONFIG_NAME, true);
$apiKey = $config['youtube']['api_key'];
if (!$apiKey) {
throw new DomainException("apiKey is undefined");
}
$this->client = new Google_Client();
$this->client->setApplicationName('API code samples');
$this->client->setDeveloperKey($apiKey);
if (!$this->client) {
throw new DomainException("Cannot init API client");
}
// Define service object for making API requests.
$this->service = new Google_Service_YouTube($this->client);
if (!$this->service) {
throw new DomainException("Cannot init API connection");
}
}
/**
* @return GoogleServiceYouTubeSearchListResponse
*/
public function searchVideosList(string $query, int $limit): GoogleServiceYouTubeSearchListResponse
{
$queryParams = [
'maxResults' => $limit,
'q' => $query
];
$response = $this->service->search->listSearch('snippet', $queryParams);
return $response;
}
/**
* @return array<string>
*/
public function searchVideosUrlsList(string $query, int $limit): array
{
$list = $this->searchVideosList($query, $limit);
/** @var GoogleServiceYouTubeSearchResult $v */
foreach ($list as $v) {
$videoId = $v->getId()->getVideoId();
if($videoId) {
$urls[] = "https://www.youtube.com/watch?v=" . $videoId;
}
}
return $urls;
}
/**
* @param string $query
* @return string
*/
public function searchRandomVideo(string $query): string
{
$list = $this->searchVideosUrlsList($query, self::MAX_VIDEOS_LIMIT);
$key = array_rand($list, 1);
$url = $list[$key];
return $url;
}
}
параллельно ставим нужную библиотеку для работы с АПИ ютуба:
composer require google/apiclient:~2.0"
смотрим пример по работа с ней тут: https://www.freakyjolly.com/google-api-php-how-to-use-google-api-like-youtube-data-v3-api-in-php/
Используем эту библиотеку для получения/вывода ботом случайного видео из Ютуба:
Добавляем в mishaikon_bot.php :
/**
* @param string $reply
* @return MessageObject
* @throws TelegramBotExceptionsTelegramSDKException
*/
public function sendHtmlMsg(string $reply): MessageObject
{
return $this->tgApi->sendMessage(['chat_id' => $this->msg->getChatId(), 'parse_mode' => 'HTML', 'disable_web_page_preview' => false, 'text' => $reply]);
}
/**
* get random video from Youtube
* @return bool
* @throws TelegramBotExceptionsTelegramSDKException
*/
private function actVideo(): bool
{
$ytApi = new MyYoutubeApi();
$url = $ytApi->searchRandomVideo('mishaikon');
$this->sendHtmlMsg($url);
return true;
}
Проверяем функционал
Пишем сообщение боту:
получаем случайное видео, найденное по ключевому слову “mishaikon“, УРА
Пример №2: получаем список видео с нашего канала
Пишем скриптик, который создаст список всех видео с канала (нужны их URLS)
Будем парсить мой канал: https://www.youtube.com/c/mishaikon/videos
см : https://stackoverflow.com/a/36387404/3928685
Here is a video from Google Developers showing how to list all videos in a channel in v3 of the YouTube API: https://youtu.be/RjUlmco7v2M
There are two steps:
Query Channels to get the «uploads» Id. eg https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
Use this «uploads» Id to query PlaylistItems to get the list of videos. eg https://www.googleapis.com/youtube/v3/playlistItems?playlistId={«uploads» Id}&key={API key}&part=snippet&maxResults=50
(….) Продолжение следует : получение случайного видео непосредственно из указанного канала







Нет Ответов