web-dev-qa-db-ja.com

URLからYouTubeビデオIDを取得する方法

私は、URLが有効なYouTubeビデオのURLであるかどうかを確認し、そこからYouTubeビデオIDを取得しようとしています。これを達成するために、これまでのところシンプルなJavaScriptスプリット関数を使用していますが、YouTubeには複数のURLがあるため、いくつかの小さな欠点があります。

他のスタックオーバーフロースレッドを表示してきましたが、それらはすべて、1つの特定のURLしかサポートしていないため、必要なものではありません。

これらすべてのURLに一致するものが必要です。

http(s)://www.youtu.be/videoID

http(s)://www.youtube.com/watch?v = videoID

(およびオプションで、スクリプトがYouTubeビデオを含むかどうかをスクリプトが自動的に検出する他の短いURL)

ブラウザですばやく効率的に処理できるアイデアがあれば、大歓迎です。

15
xorinzor

これを試して:

var url = "...";
var videoid = url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
if(videoid != null) {
   console.log("video id = ",videoid[1]);
} else { 
    console.log("The youtube url is not valid.");
}

正規表現を参照してください:

/
(?:https?:\/{2})? // Optional protocol, if have, must be http:// or https://
(?:w{3}\.)?      // Optional sub-domain, if have, must be www.
youtu(?:be)?  // The domain. Match 'youtu' and optionally 'be'. 
\.(?:com|be) // the domain-extension must be .com or .be
(?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in querystring from 'watch' directory OR after root directory, any non-space value.
/
48
The Mask

Youtube APIを見て、APIを介してURLを解析することにより、videoIDを取得する方法があるかどうかを確認してください。

これを見てSO post: Youtube API-Extract video ID

8
edocetirwi

これは簡単かもしれません:

var url = 'http://www.youtu.be/543221'; 
         //http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also
var a = url.split("v=")[1];
a = a != undefined ? a : url.split("youtu.be/")[1];
b = a.split("&")[0];

変数cはあなたのIDを持ちます。早く。正規表現の方が優れていますが、読みにくくなっています。両方を考慮してコードを変更しました。

5
frosty

このコードを試してください

var url = "...";
var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11}));
if(videoid != null) {
    console.log("video id = ",videoid[1]);
} else { 
    console.log("The youtube url is not valid.");
}

正規表現は YouTube動画ID正規表現 からのものです

2

種類が多すぎます:

  • 最新の短い形式:http://youtu.be/NLqAF9hrVbY
  • iframe:http://www.youtube.com/embed/NLqAF9hrVbY
  • iframe(セキュア):https://www.youtube.com/embed/NLqAF9hrVbY
  • オブジェクトパラメータ:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • オブジェクトの埋め込み:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • 見る: http://www.youtube.com/watch?v=NLqAF9hrVbY
  • ユーザー:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
  • ytscreeningroom:http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
  • 何でもあり!: http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
  • 任意/サブドメイン/あまりにも:http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
  • その他のパラメータ:http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
  • クエリにはドットがあります:http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be(ソース: 正規表現を使用して文字列内のすべてのYouTubeビデオIDを見つけるにはどうすればよいですか?

最善の方法は、入力データを制限することです。

幸運を

2
Tony

preg_matchを使用して簡単に行うことができます。ここに例を示します。
$url = "http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec"; preg_match('/v=([0-9a-zA-Z]+)/', $url, $matches); $vid = $matches[1];
これで、ビデオIDは次のようになります。$ vid = YzOt12co4nk;

0
blömpæ