Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

Bookmarklet 開発実績

「YouTube Perfect Embed」YouTubeの貼り付け用コードをXHTML Validでサムネイル付きにするブックマークレット

投稿日:


今日は、YouTubeのダウンロード・・・ではなく、外部ブログなどに貼り付けるためのembedタグを綺麗なコードで出力するためのブックマークレットを紹介します。Perfectっていうのはちょっと大げさだと思いますが…、名前に負けないくらい重要な機能を含んでいます。
YouTube標準のEmbedとの違い

  • 出力されるHTMLコードがXHTML Validになります
  • Objectタグを認識しないブラウザではサムネイル付きのリンクが表示されます

ブックマークレットの設定は、下記リンクをブックマークに保存してください。
YouTube Perfect Embed

使い方

YouTubeの再生ページ(/watch?v=〜)で、上記ブックマークレットを実行します。
そうすると、下記のようなダイアログに、修正されたEmbedコードが出力されますので、そのままコピーしてご利用ください。
ダイアログ
通常はObjectタグが有効なので、普通に動画プレイヤーが表示されます。
プレイヤー表示
特徴的なのはObjectタグが無効な環境、例えばRSSリーダーで見た場合は、
サムネイル表示
このように、サムネイルとタイトル(YouTubeページへのリンク)を表示します。
続きで、細かい設定や技術的な説明を書いていきます。

XHTML Validにするために、変更されるHTMLコード

YouTubeのEmbedがValidで無いと言うのは、かなり前から言われているネタなんですが、下記エントリーなどを参考にさせていただきました。

変換ページや、ブックマークレット/GreaseMonkeyなどで解決する方法があるのですが、徐々に変化しているYouTubeのEmbedコード付いていっているものはないようだったので、現時点での最新コードをもとにValid化しています。
変更前(色が付いているところを削除)

<object width="480" height="385">
<param name="movie" value="http://www.youtube.com/v/LTOvmmzN5nM&hl=ja_JP&fs=1&hd=1"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/LTOvmmzN5nM&hl=ja_JP&fs=1&hd=1" type="application/x-shockwave-flash"
allowscriptaccess="always" allowfullscreen="true" width="480" height="385">
</embed>
</object>

変更後(色が付いているところを追加、変更)

<object data="http://www.youtube.com/v/LTOvmmzN5nM?hl=ja_JP&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash"
width="480" height="385">
<param name="movie" value="http://www.youtube.com/v/LTOvmmzN5nM?hl=ja_JP&amp;fs=1&amp;hd=1" />
<param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" />
<div class="yt_embed_block">
<a href="http://www.youtube.com/watch?v=LTOvmmzN5nM" target="_blank" class="yt_embed_thumb">
<img src="http://i.ytimg.com/vi/LTOvmmzN5nM/default.jpg" alt="BoA / Possibility duet with三浦大知" />
</a><br />
<a href="http://www.youtube.com/watch?v=LTOvmmzN5nM" target="_blank" class="yt_embed_title">
BoA / Possibility duet with三浦大知
</a>
</div>
</object>

HTMLコードの変換ポイント

  1. embed 要素の src 属性値を取得し、一つ目の「&」は「?」に、それ以降の「&」は「&amp;」に変換
  2. object 要素に data 属性を追加し、属性値に 1 の src 属性値を記述
  3. object 要素に type 属性を追加し、属性値に embed 要素の type 属性値(application/x-shockwave-flash)を記述
  4. name属性値が movie の param 要素の value属性に、1 の src 属性値を記述
  5. param 要素の終了タグを削除し、開始タグを空要素タグ(末尾に ” /” を付与)に変更
  6. embed 要素を削除して、div 要素で囲ったサムネイル+タイトルを表示

§

YouTube動画のサムネイルを表示する

YouTube動画には標準で3枚のサムネイル画像が用意されており、video_idが特定できればURLを特定できます。
via: YouTubeのサムネイル画像 (Yusukebe::Tech)
上記だと、ドメイン部分がちょっと古いので、今のバージョンでは、

http://in.ytimg.com/vi/LTOvmmzN5nM/default.jpg
http://in.ytimg.com/vi/LTOvmmzN5nM/1.jpg
http://in.ytimg.com/vi/LTOvmmzN5nM/2.jpg
http://in.ytimg.com/vi/LTOvmmzN5nM/3.jpg

