図書館の位置情報を取得する

Google Map APIさんの力を借りて図書館の位置情報をまとめてゲットする。使い捨て。

[lib.pl,UTF8]
#!/usr/bin/perl
use strict;
use warnings;

use HTTP::Request::Common;
use LWP::UserAgent;
use JSON;
use Readonly;

Readonly my $APIKEY =>
  'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
Readonly my @NAMES => (
  '渋谷区立中央図書館', '渋谷区立西原図書館', '渋谷区立渋谷図書館', '渋谷区立富ヶ谷図書館',
  '渋谷区立笹塚図書館', '渋谷区立本町図書館', '渋谷区立臨川みんなの図書館');

foreach my $name(@NAMES) {
  my $obj = JSON->new->jsonToObj(geocoding($name));
  print 200 == $obj->{Status}->{code}
    ? "$obj->{Placemark}[0]->{address},$obj->{Placemark}[0]->{Point}->{coordinates}[0],$obj->{Placemark}[0]->{Point}->{coordinates}[1]\n"
    : "$name,-,-\n";
  sleep 1;
}

sub geocoding {
  my ($name) = @_;

  my $ua = LWP::UserAgent->new;
  $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)');
  my $url = sprintf('http://maps.google.com/maps/geo?q=%s&output=json&key=%s', $name, $APIKEY);
  my $resp = $ua->get($url);

  $resp->is_success or die "failed to get $url";

  return $resp->content;
}
T:\work>lib.pl | nkf -s
(日本)渋谷区立中央図書館,139.705664,35.672351
(日本)渋谷区立西原図書館,139.677675,35.674967
(日本)渋谷区立渋谷図書館,139.709764,35.656595
(日本)渋谷区立富ヶ谷図書館,139.687124,35.668501
(日本)渋谷区立笹塚図書館,139.667192,35.67225
(日本)渋谷区立本町図書館,139.681658,35.680735
渋谷区立臨川みんなの図書館,-,-

T:\work>