dimsog / youtube-to-vk
Transfer video from youtube to vk
1.0.1
2022-04-11 13:01 UTC
Requires
- php: >=7.4
- guzzlehttp/guzzle: ^7.4
- norkunas/youtube-dl-php: ^2.1
- vkcom/vk-php-sdk: ^5.101
This package is not auto-updated.
Last update: 2024-11-19 01:28:29 UTC
README
Библиотека для переноса видео с 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
Вам полностью доступен инстанс 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
Отлавливайте эти ошибки в клиентском коде.