こんな感じになります。
default.jpgは動画一覧などで表示されるサムネイルですが、1〜3のどれかの画像と同一のもので、アップロードしたユーザー自身が選択することができます。また、i1.ytimg.com や i2.ytimg.com などは、i.ytimg.com のキャッシュサーバーになっているようで、同じ画像が表示されます(負荷分散のため数字がバラけて表示されると思います)。ブックマークレットでは i.ytimg.com を使用するようにしています。
ブックマークレットでは、標準でdefault.jpgを使ってサムネイル表示します。

<div class="yt_embed_block">
<a href="http://www.youtube.com/watch?v=LTOvmmzN5nM" target="_blank" class="yt_embed_thumb">
<img src="http://i.ytimg.com/vi/LTOvmmzN5nM/default.jpg" alt="BoA / Possibility duet with三浦大知" />
</a><br />
<a href="http://www.youtube.com/watch?v=LTOvmmzN5nM" target="_blank" class="yt_embed_title">
BoA / Possibility duet with三浦大知
</a>
</div>

ただし、ブックマークレットに「thumb」パラメータを追加することで、出力されるサムネイルの数を制御できます。

  • thumb=0:サムネイルを表示しない
  • thumb=1:サムネイルを1つ表示する(デフォルト)
  • thumb=2:サムネイルを2つ表示する
  • thumb=3:サムネイルを3つ表示する

サムネイルを3つ表示したい場合のブックマークレットはこのようになります。

javascript:(function(){var d=document,s=d.createElement('script');s.charset='UTF-8';s.src='http://labs.creazy.net/bookmarklet/youtube_valid_thumb_embed.php?v=1&thumb=3';d.getElementsByTagName('head')[0].appendChild(s);})();

また、ここまで書いてきたのはあくまでOjbectタグが無効な環境での話ですが、Flashの動画プレイヤーでなく常にサムネイルで表示したいという場合は、「force_thumb」パラメータを使う事もできます。

  • force_thumb=1:常にサムネイル表示する
  • force_thumb=0:通常のObjectタグを出力する(デフォルト)

動画プレイヤーを表示せず、常にサムネイルを3つ表示したい場合のブックマークレットはこのようになります。

javascript:(function(){var d=document,s=d.createElement('script');s.charset='UTF-8';s.src='http://labs.creazy.net/bookmarklet/youtube_valid_thumb_embed.php?v=1&thumb=3&force_thumb=1';d.getElementsByTagName('head')[0].appendChild(s);})();

§

まとめ

Objectタグが無効な環境での動作確認として、livedoor ReaderとGoogle Readerでの動作確認は行いましたが、他の環境なので問題ありましたらお知らせ下さい。また、そもそもValidなコードじゃないとか、ツッコミありましたら歓迎いたします。
もし、このブックマークレットの評判が良ければYouTube HD Suiteへの組み込みなども検討しています。ご意見くださいませ。

-Bookmarklet, 開発実績

執筆者:

関連記事

no image

YouTube HD Suiteを更新しました(YouTubeの仕様変更対応2009/08/20)

【2010/08/02:追記】 YouTube HD Suite 公式ページができました。 YouTubeが大幅に仕様を変更したようで、YouTube HD Suiteが動かなくなってしまったので早速 …

FeedBurnerのトラッキング用パラメーターを取り除くUserScript

FeedBurnerのクリックトラッキング設定でGoogle Analytics用のパラメーターを追加する設定がありますが、ブックマークしたりTwitterに流したりする時には不便になることが多いです …

英→日、日→英を自動的に判断して翻訳してくれるYahoo!Pipesとブックマークレット

ブログのネタを探したり、仕事で調べものをしているとちょっと英日/日英の翻訳したいって事があります。そんな時にブックマークレットかなんかで簡単に変換できると便利です。 単語だけであれば、英辞郎の結果を表 …

「Ust DL」アップデート(ID1千万台対応+クロスブラウザ対応)

【2012/01/03:更新】 Ust DLの公式ページができました。今後の最新情報はこちらをご確認ください。 Ust DL 公式ページ Ustreamの録画(Recorded)をダウンロードできるU …

Twitter公式の「共有ブックマーク」をクリッピング用Bookmarkletに改造

・Twitterブログ: ツイートボタンのブックマークレット: どのページからでもリンクを共有 去る9月27日、Twitterから公式のブックマークレットが公開されました。ブックマークレットの設定は下 …

スポンサードリンク

スポンサードリンク