@lament

Как добавить видео с помощью API VK?

Здравствуйте! Подскажите, каким образом можно загрузить видео ВКонтакт с помощью их АПИ?

Пользуюсь методом video.save, передаю ссылку на прямой видеофайл в параметре link, все как в документации. Постоянно получаю ошибку - {"error_code":7,"error_msg":"no video found, check url"}

Ролик не из ютуба. Примерно так: cache-spb07.cdn.yandex.net/kp.cdn.yandex.net/55807...

Такие ссылки тоже не прокатывают - www.kinopoisk.ru/film/462491/video/131565

Кто-то мне сказал что видео надо добавлять из своего ftp, окей, загрузил файл рядом со скриптом, но получаю в upload_url не ссылку на видеофайл а строку "my_video.mp4", который конечно не работает.

Ведь в документации API есть параметр link, почему он не работает? То-есть, работает для ютуба только.
  • Вопрос задан
  • 8047 просмотров
Решения вопроса 1
neluzhin
@neluzhin
Загружать видео можно только в том случае, если все запросы к VK API осуществляются с сервера. В документации написано, как загружать видео, но я расскажу поподробнее. Ход действий примерно такой:

  1. Загрузите видео на свой сервер.
  2. Вызовите метод video.save. Указывать какие-либо параметры не обязательно, но можете указать, например, ID группы, в которую будет добавлено видео, в параметре group_id и имя видеозаписи в параметре name.
  3. После того, как вы вызовете метод video.save, вы получите ссылку, куда надо будет загрузить вашу видеозапись. Выглядеть ответ от ВК будет примерно так:

    response: {
      upload_url: 'http://cs12129.vkontakte.ru/upload_video.php?act=add_video&mid=15748&oid=66748&vid=164322743&fid=0&tag=122517f2&hash=8bf2ea4bb66ca67d28fb&swfupload=1',
      vid: 164322743,
      owner_id: 66321,
      name: 'No name',
      description: '',
      access_key: 'e6822bfb86f90a149c'
    }

    По этому адресу методом POST отправьте видеозапись в поле video_file.

  4. В ответ на загрузку видеозаписи ВК вернёт вам ID видеозаписи:

    {
      "size":1234,
      "video_id":1234567
    }


Это всё. Видеозапись должна будет появиться в указанном вами сообществе.

Небольшой пример на PHP:

<?php

define('VK_ACCESS_TOKEN', '533bacf01e11f55b536a565b57531ac114461ae8736d6506a3');
define('VK_API_VERSION', 5.53);

// // //
// Скачиваем видео с внешнего сервера на свой сервер
// // //

$ch = curl_init();
				
curl_setopt($ch, CURLOPT_URL, 'http://cache-spb07.cdn.yandex.net/kp.cdn.yandex.net/558075/kinopoisk.ru-L_odyss__233_e-311292.mp4');
curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);

$curl_result = curl_exec($ch);

curl_close($ch);

// Кладем видео в папку со скриптом
$fp = fopen('kinopoisk.ru-L_odyss__233_e-311292.mp4', 'x');
fwrite($fp, $curl_result);
fclose($fp);

// // //
// Получаем адрес ссылки, куда загружать видео
// // //

$ch = curl_init();
$parameters = http_build_query([
    'access_token' => VK_ACCESS_TOKEN, // access_token / ключ доступа
    'v'            => VK_API_VERSION, // версия API
    'name'         => 'Имя видеозаписи',
    'description'  => 'Исчерпывающее описание нашей первой видеозаписи.',
    'group_id'     => 125004421, // ID группы
    'no_comments'  => 0 // разрешаем комментирование
]);

curl_setopt($ch, CURLOPT_URL, 'https://api.vk.com/method/video.save?' . $parameters);
curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$curl_result = json_decode(curl_exec($ch), TRUE); // превращаем JSON-массив, который нам вернул VK, в обычный PHP-массив

curl_close($ch);

// // //
// Загружаем видео на серверы ВК
// // //

$ch = curl_init();
$parameters = [
    'video_file' => new CURLFile('kinopoisk.ru-L_odyss__233_e-311292.mp4')  // PHP >= 5.5.0
    // 'video_file' => '@kinopoisk.ru-L_odyss__233_e-311292.mp4' // PHP < 5.5.0
];

curl_setopt($ch, CURLOPT_URL, $curl_result['response']['upload_url']);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, TRUE); // если PHP < 5.5.0, то эту строку надо закомментировать

$curl_result = json_decode(curl_exec($ch), TRUE);

curl_close($ch);

if (isset($curl_result['error'])) {
    exit('Строка ' . __LINE__ . ': Ошибка при загрузке видео на серверы ВК: ' . $curl_result['error'] . '.');
}

echo 'Видеозапись успешно загружена.';

Кстати, параметр link метода video.save принимает только ссылки на популярные видеохостинги, вроде YouTube. О работе через этот параметр я писал в этом вопросе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Akdmeh
@Akdmeh
PHP, Yii2, Music
https://new.vk.com/dev/upload_files_2?f=9.%2B%D0%9...Вам нужно этим методом добавлять видео
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы