たけまる / 2007-04
2007-04-02 Mon
_ フィードから JSON への変換方法を統一して JavaScript でラクする [atom][perl]



以前のエントリ [2007-03-31] で XML::FeedPP を使ったのは,まえにJSONP 変換を作ったからです.
ところが,JSONP 変換サービスはあちこちにあります.たとえば,↓など
は老舗です.
XML を JSON に変換するサービス - ベータ版を公開 :: Drk7jp
では,どうして新たに JSONP 変換スクリプトを書いたかというと,変換
後の JSON のデータ構造を揃えたかったからです.
たとえば,RSS と Atom が混ざっていると,JavaScript でエントリを取
得するときにハッシュキーを使い分けなければなりません.また,XML か
ら JSON への変換方法が統一されていないと,ある要素が配列なのかハッ
シュなのかわからなかったりします.
というわけで,次のような特徴を持つ JSONP 変換スクリプトを作ってみ
ました.公開しますので自由に使ってください.
■ 特徴
- データ形式を指定したフィード (たとえば Atom 1.0) に変換してから JSON にする.フィードの種類がなんであっても,JavaScript で同じよ うに処理できる. - XML から JSON への変換は,GData 準拠とする.たとえば,要素数がひ とつであればハッシュ,複数であれば配列となる.また,テキスト要素 へのアクセスキーは '$t' である. - 複数フィードをひとつにまとめられる.時刻順のソートもできる. - ついでに,XML 間の変換もサポートした ([2007-03-31] に書いたよう に,Atom 0.3 <-> Atom 1.0 とか).
JSON への変換には,[2007-02-22] で紹介した Google::Data::JSON を使っ
ています.
まぁ,いまとなっては Yahoo PIPES でできることなんでしょうが,ビジ
ネス上の理由で使えなかったりすることもあるので,そういう方はこちら
を参考にしてください.下のほうでソースも公開しています.
■ ベースURI
http://teahut.sakura.ne.jp/t/feed.cgi
■ パラメータ
| パラメータ | 値 | 説明 |
| uri | フィードURI | 複数指定するとひとつのフィードにまとめます |
| alt | rdf, rss, atom03, atom10 | 変換後のデータ形式を指定します |
| jsonp | JavaScript 関数名 | この関数名で JSON を格納します |
| sort | feed, date | エントリをソートします |
jsonp を指定しなければ,単なる XML 変換を行います.
■ 例
このブログのフィード (RDF) を Atom に変換して,JSON に変換し,
myfunc という JavaScript 関数 に渡します.
feed.cgi?alt=atom10&jsonp=myfunc&uri=http://teahut.sakura.ne.jp/b/cl.rdf
■ ソースコード
自由に使っていただいてかまいません.なお,XML::FeedPP には
[2007-03-31] のパッチを当ててください.
《続きを読む》
2007-04-01 Sun
_ フィード変換モジュールはどれが速いかベンチ [xml][perl]



前のエントリ [2007-03-31] で,「XML::FeedPP は XML::Feed より速い」ということを書きました.参考までにベンチマークの結果を載せておきま
す.
RDF → Atom
| モジュール | 相対速度 |
| XML::Feed | 1.0 |
| XML::FeedPP | 8.7 |
Atom → RSS
| モジュール | 相対速度 |
| XML::Feed | 1.0 |
| XML::FeedPP | 2.5 |
予想では,Pure Perl で実装されている XML::FeedPP より,部分的に C
言語で実装されている XML::Feed のほうが速いと思っていたのですが,
逆でした (理由はしらない).
単純な XML 処理比較については,以下のエントリが参考になります.
Perl で XML の処理はどれが速いかベンチ : NDO::Weblog
たけまる / Perl - XML の処理はどれが速いかベンチ
最後に,ベンチマークに使ったスクリプトと,ベンチマーク結果を,載せ
ておきます.
《続きを読む》
