学校の名前とだいたいの場所から、Yahoo Japan Map を使って学校の緯度経度を取得するスクリプト

学校の名前(たとえば「第十中学校」)とだいたいの場所(たとえば「東京都足立区西新井栄町2」) から、Yahoo Japan Map を使って学校の緯度経度を取得するスクリプトを作ってみた。だいたいの場所はだいたい。適当にしきい値を決めたから自分でもよくわかってなかったりする。知りたい人はソース見て、CodeRepos に置いたから。

解決する問題

Yahoo Japan Map で学校の名前で検索するとランドマークとして登録された正しい緯度軽度の学校情報が検索できる。でも、全国には同名の学校が複数存在する場合もある。たとえば、「第十中学校」の場合は昨日の時点では 10 校引っかかる。目的の学校を探さなくちゃいけない。

一方で、学校のだいたいの住所がわかっている場合、その住所で検索すると、近くの住所の位置や、近くのランドマークの位置が検索結果に出てくる。たとえば、「東京都足立区西新井栄町2」で検索すると、まあ次のような結果*1

目的の学校の近くにきたら、学校の位置を中心にもってきて、「Yahoo Japan 地図」でその場所の緯度経度を表示するブックマークレット - 昨日知ったことブックマークレットを使えば緯度経度が得られる。でも、ちょい面倒だよね。

なので

(B) で検索した「だいたいの場所」に「そこそこ近い」学校を (A) の検索結果からピックアップして答えとする、というのが今回作ってみたスクリプト

実行例

「いかにもたくさんありそうな名前の学校名」でざくっと検索してみて、その中から適当に選んだ学校の近くの住所をとってきて 3 件試してみた。

第十中学校,東京都足立区西新井栄町2
本町小学校,東京都西東京市保谷町1丁目
北中学校,北海道網走郡美幌町字鳥里3丁目

こんな感じ。

[takeyuki@sunya ~]$ time perl get_scholl_location_with_YJM.pl
<a href="http://search.map.yahoo.co.jp/search?p=lat=35.77413889&lon=139.79711111" target="yjm">区立第十中学校 </a>, 東京都足立区 ,35.77413889,139.79711111
<a href="http://search.map.yahoo.co.jp/search?p=lat=35.7295&lon=139.55875" target="yjm">市立本町小学校 </a>, 東京都西東京市 ,35.7295,139.55875
<a href="http://search.map.yahoo.co.jp/search?p=lat=43.83477806&lon=144.10472194" target="yjm">町立北中学校 </a>, 北海道美幌町(網走郡) ,43.83477806,144.10472194

real    0m3.537s
user    0m1.250s
sys     0m0.014s
[takeyuki@sunya ~]$

3 件で 4 秒弱。ま、起動時のオーバヘッドもあるからよくわからないけど、1 件あたり 1 秒以内で取得できそうではある。

制限

とってもよくある名前の学校、具体的には 21 校以上ある名前で検索した場合、Yahoo Japan Map では最初の 20 件を出して、それ以上はページ送りしなきゃいけない。実は「北中学校」もそういう名前の一つなんだけど、今回はたまたま先頭のページに出てくる学校をターゲットにしたので拾えてるだけ。WWW::Mechanize とか使わなきゃだね。練習材料としてはちょうどいいのかも。

*1:いつまで同じ結果が出るかわかんないけどね