получение youtube video id PHP

В настоящее время я пишу webapp, в котором некоторые страницы сильно зависят от возможности вытащить правильное видео на YouTube и играть в него. URL-адреса youtube предоставляются пользователями, и по этой причине обычно будут иметь варианты, один из которых может выглядеть следующим образом:

в то время как другой может выглядеть так:

http://www.youtube.com/watch/v/y40ND8kXDlg

В настоящее время я могу извлечь идентификатор из последнего, используя следующий код:

function get_youtube_video_id($video_id) { // Did we get a URL? if ( FALSE !== filter_var( $video_id, FILTER_VALIDATE_URL ) ) { // http://www.youtube.com/v/abcxyz123 if ( FALSE !== strpos( $video_id, '/v/' ) ) { list( , $video_id ) = explode( '/v/', $video_id ); } // http://www.youtube.com/watch?v=abcxyz123 else { $video_query = parse_url( $video_id, PHP_URL_QUERY ); parse_str( $video_query, $video_params ); $video_id = $video_params['v']; } } return $video_id; } 

Как я могу обращаться с URLS, которые используют версию ?v а не /v/ version?

Как это:

 $link = "http://www.youtube.com/watch?v=oHg5SJYRHA0"; $video_id = explode("?v=", $link); $video_id = $video_id[1]; 

Вот универсальное решение:

 $link = "http://www.youtube.com/watch?v=oHg5SJYRHA0&lololo"; $video_id = explode("?v=", $link); // For videos like http://www.youtube.com/watch?v=... if (empty($video_id[1])) $video_id = explode("/v/", $link); // For videos like http://www.youtube.com/watch/v/.. $video_id = explode("&", $video_id[1]); // Deleting any other params $video_id = $video_id[0]; 

Или просто используйте это регулярное выражение:

 (\?v=|/v/)([-a-zA-Z0-9]+) 

Пытаться:

 function youtubeID($url){ $res = explode("v",$url); if(isset($res[1])) { $res1 = explode('&',$res[1]); if(isset($res1[1])){ $res[1] = $res1[0]; } $res1 = explode('#',$res[1]); if(isset($res1[1])){ $res[1] = $res1[0]; } } return substr($res[1],1,12); return false; } $url = "http://www.youtube.com/watch/v/y40ND8kXDlg"; echo youtubeID($url1); 

Должен работать для обоих

Хорошо, это гораздо лучший ответ, чем предыдущий:

  $link = 'http://www.youtube.com/watch?v=oHg5SJYRHA0&player=normal'; strtok($link, '?'); parse_str(strtok('')); echo $v; 

Возможно, было бы хорошо иметь это в функции, чтобы сохранить новые переменные из глобальной области (если вы не хотите их там, очевидно).

Возможно, это еще не все равно, но могут быть другие люди, которые ищут ответ, чтобы получить идентификатор YouTube с URL-адреса.

PS: Это работает для всех типов URL, я тестировал его;

 Function getYouTubeID($URL){ $YouTubeCheck = preg_match('![?&]{1}v=([^&]+)!', $URL . '&', $Data); If($YouTubeCheck){ $VideoID = $Data[1]; } Return $VideoID; } 

Или просто используйте функцию preg_match;

 If(preg_match('![?&]{1}v=([^&]+)!', $URL . '&', $Data)){ $VideoID = $Data[1]; } 

Надеюсь, это поможет кому-то :)!

 $parts = explode('=', $link); // $parts[1] will y40ND8kXDlg 

Этот пример работает только в том случае, если в URL есть один «=». Всегда может быть больше?

я просто искал бы последний «/» или последний «=». После этого вы всегда найдете идентификатор видео.

 preg_match("#([\w\d\-]){11}#is", 'http://www.youtube.com/watch?v=y40ND8kXDlg', $matches); echo $matches[1]; 

Это лучший способ получить идентификатор youtube vedio, или любое поле в URL-адресе, но вы должны изменить индекс (V) из $ ID_youtube ['v'] на все, что захотите.

 function getID_youtube($url) { parse_str(parse_url($url, PHP_URL_QUERY), $ID_youtube); return $ID_youtube['v']; } 
 <?php $link = "http://www.youtube.com/watch?v=oHg5SJYRHA0"; $video_id = str_replace('http://www.youtube.com/watch?v=', '', $link); echo $video_id; ?> 

Вывод:
oHg5SJYRHA0

Источник

 <?php $url = "https://www.youtube.com/watch?v=uKW_FPsFiB8&feature=related"; parse_str( parse_url( $url, PHP_URL_QUERY ), $vid ); echo $vid['v']; ?> 

Выход: uKW_FPsFiB8

Это будет работать для URL-адресов, таких как https://www.youtube.com/watch?v=uKW_FPsFiB8&feature=related или https://www.youtube.com/watch?v=vzH8FH1HF3A&feature=relmfu или только https://www.youtube .com / смотреть? v = uKW_FPsFiB8

 <?php $your_url='https://www.youtube.com/embed/G_5-SqD2gtA'; function get_youtube_id_from_url($url) { if (stristr($url,'youtu.be/')) {preg_match('/(https:|http:|)(\/\/www\.|\/\/|)(.*?)\/(.{11})/i', $url, $final_ID); return $final_ID[4]; } else {@preg_match('/(https:|http:|):(\/\/www\.|\/\/|)(.*?)\/(embed\/|watch.*?v=|)([a-z_A-Z0-9\-]{11})/i', $url, $IDD); return $IDD[5]; } } echo get_youtube_id_from_url($your_url) ?>