Как правильно получить прямую ссылку на видео YouTube?
Подскажите как правильно получить прямую ссылку (или как отправить запрос через cURL) на видео в YouTube.
Сейчас делаю так, получаю meta информацию так https://www.youtube.com/get_video_info?video_id=айди_видео с помощью $data = file_get_contents("https://www.youtube.com/get_video_info?video_id=айди_видео");
Там нахожу ссылку на видео, но по какой-то причине, некоторые видео ссылки не предоставляют, а получаю вот такой ответ: {"playabilityStatus":{"status":"UNPLAYABLE","reason":"Это видео недоступно.","errorScreen":{"playerErrorMessageRenderer":{"reason":{"simpleText":"Это видео недоступно."},"proceedButton":{"buttonRenderer":{"style":"STYLE_PRIMARY","size":"SIZE_DEFAULT","isDisabled":false,"text":{"simpleText":"Посмотреть на YouTube"},"trackingParams":"CAQQ8FsiEwjU34jNju_oAhWNdbIKHSxYDQA="}},"thumbnail":{"thumbnails":[{"url":"//s.ytimg.com/yts/img/meh7-vflGevej7.png","width":140,"height":100}]},"icon":{"iconType":"ERROR_OUTLINE"}}},"contextParams":"Q0FFU0FnZ0M="},"videoDetails"
По какой причине? Видео доступно для просмотра на YouTube. Не могу понять. Подскажите пожалуйста, как правильно получить ссылку через meta или как обращаться по-другому к YouTube, чтобы получить прямую ссылку и инфо о видео. Спасибо.
Ответы (1 шт):
Всю инфу о видео можешь получить так:
$url = 'https://www.youtube.com/watch?v=qsBc3Ipo4Fc';
//$url = 'https://youtu.be/qsBc3Ipo4Fc';
$id = NULL;
preg_match('/\?v=([^\&]*)/', $url, $ok);
if(!empty($ok[1])){
$id = trim($ok[1]);
};
if(empty($id)){
preg_match('/youtu\.be\/([^\&]*)/', $url, $ok);
if(!empty($ok[1])){
$id = trim($ok[1]);
};
};
if(!empty($id)){
$strm = array(
'http'=>array(
'method' => 'GET',
'header' => 'referer: https://www.youtube.com/'
)
);
$context = stream_context_create($strm);
$content = file_get_contents('https://www.youtube.com/get_video_info?html5=1&video_id='.$id, false, $context);
parse_str($content, $arr);
if(is_array($arr)){
foreach($arr as &$v){
$v = rawurldecode($v);
if(is_object(json_decode($v))){
$v = json_decode($v, true);
};
};
};
echo '<pre>';
print_r($arr);
echo '</pre>';