Загружать видео можно только в том случае, если все запросы к VK API осуществляются с сервера.
В документации написано, как загружать видео, но я расскажу поподробнее. Ход действий примерно такой:
- Загрузите видео на свой сервер.
- Вызовите метод video.save. Указывать какие-либо параметры не обязательно, но можете указать, например, ID группы, в которую будет добавлено видео, в параметре group_id и имя видеозаписи в параметре name.
- После того, как вы вызовете метод 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.
- В ответ на загрузку видеозаписи ВК вернёт вам 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. О работе через этот параметр я писал
в этом вопросе.