JSONで遊びたい
JSONをいじってみようと思っていたのだが、うまい具合にデータを出してくれているところが少ない。(del.icio.usくらい?)そんなわけで、RSSをJSONに加工して、それで遊んでみることにした。
#!/usr/bin/perl use strict; use CGI::Carp qw(fatalsToBrowser); use LWP::Simple; use XML::RSS; use JSON; binmode STDOUT,':utf8'; my $uri; if( -t ){ $uri = shift @ARGV; } else{ ( $uri = $ENV{'PATH_INFO'} ) =~ s|^/||; print "Content-Type: text/javascript; charset=utf-8?n?n"; } my $rss = XML::RSS->new; $rss->parse( get( $uri ) ); my $struct = { title => $rss->{channel}->{title}, link => $rss->{channel}->{link}, author => { name => $rss->{channel}->{dc}->{creater} }, entries => [] }; @{$struct->{entries}} = map { $_ = { title => $_->{title}, link => $_->{link}, date => $_->{dc}->{date} } } @{$rss->{items}}; print "jsonfeed = ".JSON->new->objToJson( $struct ); exit;
http://aql.osx.cc/rss2json/http://d.hatena.ne.jp/aql/rss
http://aql.osx.cc/rss2json/以下に変換したいRSSのURIを指定してやれば良い。いろいろ手抜きだが、とりあえず実験ってことなので。出力はJSON Feedを真似たが諸事情により正確に一致していない。
まぁ、ともかく。これで一応出るわけだ。ただ、ここまで来てはたと悩んでいる。結局JSON Feedっていうのは、XMLで既に出来ることをやっているわけで、それ以上の何かが出来るわけでは無さそうなのだ。
確かに、XMLHttpRequestなんかを使わずに、さっくり他のフィードをウェブページ上に埋め込めたりする。
<div id="container"><h2>JSON Feed</h2></div> <script type="text/javascript" src="http://aql.osx.cc/rss2json/http://d.hatena.ne.jp/aql/rss" ></script> <script type="text/javascript"><!-- var ul = document.createElement('ul'); for ( var i = 0, entry; entry = jsonfeed.entries[i]; i++ ){ var li = document.createElement('li'); var a = document.createElement('a'); a.setAttribute('href', entry.link); a.appendChild(document.createTextNode(entry.title)); li.appendChild(a); ul.appendChild(li); } document.getElementById('container').appendChild(ul); //--></script>
確かにラクチン。だが、XMLだとDOMをいじくり回したりと面倒は面倒だが、出来ないことでも無いわけで。Ajaxで使うのも同じこと。そうすると、ラクチン以外のJSONの利点って何だろう、とか考えてしまう。
JSONだと関数をそっくり渡せるので、その辺をうまく使ったりするのかな…うーん?
あ、でもラクチンはとても大事だと思う。