Asamashi09 #2

Asamashi09のテンプレート・システムにはjTemplatesを使うことにした。あんまり書きやすくない気もする。でも探すの面倒だった(作るのはもっと面倒)。とりあえずリモートのテンプレート・ファイルを指定して出力できるようにはなった。

テンプレートのロードはコールバック関数名固定のJSONPでやってみようとしたが、getJSON()はコールバック関数名を自動生成してリクエストするので、固定だと無理(多分)。getScript()ではロードすることだけならなんとかなったのだけど、テンプレートURLが404の場合とかうまく対応できなかった。Ajax Eventsのerrorが発動しなかったよ……。

結局、テンプレート・ファイルはJSONにしてYahoo! Query LanguageをJSONPプロクシみたいに使うことにした。最初はPipes使ったのだけど、Pipesだと取得したデータにHTMLっぽいコードが含まれる場合、良きに計らってくれてしまうので、

<a href="{$T.DetailPageURL}">

などという部分が、

<a href="http://example.com/{$T.DetailPageURL}" rel="nofollow">

とか存在しない絶対URLになったりする。場合によってはhrefが削除されたりも(ダメそうだったのであんまり調べてない)。データを拾うのは任せたいけど、データの加工はして欲しくない場合はYQLのが向いてるっぽい。YQLはURL以外何も指定しなければ、ほぼそのまんまの形でデータを返してくれるので。一部欠落したり、可逆ではなくなってしまうことに注意は必要だけど。

テンプレートに渡されるデータはAmazon Web ServicesItemLookupした時に返ってくるXMLのItem要素以下(ResponseGroupSmall,Images)なので、jTemplateの作法に従ったテンプレート内で、

{$T.ItemAttributes.Title}

と書くと商品名が出力されることになる。デフォルトのテンプレート・ファイルを見ればわかるはず(読みづらいけど)。

もっと書きやすいテンプレートにしたい。