PHP urlからYoutubeのアドレスを判別してIDだけ抜き取る

例えば何かしらの投稿コメントがあったとして、その中に何かしらのアドレスが書いてあるとします。もしそのurlのホストがyoutubeであったらID取り出して、例えばjQueryのlightboxやcolorboxなどのプラグインにID(あるいは整形したアドレス)を送りモーダル表示をすると言うような場合の話です。

流れとして、まずはアドレスと思われる文字列をコメントから抜き出さねばなりません。
次にURLをパースし、ホストを見つけてそれがYoutubeのものかどうかを判別し、たいていのYoutubeのアドレスの場合クエリがありますから、クエリを抜き出してそこから更にIDを抜き出すと言う段階をおいます。

正規表現確認用に使用したサイト: PHP live Regex

もし複数のアドレスがあると想定される場合は preg_match_allの方が良いかも知れません。
その場合は、

こんなふうにして$matchの配列が返ってくるので、foreach等で$match[1]を回してそれぞれにアドレスを整形するという感じになるでしょうか。どっちでもいけるようにfindIdって関数を作ってみましたけれども、実際にこの通りでは動かしてなくて、たぶんこれでイケるんじゃね?ぐらいの感じなので色々試してみて下さい。

のパターンの部分は適当にどこかのHPで選んできたパターンなので、もっと正しいと思われるのがあればそれを使って下さい。またfindId の return 部分。ここでYoutubeのアドレスを指定していますが、Youtubeに限ればこれでいいと思うんだけれども、他のサイトの何かしらのアドレスとかの場合は、caseのスコープの中で何かしらの変数にアドレスを代入して、それをreturnするようにするようにします。

さてparse_urlですが、URLをパースすると、

こんな感じになります。今回欲しいのはhostとqueryなのでここがわかれば後は判別するだけなんですけれども、貼り付けられた文字列の中のアドレスが必ずしも正しいとは限りません。もしかするとYoutubeなら11桁あるIDが10桁になっているかも知れませんので、一応何かしらのチェックはしたほうが良いかと思います。
たいていはコピペするので間違ってはいないと思うのですけども。

今回はswitchを利用して、ホスト名を書き出して判別していますが、例えばサイトのホスト名を配列にしておいて、in_arrayとかで調べても良いと思いますし、if elseとかで調べても良いと思います。何が速いかはわかりませんが、対応しようとするサイトが少なければ重くはならないと思います。

allabout48g(仮)ではcolorboxというjQueryのプラグインが入ってまして、youtubeのアドレスがあるとモーダル表示するようにしてあります。その際、クリックする要素には、

このようなリンクが貼ってあります。つまりはclass=”youtube”をクリックされたらモーダルでcolorboxが起動するという感じです。

google+の投稿でコメントの中に何かしらのアドレスが入っている場合は、今回のようなスクリプトで判別して、別のリンクとしてモーダル用のリンクを出力するようにしてあります。別のリンクを用意したのは元の記事の内容をなるべく残すためだけです。場合によっては書き換えても良いと思います。
他には、各グループのナンバリングシングルで選抜メンバー一覧を出した時にYoutubeの関連動画でサムネイルが表示されるようにしてあるのですが、ここもクリックをするとモーダルで動画が見れるようになっています(例えばこういうの)。

スポンサーリンク

シェアする

フォローする