前回のエントリーでData APIを使ってGoogle Analyticsと連携したPVランキングを取得するスクリプトを作成しました。
ここまではData APIの実装をこねくり回せばなんとかなったのですが、1位から30位までのランキング一覧を作成するにあたって、MTMLで作成しているアセット画像のサムネールのURLを取得する必要が出てきました。
アセットのサムネールには生成する時に独自の命名規則があるので、それをガリっと正規表現で書いてやる事もできるのですが(最初はこの方法で実装していた)、そのサムネールが存在しなかった時に画像が表示されず「画像が無い場合はデフォルト画像を出してね」的なjQueryを書いてやるなどしないと都合が悪く、ちょっとなんだかなと思っていました。(もちろん、スクリプトの中でUAを作りその画像にアクセスできるかどうか確認する方法もあります)
で、最終的に考えついたのが「だったらサムネールを自動生成するDataAPI拡張プラグイン作っちゃえばいいじゃん」というもの。早速壱さんのブログを検索しData API拡張プラグインをゲットし内部構造を勉強。30分ちょっとで書けました。
まず基本はアセットのIDをData APIに渡すとその情報を取得出来るようにするプラグインを書きました。
アクセスポイント)http://www.example.com/cgi-bin/mt/mt-data-api.cgi/v1/site/3/assets/53/info
最後のinfo付けようかどうか迷ったんですが、名前空間的に他の方のプラグインとぶつかりそうだったのでこんなURLにしました。これ最後まで悩んだw
で、このURLにアセットのID(ここでは53)を渡すと、アセットの情報が取得出来るようにしました。
この後、thumb_width, thumb_height, thumb_square, thumb_scaleなどをGETで渡して情報としてJSONに格納出来るように拡張。このときはまったのが、$asset->{thumb_width}に値をセットして返って来るかと思いきや返ってこず。どうも基本はカラムやカスタムフィールドを返すようになっているようで。ここは深くは追わなかったのですが、独自の値を返す時にオブジェクトのカラムと同様に扱える方法があったらどなたか教えて下さい。resourcesを拡張してもできませんでした。
で深く追っても仕方が無い(?)ので、戻り値としてアセットの情報をitemに、サムネールの情報をthumb_infoに格納して返すように変更。
どうしようかとも思ったんですが、ある意味汎用的である必要はないので今回はこのような実装にしました。
ここまで出来たら後はサムネールの情報を返すまで。サムネールの情報を返すには「mt:Asset」タグをMTMLで使うのが簡単。という訳でテンプレートでmt:AssetThumbnailURLを返すようにして、プラグインからテンプレートのbuild_pageを呼んでやります。
まぁ、こんな感じ。
<mt:var name="asset_id" setvar="asset_id"><mt:var name="thumb_width" setvar="width"><mt:var name="thumb_height" setvar="height"><mt:var name="thumb_square" setvar="square"><mt:var name="thumb_scale" setvar="scale"><mt:Asset id="$asset_id"><mt:if name="thumb_scale"><mt:AssetThumbnailURL scale="$scale" /><mt:else><mt:AssetThumbnailURL width="$width" height="$height" square="$square" /></mt:if></mt:Asset>
これで戻ってくる値には改行が含まれるので、chompしてやってthumb_urlとして返してやります。
あとは、この値を$asset_content->{thumb_info}->{thumb_url}のように呼んでやれば、既にサムネールが存在している場合はそのURLを。存在しない場合はサムネールを作成した上でそのURLを返してくれるようになります。うーん、Data APIさまさまなこの実装。
最後に、権限チェックを実装して終わり。これで人気記事ランキングの一覧作成スクリプトが完成しました。
もっと手こずるかと思っていたData APIの拡張プラグイン。参考に指して頂いた壱さんのコードがすっきりとしていた事もあり、スムーズに実装が出来ました。さて、もっと仕事しないとw
Movable Type 6 本格活用ガイドブック (Web Designing BOOKS) | |
藤本 壱 柳谷 真志 奥脇 知宏 シックス・アパート株式会社 マイナビ 2013-11-30 売り上げランキング : 80852 Amazonで詳しく見る by G-Tools |