#!/usr/local/bin/perl use CGI; use Jcode; use LWP::UserAgent; use XML::Simple; use Digest::MD5 qw(md5_hex); use Data::Dumper; my $cache_dir = "../cache/"; my $cache_lifetime = 600; # 10min my $q = new CGI; # param my $var = $q->param('var'); $var = "xml" if !defined $var or $var!~/^[a-zA-Z_]+$/; my $url = $q->param('url'); &error("url is not set") if !defined $url or $url!~m!^http://!; my $json; my $cache = $cache_dir.md5_hex($url); if(-f $cache && (stat($cache))[9] + $cache_lifetime > time){ open(CACHE, $cache); $json = join("", ); close(CACHE); } else{ # request my $ua = LWP::UserAgent->new; $ua->agent("XML2JSON/0.1 "); my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); &error("cannot get url") if !$res->is_success; &error("cotnent is not xml (".$res->headers->header("Content-Type").")") if $res->headers->header("Content-Type")!~m!/xml!; # XML Dump $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; my $xmlobj = XMLin($res->content); $Data::Dumper::Indent = 1; $Data::Dumper::Useqq = "utf8"; $json = Dumper($xmlobj); # Write cache my $cache = $cache_dir.md5_hex($url); if(open(CACHE, ">$cache")){ print CACHE $json; close(CACHE); } } $json=~s/^\$VAR1/$var.data/; $json=~s/([^\\])" => ("|{|\[)/$1" : $2/g; # output print $q->header(-type => "text/plain", -charset => "utf-8"); print "if (typeof($var) == 'undefined') $var = {};\n"; print $json."\n"; print "if (typeof($var.onload) == 'function') $var.onload($var.data);"; sub error{ print $q->header(-type => "text/plain", -charset => "utf-8"); print "var $var = \"$_[0]\";"; exit; }