API::Livedoor Mashup Flickr
寝てばっかりなので、
友達に言われてた、APIの連携っぽいことをやってみた。
友達が要求していたこと
- 降水確率を調べる
- 降水確率が同じ地域を調べる
- 同じ地域の画像を表示する
自分がしたこと
- 天気を調べる
- 天気が同じ地域を調べる
- 同じ地域の画像のアドレスを表示する
微妙に違うけど、気にしない...
source:
#!/usr/bin/env perl use strict; use LWP::Simple; use XML::Simple; use Data::Dumper; # Livedoor API my $liveurl = "http://weather.livedoor.com/forecast/webservice/rest/v1?"; my $day = "today"; # Flickr API my $apikey = "your_apikey"; my $flickrurl = "http://www.flickr.com/services/rest/"; my $method = "flickr.photos.search"; sub main{ # 103 = 高松 my $weather = &getWeather(103); print $weather."\n"; my $region = &searchSameWeather($weather); print $region."\n"; my ($imgurl,$title) = &getImageUrl($region); print $title."\n"; print $imgurl."\n"; } # Livedoor API # in: id, ret: weather sub getWeather{ my $city = shift @_; my $url = $liveurl."city=".$city."&day=".$day; my $xml = XMLin(get($url)); return $xml->{telop} || ""; } # Livedoor API # in: weather, ret: region name sub searchSameWeather{ my $weather = shift @_; # 142 regions for(my $i=1;$i<=142;$i++){ my $url = $liveurl."city=".$i."&day=".$day; my $xml = XMLin(get($url)); #print Dumper($xml); if($weather eq $xml->{telop}){ return $xml->{location}{area}; } } return; } # Flickr API # in: keyword, ret: imgurl, imgtitle sub getImageUrl{ my $keyword = shift @_; my $url = $flickrurl."?method=".$method. "&format=rest&api_key=".$apikey."&text=".$keyword; my $xml = XMLin(get($url)); # first photo my $key = (keys %{$xml->{photos}{photo}})[0]; my %photo = %{$xml->{photos}{photo}{$key}}; my $title = $photo{title}; # image url my $imgurl = "http://farm".$photo{farm}.".static.flickr.com/". $photo{server}."/".$key."_".$photo{secret}.".jpg"; return ($imgurl,$title); } &main; 1;
output:
晴時々曇 北海道 白鳥 http://farm3.static.flickr.com/2567/4004360527_fe5422706e.jpg
ref
お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報
API::Flickr - 徹夜族