ActionStreamのlinkフィールドからサムネイルをでっちあげる。

久しぶりの更新。テンプレート系のコネタです。
ActionStreamsのいくつかのプラグインでは、別途ThumbnailのURLを取得して専用のフィールドに保存してくれますが、そうではない場合もあります。
特にソーシャルブックマーク等のサービスの場合には、そもそもコンテンツとそのサムネイルの関係が事前に分からないため、何もしてくれません。
でもまあ、自分の行動範囲で、URLからサムネイル画像のURLが推測できる範囲なら何とかなるんじゃないか。
そこで、MTMLで無理矢理やっつけてみました。

まず、以下のようなテンプレートを、モジュールテンプレートとして作成します。
前半のmt:setHashVarタグのなかに適当に正規表現をつっこむと対応サイトが増やせます。とりあえずyoutubeとniconico、amazonだけ作りました。検証してないので、取りこぼしや誤作動があるかもしれません。

<mt:setHashVar urls>
<mt:setvar youtube  value="http\://[^\.\/]+\.youtube\.(jp|com)/watch\?v=([0-9a-zA-Z\-]{11})","http://img.youtube.com/vi/$2/default.jpg" />
<mt:setvar niconico value="^http\://www\.nicovideo\.jp/watch/[sn]m([0-9]{1,9})","http://tn-skr2.smilevideo.jp/smile?i=$1" />
<mt:setvar amazon   value="^http\://www\.amazon\.(?:co\.jp|com)/.*(?:ASIN|product-description|product|dp)/([^/]+)(?:/.*)*","http://images.amazon.com/images/P/$1.09._THUMBZZZ_.jpg" />
</mt:setHashVar>
<mt:loop urls>
<mt:setVarBlock check><mt:getVar var="__value__[0]"></mt:setVarBlock>
<mt:setVarBlock pattern>/<mt:getVar var="__value__[0]">/</mt:setVarBlock>
<mt:setVarBlock replace><mt:getVar var="__value__[1]"></mt:setVarBlock>
<mt:if url like="$check"><mt:var url regex_replace="$pattern","$replace"></mt:if>
</mt:loop>

上のを保存したら(仮に「URL2Image」という名前で保存したとします)、ActionStreamsの表示側で、次のようにインクルードします。
変換対象となるURLを、モディファイアのように渡してください。

<mt:if tag="StreamActionThumbnailURL">
    <mt:StreamActionThumbnailURL />
<mt:else>
    <mt:setvarblock name="link"><mt:StreamActionURL /></mt:setvarblock>
    <mt:setvarblock name="thumb"><mt:include module="URL2Image" url="$link" trim="1" /></mt:setvarblock>
    <mt:if thumb><img src="<mt:var name="thumb" />" /></mt:if>
</mt:if>


このブログのメインページに表示しているライフログでも、Youtubeのビデオのブックマークなんかで画像が表示されるようにしてあるので、参考にしてみてください。

今回は、画像のみに絞ったカスタマイズにしましたが、やり方によってはembedタグにしたりアフィリエイトリンクにしたり色々出来ると思います。もちろんActionStreams以外の色々にも利用できると思います。お好みで工夫してみてください。

変換後のURLの前後に半角スペースが混じるとの指摘をいただきましたので、呼び出し側でtrimモディファイアを追加する形で対応しました。
<mt:include module="URL2Image" url="$link" trim="1" />
また、hvc-001さんにご指摘いただき、ニコニコ動画用の正規表現を一部修正しました。トラックバックありがとうございました!