YouTubeのurlが入力されたら再生画面を表示する - Perl

YouTubeにはobject要素(タグ)を貼り付けると、ブログやWebサイトなどから直接ビデオを再生できる機能が用意されている。例えば掲示板(BBS)などで、YouTubeのURLが入力されたら、上記のような再生モードに置換したいが、どのようなコードを書けば良いだろうか?

次のようなURLのパターンの時に置換が行われる。

最後のID部分が、英数字と'_'で構成されていることが条件である。以下のソースで折り返しているところが改行されている場合は、1行にしていただきたい。

サンプル

;#
;#YouTube変換
;#

print convYouTube('http://youtube.com/watch?v=LIhbap3FlGc');

sub convYouTube{
  my $str = shift;
  $str =~ s/http\:\/\/(?:www\.)?youtube\.com\/watch\?v\=([a-zA-Z0-9\_]{1,})/<object width\="425" height\="350"><param name\="movie" value\="http\:\/\/www\.youtube\.com\/v\/$1"><\/param><param name\="wmode" value\="transparent"><\/param><embed src="http\:\/\/www\.youtube\.com\/v\/$1" type\="application\/x-shockwave-flash" wmode\="transparent" width\="425" height\="350"><\/embed><\/object>/g;

  return($str);
}

実行結果

<object width="425" height="350"><param name="movie" value="http://www.youtube.c
om/v/LIhbap3FlGc"></param><param name="wmode" value="transparent"></param><embed src="http:
//www.youtube.com/v/LIhbap3FlGc" type="application/x-shockwave-flash" wmode="transparent" w
idth="425" height="350"></embed></object>

その他の書き方

サンプル(独自記法)

通常はURLを貼り付けた方が楽ではあるが、[youtube:LIhbap3FlGc]のように記述するのが好きな方がいるので、このような独自記法についても、おまけで記載しておく。実行結果は上記と同じである。

;#
;#YouTube変換 (独自記法)
;#

print convYouTube('[youtube:LIhbap3FlGc]');

sub convYouTube{
  my $str = shift;
  $str =~ s/\[youtube:([a-zA-Z0-9\_]{1,})\]/<object width\="425" height\="350"><param name\="movie" value\="http\:\/\/www\.youtube\.com\/v\/$1"><\/param><param name\="wmode" value\="transparent"><\/param><embed src="http\:\/\/www\.youtube\.com\/v\/$1" type\="application\/x-shockwave-flash" wmode\="transparent" width\="425" height\="350"><\/embed><\/object>/g;

  return($str);
}

サンプル(URL置換+独自記法)

URLの置換と、独自記法を合わせたものは以下である。

;#
;#YouTube変換 (URL置換+独自記法)
;#

sub convYouTube{
  my $str = shift;

  $str =~ s/http\:\/\/(?:www\.)?youtube\.com\/watch\?v\=([a-zA-Z0-9\_]{1,})/<object width\="425" height\="350"><param name\="movie" value\="http\:\/\/www\.youtube\.com\/v\/$1"><\/param><param name\="wmode" value\="transparent"><\/param><embed src="http\:\/\/www\.youtube\.com\/v\/$1" type\="application\/x-shockwave-flash" wmode\="transparent" width\="425" height\="350"><\/embed><\/object>/g;
  $str =~ s/\[youtube:([a-zA-Z0-9\_]{1,})\]/<object width\="425" height\="350"><param name\="movie" value\="http\:\/\/www\.youtube\.com\/v\/$1"><\/param><param name\="wmode" value\="transparent"><\/param><embed src="http\:\/\/www\.youtube\.com\/v\/$1" type\="application\/x-shockwave-flash" wmode\="transparent" width\="425" height\="350"><\/embed><\/object>/g;

  return($str);
}

ご自分の掲示板などを改造、機能追加する際に参考にされたい。

なお、YouTubeの仕様が変更になると、これらのスクリプトが動作しなくなる。おそらく下位互換をするとは思われるが、そのような可能性を持っていることを理解した上でご使用ください。