@rusgayfer

Как скачать видео из VK через PHP?

Сделал вот такой парсер:

$url = 'Ссылка на видео'; // https://vk.com/video-***_***

// 1080p
$re = '/"url1080":"(.*)"/U';
$str = getHTML($url);
preg_match_all($re, $str, $url1080, PREG_SET_ORDER, 0);

// 720p
$re = '/"url720":"(.*)"/U';
$str = getHTML($url);
preg_match_all($re, $str, $url720, PREG_SET_ORDER, 0);

// 480p
$re = '/"url480":"(.*)"/U';
$str = getHTML($url);
preg_match_all($re, $str, $url480, PREG_SET_ORDER, 0);

// 360p
$re = '/"url360":"(.*)"/U';
$str = getHTML($url);
preg_match_all($re, $str, $url360, PREG_SET_ORDER, 0);

// 240p
$re = '/"url240":"(.*)"/U';
$str = getHTML($url);
preg_match_all($re, $str, $url240, PREG_SET_ORDER, 0);

if(isset($url1080[0][1])) {
    $link = $url1080[0][1];
} elseif(isset($url720[0][1])) {
    $link = $url720[0][1];
} elseif(isset($url480[0][1])) {
    $link = $url480[0][1];
} elseif(isset($url360[0][1])) {
    $link = $url360[0][1];
} elseif(isset($url240[0][1])) {
    $link = $url240[0][1];
}

// Создаем Json (мне нужно для своего API)
$json = '{"url":"'.$link.'"}';
$json_d = json_decode($json);
$link = $json_d->url;

$filename = uniqid();

// Скачивание видео на сервер
copy($link, "../../../api/v2/method/" . $filename . ".mp4");

// Смотрим код страницы
function getHTML($url) {
    
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, [
    'Accept-Language: ru'
]);

$html = curl_exec($ch);
curl_close($ch);

return $html;
}


Получаю ссылку на mp4 файл успешно, но он не скачивается. Так как у них ссылка привязывается к ip адресу. Иногда по открытии ссылки сразу скачивается в браузере, иногда нет. Что можно сделать?
  • Вопрос задан
  • 605 просмотров
Решения вопроса 1
@rusgayfer Автор вопроса
Нашел способ. Нужно скачивать видео тоже через Curl

// Функция загрузки видео
function videoDownload($url) {
$filename = uniqid();
$fp = fopen($filename . ".mp4", 'w'); // Путь скачивания
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'); // Обязательный параметр, без него не скачивается
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
но он не скачивается.
Когда что-то не работает - обычно возникают ошибки, в том числе ошибки могут быть пересланы со стороны апи, и иногда даже прям четко описаны. Смотрите содержимое вернувшегося от сервера ответа, в том числе код ответа сервера.
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Надо ещё куки указать. В коде их нет
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы