Библиотека для переноса видео с Youtube в группу VK или на страницу пользователя.
Эта библиотека использует youtube-dl-php и vk-php-sdk.
- PHP 7.4+
- Python3 (для youtube-dl или yt-dlp)
- Установленный на сервере youtube-dl или yt-dlp (у автора скорость скачивания была выше). Это необходимо для youtube-dl-php.
composer require dimsog/youtube-to-vk
Наличие VK access token обязательно. Вы можете получить ссылку на получение токена с помощью следующего метода:
use Dimsog\YoutubeToVk\YoutubeToVk;
$clientId = 123456;
echo YoutubeToVk::generateVkAccessTokenLink($clientId)
use Dimsog\YoutubeToVk\YoutubeToVk;
$youtubeToVk = new YoutubeToVk('vk_access_token');
// постинг в группу
$youtubeToVk->toGroup('https://www.youtube.com/watch?v=XXXXXX', 'https://vk.com/group_link_here');
// постинг на страницу пользователя
$youtubeToVk->toUser('https://www.youtube.com/watch?v=XXXXXX');
Вам полностью доступен инстанс YoutubeDl. Это особенно полезно, если нужно показывать прогресс скачивания видео с VK (код взят из официальной документации к youtube-dl-php):
$youtubeToVk->getYoutubeDl()->onProgress(static function (?string $progressTarget, string $percentage, ?string $size, ?string $speed, ?string $eta, ?string $totalTime): void {
echo date("H:i:s") . ", $percentage; Size: $size";
if ($speed) {
echo "; Speed: $speed";
}
if ($eta) {
echo "; ETA: $eta";
}
echo "\n";
});
Если вы используете yt-dlp, пропишите к ней путь:
$youtubeToVk->getYoutubeDl()->setBinPath('/usr/local/bin/yt-dlp');
use Dimsog\YoutubeToVk\YoutubeVideoList;
$youtubeVideoList = new YoutubeVideoList("youtube_api_key");
// можно указывать как id канала, так и его userName
$youtubeVideoList->getVideosFromChannel('EmpathyTest');
$youtubeVideoList->getVideosFromChannel('UCKZC###2ND###t-jY###A#hA');
use Dimsog\YoutubeToVk\YoutubeToVk;
use Dimsog\YoutubeToVk\YoutubeVideoList;
$youtubeVideoList = new YoutubeVideoList("youtube_api_key");
$youtubeToVk = new YoutubeToVk('vk_access_token');
foreach ($youtubeVideoList->getVideosFromChannel('channelId') as $video) {
$youtubeToVk->toGroup($video, 'https://vk.com/group_link_here');
}
В процессе переноса почти 30 000 видео с Youtube в VK, я столкнулся с некоторыми исключениями:
Uncaught VK\Exceptions\VKClientException: Invalid http status: 500
Uncaught VK\Exceptions\VKApiException: Upload error: Getting upload URL error
Отлавливайте эти ошибки в клиентском коде.