Вопрос по get, php, parse-url, url, youtube – получить видео YouTube ID с PHP

4

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

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

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

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
        e,lse
        {
            $video_query = parse_url( $video_id, PHP_URL_QUERY );
            parse_str( $video_query, $video_params );
            $video_id = $video_params['v'];
        }

    }

    return $video_id;

}

Как я могу иметь дело с URL-адресами, которые используют?v версия, а не/v/ версия?

Эээ, приведенный выше код уже работает с первым URL? cmbuckley
Комментарий №2 - самый простой способ:stackoverflow.com/questions/3392993/... vuhung3990
Возможный дубликат:stackoverflow.com/questions/5831191.... safarov
Возможный дубликат:stackoverflow.com/questions/2936467/... Alexander
Хех. Так оно и есть. MichaelRushton

Ваш Ответ

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

?> 

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

0
<?php
$link = "http://www.youtube.com/watch?v=oHg5SJYRHA0";
$video_id = str_replace('http://www.youtube.com/watch?v=', '', $link);
echo $video_id;
?>


oHg5SJYRHA0

Источник

3
<?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)
?>
0
$parts = explode('=', $link);

// $parts[1] will y40ND8kXDlg

='. Скорее всего будет больше?

Если вы копируете / вставляете URL-адреса с веб-сайта YouTube, часто появляются другие параметры, такие как `youtube.com/watch?v=oHg5SJYRHA0&player=normal&... Их может быть дюжина. Aleks G
1


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);

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

Не работает с общим URL. Amir Savand
1

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

П.С .: Это работает для всех типов 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];
}

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

0

е в URL, но вы должны изменить индекс (V) с $ ID_youtube ['v'] на любое другое.

function getID_youtube($url)
{
    parse_str(parse_url($url, PHP_URL_QUERY), $ID_youtube);
    return $ID_youtube['v'];
}
Не работает с общим URL-адресом, как это:youtu.be/6-cWo2-IgMg Amir Savand
0
preg_match("#([\w\d\-]){11}#is", 'http://www.youtube.com/watch?v=y40ND8kXDlg', $matches);
echo $matches[1];
6

Нравится:

$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]+)
Это не всегда будет работать. Если вы копируете / вставляете URL-адреса с веб-сайта YouTube, часто появляются другие параметры, такие какhttp://www.youtube.com/watch?v=oHg5SJYRHA0&player=normal&... There can be a dozen of these. Your code will produce the ID ofoHg5SJYRHA0 & player = normal & ... `- что явно не так Aleks G
Исправлено Посмотрите на новое решение. Daniil Ryzhkov
Или посмотрите на мой код здесь:github.com/lingtalfi/video-ids-and-thumbnails/blob/master/... Он обрабатывает различные URL-адреса YouTube, а также Vimeo и Dailymotion. ling
0

/" или последний "=". После этого вы всегда найдете видео-идентификатор.

Это может работать с/ URL, но не всегда будет работать с другим типом. Если вы копируете / вставляете URL-адреса с веб-сайта YouTube, часто появляются другие параметры, такие какyoutube.com/watch?v=oHg5SJYRHA0&player=normal&... Их может быть дюжина. Посудите сами, что произойдет, если вы будете искать последнее= Aleks G
о, верно. но если вы ищете первое появление «v =» или «v /», вы получите начало идентификатора. конец идентификатора - это конец строки или следующий символ «&». ESCOBAR
1

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

  $link = 'http://www.youtube.com/watch?v=oHg5SJYRHA0&player=normal';

  strtok($link, '?');

  parse_str(strtok(''));

  echo $v;

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

Похожие вопросы