MovableType で YouTube ビデオを簡単に埋め込む:RakuRakuYouTube

Posted by
ぴろり
Posted at
2006/12/18 20:48
Trackbacks
関連記事 (2)
Comments
コメント (1)
Post Comment
コメントできます
Category
プラグイン カテゴリ

 YouTube で用意されたHTMLタグを記述することで、ページにビデオコンテンツを埋め込むことができます。RakuRakuYouTube を使うと、このHTMLタグを簡単に生成することができます。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

使い方

 MovableType のエントリ編集画面において、ビデオを埋め込みたい箇所に以下のように記述します。

<youtube v="kFgXEkzMq7A">

 v はビデオコンテンツの識別番号で、YouTube のパーマリンクURLに含まれる値と同じです。保存すると YouTube の HTML テンプレートと同じ内容が展開されます。

ソースコード

 以下のソースコードを RakuRakuYouTube.pl などの名前でMovableType の plugins ディレクトリの下に作成します。その後、管理画面のプラグイン一覧に RakuRakuYouTubeプラグインが表示されていることを確認してください。

最新版のダウンロードやバグレポートはRakuRakuYouTube の trac レポジトリでも行っています。

package MT::Plugin::OMV::RakuRakuYouTube;
use strict;
### RakuRakuYouTube - Easy way to embed the HTML tag for YouTube
###         Original Copyright (c) 2006 Piroli YUKARINOMIYA
###         Open MagicVox.net - http://www.magicvox.net/
###         @see http://www.magicvox.net/archive/2006/12182048/

### Set 1 where you would like to enable the plugin's funtion
use constant USE_IN_TEXT =>             1;
use constant USE_IN_TEXT_MORE =>        1;
use constant USE_IN_EXCERPT =>          0;
use constant USE_IN_KEYWORD =>          0;

########################################################################
use MT;
use MT::Entry;

use vars qw( $MYNAME $VERSION );
$MYNAME = 'RakuRakuYouTube';
$VERSION = '1.01';

use base qw( MT::Plugin );
my $plugin = new MT::Plugin ({
        name => $MYNAME,
        version => $VERSION,
        author_name => 'Piroli YUKARINOMIYA',
        author_link => "http://www.magicvox.net/?$MYNAME",
        doc_link => "http://www.magicvox.net/archive/2006/12182048/?$MYNAME",
        description => <<HTMLHEREDOC,
Give you an easy way to embed the HTML tags for <a href="http://www.youtube.com/">YouTube</a>
HTMLHEREDOC
});
MT->add_plugin ($plugin);

sub instance { $plugin }

### Defaut size of an embedded object
use constant DEFAULT_WIDTH =>           425;
use constant DEFAULT_HEIGHT =>          350;

### Register callback
MT::Entry->add_callback ('pre_save', 9, $plugin, &mt_you_tube);
sub mt_you_tube {
    my ($cb, $obj) = @_;

    $obj->text (_process_tag ($obj->text))
        if USE_IN_TEXT;
    $obj->text_more (_process_tag ($obj->text_more))
        if USE_IN_TEXT_MORE;
    $obj->excerpt (_process_tag ($obj->excerpt))
        if USE_IN_EXCERPT;
    $obj->keyword (_process_tag ($obj->keyword))
        if USE_IN_KEYWORD;
    1;
}

### Process around all <youtube> tags in contents
sub _process_tag {
    my ($buf) = @_;

    while ($buf =~ m!<$?s*youtube([^$>]*)$?>!si) {
        my $matched = $&;
        my $default_width = DEFAULT_WIDTH;
        my $default_height = DEFAULT_HEIGHT;
        my $v = undef;

        # Retrieving params
        my %param = {};
        foreach my $pair (split /s+/, $1) {
            my ($key, $value) = $pair =~ m!([^=]+)=["']?([^"']*)["']?!;#"'
            $param{$key} = $value if defined $key && $key ne '';
        }
        # 'v' param must be required
        next
            unless defined ($v = $param{v});
        # 'size' param
        if (defined $param{size}) {
            my ($percentage) = $param{size} =~ m!(d+)%?!;
            $default_width = int ($default_width * $percentage / 100.);
            $default_height = int ($default_height * $percentage / 100.);
        }
        # 'height' 'width' params are prior to 'size' param
        $default_width = int ($param{width}) if defined $param{width};
        $default_height = int ($param{height}) if defined $param{height};

        # Generate output from template
        my $template =<<HTMLHEREDOC;
<object width="$default_width" height="$default_height">
<param name="movie" value="http://www.youtube.com/v/$v"></param>
<param name="wmode" value="transparent"></param>
<embed src="http://www.youtube.com/v/$v" type="application/x-shockwave-flash" wmode="transparent" width="$default_width" height="$default_height"></embed>
</object>
HTMLHEREDOC
        $template =~ s![
]!!g;# chop
        $buf =~ s!Q$matchedE!$template!;
    }
    $buf;
}

1;
__END__
########################################################################
2006/12/18  1.00    初版公開

 典型的なコールバックプラグインです。エントリの保存イベントにフックして、本文、追記などのテキスト内容に対して置換を行なっています。同様の仕組みで Google Videoにも対応できると思います。

パラメータ

v [必須]
ビデオを識別するためのパラメータです。必須です。
size="(数値)%"
元のサイズに対する割合を指定できます。このパラメータは省略できます。
width="(数値)"
height="(数値)"
ビデオの縦横サイズ(ピクセル)を指定できます。 size による指定に優先します。このパラメータは省略できます。

お助けブックマークレット

 毎度毎度、<youtube> タグを入力するのさえも億劫な方のために お助けブックマークレットを用意してみました。

  1. こちらのブックマークレットを右クリックしてブックマークに登録します
  2. YouTube で埋め込みたいビデオを確認します
  3. 先ほど登録したブックマークレットを呼出します
  4. ダイアログが表示されます
  5. ダイアログに表示されたテキストをコピーします
  6. エントリ編集画面にペーストします

ブックマークレットを使うくらいなら、YouTubeのページに用意されたHTMLをそのまま持ってくる方が早いという話しも…

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  



関連記事/トラックバック (全 2 件中、最新 5 件まで表示しています)

weblog のスクリーンショット
タイトル
RakuRakuYoutubeプラグインを入れてみたよ
Trackbacked at
2007/10/29 19:52
from
weblog
概要
これで動画紹介ブログとしてもいけそうな気がしてきた。とりあえず僕の大好きなUne...

Open MagicVox.net のスクリーンショット
タイトル
MovableTypeでGoogleVideoを簡単に埋め込む
Trackbacked at
2006/12/20 23:17
from
Open MagicVox.net
概要
 Google Video で用意されたHTMLタグを記述することで, ページにビデオコンテンツを埋め込むことができます。 RakuRakuGoogleVide...

この記事にトラックバックを送るには?

寄せられたコメント (全 1 件中、最新 5 件まで表示しています)

Posted by
BobBob
at
2007/10/25 09:52
ID
4nQmDoWM
早速利用させていただいています。
ひとつ疑問点です。
再構築するたびに、動画が消えてしまいます。
なぜでしょうか?
http://www.rbell.co.jp/blog/bob/

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。