Сделал вот такой парсер:
$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 адресу. Иногда по открытии ссылки сразу скачивается в браузере, иногда нет. Что можно сделать?