8

私は現在、いくつかのページが正しいYouTubeビデオを取り込んで再生できることに大きく依存しているWebアプリケーションを作成しています。YouTube の URL はユーザーによって提供されるため、通常は次のようなバリエーションが含まれます。

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

もう一方は次のようになります。

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

現在、以下のコードを使用して後者から ID を取得できます。

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;

}

?vバージョンではなくバージョンを使用する URL を処理するにはどうすればよい/v/ですか?

4

14 に答える 14

13

このような:

$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]+)
于 2012-04-02T09:06:38.857 に答える
5
<?php
// Here is a sample of the URLs this regex matches: (there can be more content after the given URL that will be ignored)

// 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

// It also works on the youtube-nocookie.com URL with the same above options.
// It will also pull the ID from the URL in an embed code (both iframe and object tags)

preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$youtube_id = $match[1];
?>
于 2020-10-12T15:11:07.500 に答える
2

試す:


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

両方で機能するはずです

于 2012-04-02T09:14:11.070 に答える
1

わかりました、これは私の以前よりもはるかに良い答えです:

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

  strtok($link, '?');

  parse_str(strtok(''));

  echo $v;

新しい変数をグローバル スコープから除外するために、これを関数に含めるとよいかもしれません (明らかにそこに入れたい場合を除きます)。

于 2012-04-02T09:24:25.630 に答える
1

これはまだ使用されていない可能性がありますが、他の人が答えを探している可能性があるため、URL から YouTube ID を取得します。

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];
}

これが誰かを助けることを願っています:)!

于 2013-05-31T00:54:58.777 に答える
0
$parts = explode('=', $link);

// $parts[1] will y40ND8kXDlg

この例は、URLに「=」が1つある場合にのみ機能します。これまで以上になる可能性がありますか?

于 2012-04-02T09:05:41.933 に答える
0

最後の「/」または最後の「=」を検索します。その後、常にvideo-idが見つかります。

于 2012-04-02T09:06:04.067 に答える
0

This is best way to get youtube vedio id , Or any field in url , but you must change index (V) from $ID_youtube['v'] to anything you want.

function getID_youtube($url)
{
    parse_str(parse_url($url, PHP_URL_QUERY), $ID_youtube);
    return $ID_youtube['v'];
}
于 2014-12-29T10:55:02.187 に答える
0
preg_match("#([\w\d\-]){11}#is", 'http://www.youtube.com/watch?v=y40ND8kXDlg', $matches);
echo $matches[1];
于 2012-04-02T09:17:10.160 に答える
0

すべての YouTube 動画 ID の長さは 11 文字です。私はそれに基づいて正規表現を書きました:

<?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
于 2021-06-11T04:16:17.460 に答える