получение идентификатора видео YouTube на PHP

В настоящее время я пишу веб-приложение, в котором некоторые страницы сильно зависят от возможности вставить правильное видео с 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
        else
        {
            $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/?


person Udders    schedule 02.04.2012    source источник
comment
Возможный дубликат: stackoverflow.com/ questions / 2936467 /   -  person Alexander    schedule 02.04.2012
comment
Возможный дубликат: stackoverflow.com/questions/5831191 ....   -  person safarov    schedule 02.04.2012
comment
Эээ, приведенный выше код уже работает с первым URL?   -  person cmbuckley    schedule 02.04.2012
comment
Комментарий №2 - самый простой способ: stackoverflow.com/questions/3392993/   -  person vuhung3990    schedule 06.05.2014


Ответы (11)


Нравится:

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

Пытаться:


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

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

person Sudhir Bastakoti    schedule 02.04.2012

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

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

  strtok($link, '?');

  parse_str(strtok(''));

  echo $v;

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

person MichaelRushton    schedule 02.04.2012

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

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

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

person Toxic    schedule 31.05.2013

$parts = explode('=', $link);

// $parts[1] will y40ND8kXDlg

Этот пример работает, только если в URL-адресе стоит один знак '='. Может быть, когда-нибудь будет больше?

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

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

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

Это лучший способ получить идентификатор 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'];
}
person Osama Mosaad    schedule 29.12.2014

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

Вывод:
oHg5SJYRHA0

Источник

person Randel Fordberg    schedule 27.01.2015

<?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/watch?v=uKW_FPsFiB8

person santosh    schedule 09.05.2015

Самый простой из известных мне способов - YouTube.

 function GetYouTubeId($url)
 {
 preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
 $youtube_id = $match[1];
 return $youtube_id;
 }
person Debbie Kurth    schedule 07.11.2019

Все идентификаторы видео YouTube имеют длину 11 символов. Я написал Regex на его основе:

<?php

$url = "https://www.youtube.com/watch?v=gooWdc6kb80";

preg_match('/(?:\/|=)(.{11})(?:$|&|\?)/', $url, $matches);

echo $matches[1];

?>

Он может соответствовать различным видеоформатам YouTube:

// http://youtu.be/dQw4w9WgXcQ
// http://www.youtube.com/embed/dQw4w9WgXcQ
// http://www.youtube.com/watch?v=dQw4w9WgXcQ
// http://www.youtube.com/?v=dQw4w9WgXcQ
// http://www.youtube.com/v/dQw4w9WgXcQ
// http://www.youtube.com/e/dQw4w9WgXcQ
// http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ
// http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ
// http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
// http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ
// https://www.youtube.com/embed/dQw4w9WgXcQ?feature=oembed
// https://www.youtube.com/embed/dQw4w9WgXcQ?start=16&feature=oembed
person Gijo Varghese    schedule 11.06.2021