dimsog/youtube-to-vk

Transfer video from youtube to vk

1.0.1 2022-04-11 13:01 UTC

This package is not auto-updated.

Last update: 2024-04-22 22:50:35 UTC


README

Библиотека для переноса видео с Youtube в группу VK или на страницу пользователя.

Эта библиотека использует youtube-dl-php и vk-php-sdk.

Требования

  1. PHP 7.4+
  2. Python3 (для youtube-dl или yt-dlp)
  3. Установленный на сервере 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

Отлавливайте эти ошибки в клиентском коде.