Showing posts with label XML. Show all posts
Showing posts with label XML. Show all posts

Mar 9, 2006

XML2JSONサービスを使ってFlickr Badgeを作る

XML を JSON に変換するサービス - ベータ版を公開 :: Drk7jpの意義がいまひとつ分からなかったので、ひとまずFlickr Badgeを作ってみた。

<div id="flickr-badge"></div>
<script type="text/javascript">
var flickr_method = 'flickr.people.getPublicPhotos';
var flickr_api_key = 'your flickr api key';
var flickr_user_id = '00000000@N00';
var flickr_per_page = 5;
var flickrUrl = 'http://www.flickr.com/services/rest/?method=' + flickr_method
    + '&api_key=' + flickr_api_key
    + '&user_id=' + flickr_user_id
    + '&per_page=' + flickr_per_page;
 
var flickrBadge = {};
flickrBadge.init = function() {
    var name = 'flickrBadge';
    var proxy = 'http://app.drk7.jp/xml2json/';
    var script = document.createElement('script');
    script.charset = 'utf-8';
    script.src = proxy + '&var=' + name + '&url=' + encodeURIComponent(flickrUrl);
    document.body.appendChild(script);
};
flickrBadge.onload = function(data) {
    var photos = data['photos']['photo'];
    var res = '';
    for (var idx in photos) {
 var photo = photos[idx];
 res += '<a href="http://www.flickr.com/photos/'+ flickr_user_id + '/'
     + idx + '/" title="' + photo["title"]
     + '"><img src="http://static.flickr.com/' + photo["server"]
     + '/' + idx + '_' + photo["secret"] + '_s.jpg" /></a>';
    }
    var ele = document.getElementById('flickr-badge');
    ele.innerHTML = res;
};
 
if (window.addEventListener) {
    window.addEventListener('load', flickrBadge.init, false);
} else if (window.attachEvent) {
    window.attachEvent('onload', flickrBadge.init);
} else {
    var old = window.onload;
    window.onload = (typeof old != 'function') ?
        flickrBadge.init : function(e) { old(e); return flickrBadge.init(e);};
}
</script>

うーん、動くね。この例の場合には、Flickr ServicesへのリクエストがXML 2 JSON serviceでキャッシュされるのはありがたい。だけどこのコードをユーザが書くのは少し無理があるような...。

追記: またもInternet Explorerでうまく動かないや。後で修正しよう。

→修正完了。ポイントは、script要素のappendをドキュメントのロード後まで遅延したということ。Mapper Pluginもそうなのだけど、IEやSleipnirでは必須っぽい。

Feb 17, 2002

Libxml2 + Libxslt

Xalan-JavaからLibxml2+Libxsltに移行してみた。Webページ生成速度が当社比50倍程度に向上した。

しかし、libiconvのUTF-8→Shift_JIS変換は相当に間抜けだったので、Solaris 8に組み込まれているiconvを使うための改造をしてみた。してみたのだが、どうも良くない。Character Entityを使って表現していた文字がlibxml2でUTF-8表現に変換されてしまうので、XSLT処理後、shift_jisやeuc-jpで出力しようとした場合に「文字化け」してしまう。これはlibxml2に由来する問題でiconvに手を入れても解決しない。

いっそUTF-8に完全に移行してしまうならlibxml2+libxsltでもよいのだが。にんとも。

Sep 1, 2000

文献リスト用DTD

文献リスト用に適当なDTDを書いてみる。難しいなあ。エディタを使った入力用には項目の順序や個数をlooseにしたDTDの方が便利。一方でプログラミングインターフェースまで考慮するとパーズが速くてツリーのトラバースも容易になるようにstrictなDTDの方が都合がいい。

要するに、loose DTD、strict DTDの両方を定義しておいて、XSLTを使ってエディタなどで入力されたloose DTDに従うXML文書からstrict DTDに従うXML文書へコンバートすればいいわけだが、面倒だ。