埋め込みコードまたは URL から YouTube または Vimeo のビデオ ID を取得したいのですが、PHP でこれを行うためのソリューションはありますか?
4 に答える
preg_matchを使用して ID を取得できます。式自体については、この回答の後半で説明しますが、preg_match の使用方法の基本的な考え方は次のとおりです。
preg_match('expression(video_id)', "http://www.your.url.here", $matches);
$video_id = $matches[1];
これは、あなたが尋ねた可能な入力のタイプごとの式の内訳です。それぞれに、いくつかのテスト ケースと結果を示すリンクを含めました。
などのYouTube URLには、次の式
http://www.youtube.com/watch?v=89OpN_277yY
を使用できます。v=(.{11})
YouTube の埋め込みコードは次のようになります (一部の余分なものは切り取られています)。
<object width="640" height="390"> <param name="movie" value="http://www.youtube.com/v/89OpN_277yY?fs=... ... </object>
またはこのように:
<iframe ... src="http://www.youtube.com/embed/89OpN_277yY" ... </iframe>
したがって、いずれかのスタイルから ID を取得する式は次のようになります。
\/v\/(.{11})|\/embed\/(.{11})
http://vimeo.com/<integer>
私が知る限り、Vimeo の URLは のように見えます。私が見つけた最小http://vimeo.com/2
値は . 誰かが詳細を知っていれば、私を修正できることを願っています。この式は次のように使用できます。vimeo\.com\/([0-9]{1,10})
Vimeo 埋め込みコードは次の形式を取ります。
<iframe src="http://player.vimeo.com/video/<integer>" width="400" ...
したがって、次の式を使用できます。
player\.vimeo\.com\/video\/([0-9]{1,10})
あるいは、数値の長さが最終的に 10 を超える可能性がある場合は、次のように使用できます。
player\.vimeo\.com\/video/([0-9]*)"
式を二重引用符で囲む場合は、
"
will を a でエスケープする必要があることに注意してください。\
要約すると、これをどのように実装したいかはわかりませんが、すべての式を|
で組み合わせるか、それぞれを個別に一致させることができます。式を組み合わせる方法の詳細を教えてほしい場合は、この回答にコメントを追加してください。
別の同様の [YouTube のみ] がここで回答されています。参照すると役立つ場合があります。 YouTubeビデオIDを取得するためのPHP正規表現?
最新の YouTube 標準に従って、次のコードを使用して、埋め込みコードからビデオ ID を抽出できます。
$embed = '<iframe src="//www.youtube.com/embed/n6WYu-pSXH8" frameborder="0"></iframe>';
preg_match('~embed/(.*?)"~', $embed, $output);
echo $output[1];
ありがとうございました