↑
ここのブログがとても参考になりました。
ありがとうございます!!
住所の一覧があるのですが、それを使って
一度に全ての住所の経度・緯度を取得したくて数日悩んでおりました。
PerlでXMLを操作することで、
経度緯度をgoogleのgeocoding(ジオコーディング)を使って
取得することが出来たのでメモ。
まずはソースから。
こんな感じです。
----------------
#!/user/local/bin/perl
use strict;
use Jcode;
use LWP::Simple;
use URI::Escape;
use XML::Simple;
use Data::Dumper;
my $query = 'ここに好きな住所を入れる';
$query = Jcode->new($query, 'utf8')->utf8;
$query = uri_escape($query);
my $url = "http://www.geocoding.jp/api/?v=1.1&q=$query";
my $document = LWP::Simple::get($url) or die "cannot get content from $url";
my $parser = XML::Simple->new;
my $data = $parser->XMLin($document);
print Dumper($data) . "\n";
------
いつものように、復習しながら見ていきたいと思います。
まず最初のuse ~がついているところ。
use strict;
use Jcode;
use LWP::Simple;
use URI::Escape;
use XML::Simple;
use Data::Dumper;
use strictは、プログラムする際にミスが少なくなるように使います。
コレを使うときは、my $xxみたいに「my」を付けないとエラーが返ってきます。
その下の、
use Jcode;
use LWP::Simple;
use URI::Escape;
use XML::Simple;
use Data::Dumper;
これはCPANのモジュールです。
まだCPANをインストールしていない方は以下のページをよく見て
インストールしてください!
my $query = 'ここに好きな住所を入れる';
$query = Jcode->new($query, 'utf8')->utf8;
$query = uri_escape($query);
これは、文字コードが違う場合は、
文字化けしてしまわないように指定します。
もし文字コードが同じなら、特に指定しなくても大丈夫です。
my $url = "http://www.geocoding.jp/api/?v=1.1&q=$query";
今回はグーグルのジオコーディングを使うので、
そのAPIのURLを指定します。
my $document = LWP::Simple::get($url) or die "cannot get content from $url";
指定した住所と、googleのURLを合体させて、
そこで得られた情報を
$document変数に代入します。
my $parser = XML::Simple->new;
my $data = $parser->XMLin($document);
$documentに代入できた情報をパースして、
$data変数に入れます。
print Dumper($data) . "\n";
最後に$dataを表示させます。
---
↑
こんな情報が得られるので、
経度はlatの「34.710834」
緯度はlngの「137.726126」
です!
0 件のコメント:
コメントを投稿