Perlとかcgiというキーワードも多いので(何故かtdiaryのreferrerには記録されてないけど)、初めはperlでcgiにしてcache<%= fn 'Cache::Cacheとかインストールしちゃった…' %>とかもばっちりにしようかと思ったけど、思いのほか時間が掛かったので、途中で諦めてDumperで逃げました。結局RESTの基本みたいなコードになってしまいましたが。
HTTPヘッダ出して、適当なテンプレートエンジン使って出力したらCGI対応も比較的すぐ出来ると思います。
LWWS->newの引数は、city_idとday(0:今日 , 1:明日 , 2:明後日)です。
例では、お天気Webサービス仕様にならって、久留米の明後日の情報が取得されます。utf-8で保存してください。
バックスラッシュが何故か?です。なんでだろ?
コード
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;
binmode(STDOUT, ":utf8");
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
my $lw = LWWS->new(113, 2);
my $data = $lw->get();
print Dumper($data);
print $data->{location}->{city} . "?n";
package LWWS;
sub new {
my ($class, $city, $day) = @_;
bless {
'city' => $city,
'day' => $day,
}, $class;
}
sub get {
my $self = shift;
my $parser = XML::Simple->new();
my $xml_doc = LWP::Simple::get($self->_mk_path);
return $parser->XMLin($xml_doc);
}
sub _mk_path {
my $self = shift;
my $url = "http://weather.livedoor.com/forecast/webservice/rest/v1";
$url .= "?city=" . $self->{city} . "&day=" . _exchg_day($self->{day});
}
sub _exchg_day {
my $idx = shift;
return qw(today tomorrow dayaftertomorrow)[$idx];
}