26 件 見つかりました。
#!/usr/bin/env perl use strict; use warnings; use LWP::Simple; use URI::Escape; use utf8; use open ':utf8'; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; my $appid = "THISISAPEN"; while (<>) { chomp; my @r = word_to_latlong({key => $_, appid => $appid}); print join("\t", @r, $_)."\n"; } sub word_to_latlong { my ($args_ref) = @_; my $key = $args_ref->{key}; my $ek = URI::Escape::uri_escape_utf8($key); my $murl = "http://contents.search.olp.yahooapis.jp/OpenLocalPlatform/V1/contentsGeoCoder" ."?appid=$args_ref->{appid}&query=$ek&category=landmark,address"; my $r = get($murl); my ($lat, $long, $name) = ("", "", ""); while ($r =~ m{<Feature>(.+?)</Feature>}gsm) { my $i = $1; my ($genre) = $i =~ m{<Genre>(.+?)</Genre>}; my ($name_tmp) = $i =~ m{<Name>(.+?)</Name>}; if ($genre == 80 # 住所の一部 or $key =~ /\Q$name_tmp\E/ or $name_tmp =~ /\Q$key\E/ ) { $name = $name_tmp; ($lat, $long) = $i =~ m{<Coordinates>(.+?),(.+?)</Coordinates>}; last; } } return ($lat, $long, $name); }
% cat word2latlong-test.txt 東京都渋谷区 東京都港区 神奈川県横浜市中区 神奈川県足柄上郡山北町 こんにちは 東京タワー 東京ミッドタウン タワー ミッドタウン % ./word2latlong.pl word2latlong-test.txt 139.69822020 35.66403830 東京都渋谷区 東京都渋谷区 139.75160740 35.65807070 東京都港区 東京都港区 139.64218630 35.44470240 神奈川県横浜市中区 神奈川県横浜市中区 139.08383880 35.36060800 神奈川県足柄上郡山北町 神奈川県足柄上郡山北町 こんにちは 139.7454106 35.6586309 東京タワー 東京タワー 139.7310060 35.6657215 東京ミッドタウン 東京ミッドタウン 139.7454106 35.6586309 東京タワー タワー 139.7310060 35.6657215 東京ミッドタウン ミッドタウン
http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(YOUR_APP_ID)&pin=35.6657215,139.7310060
#!/usr/bin/env perl use strict; use warnings; use LWP::Simple; use URI::Escape; my $appid = "(YOUR APP ID)"; while (<>) { chomp; my @r = address_to_latlong({key => $_, appid => $appid}); print join("\t", @r, $_)."\n"; } sub address_to_latlong { my ($args_ref) = @_; my $ek = URI::Escape::uri_escape($args_ref->{key}); my $murl = "http://geo.search.olp.yahooapis.jp/OpenLocalPlatform/V1/geoCoder" ."?appid=$args_ref->{appid}&query=$ek&datum=tky"; my $r = get($murl); my ($lat, $long) = $r =~ m{<Coordinates>(.+?),(.+?)</Coordinates>}; return ($lat||"", $long||""); }
(「住所の一部」でないクエリは、結果が返って来ません)% cat address2latlong-test.txt 東京都渋谷区 東京都港区 神奈川県横浜市中区 神奈川県足柄上郡山北町 こんにちは 東京タワー 東京ミッドタウン % ./address2latlong.pl address2latlong-test.txt 139.69822020 35.66403830 東京都渋谷区 139.75160740 35.65807070 東京都港区 139.64218630 35.44470240 神奈川県横浜市中区 139.08383880 35.36060800 神奈川県足柄上郡山北町 こんにちは 東京タワー 東京ミッドタウン
パラメータの results=1 がポイントです(ref. [2009-02-26-1])。#!/usr/bin/perl -T use strict; use warnings; use LWP::Simple; use URI::Escape; use CGI; use Encode; use utf8; binmode STDOUT, ":utf8"; my $q = new CGI; my $query = $q->param('q') || ""; my $callback = $q->param('cb') || "f"; my $ueq = URI::Escape::uri_escape($query); my $url = "http://search.yahooapis.jp/WebSearchService/V1/webSearch" ."?appid=THISISAPEN&query=$ueq&results=1"; my $res = get($url); my $num = ($res =~ /totalResultsAvailable="(\d+)"/) ? $1 : 0; print "Content-Type: text/javascript; charset=UTF-8\n\n"; my $qe = CGI::escapeHTML(decode("utf8", $query)); print qq($callback({"q":"$qe", "n":$num})\n);