API::Livedoor Mashup Flickr

寝てばっかりなので、
友達に言われてた、APIの連携っぽいことをやってみた。


友達が要求していたこと

  1. 降水確率を調べる
  2. 降水確率が同じ地域を調べる
  3. 同じ地域の画像を表示する

自分がしたこと

  1. 天気を調べる
  2. 天気が同じ地域を調べる
  3. 同じ地域の画像のアドレスを表示する


微妙に違うけど、気にしない...


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 - 徹夜族