「マッシュアップ」という手法をご存じでしょうか。これは、Web上にある各種情報を利用して、何かしらの新しい付加価値を持つサービスを提供することを指しています。今回は、Googleが提供する地図情報サービス「Google MAPS API」と、最寄り駅データサービスを提供する「HeartRails Express」のAPIを利用して、住所や地名から最寄り駅までの距離を調べるツールを作ってみようと思います。行きたい場所の最寄り駅を手軽に調べるのに便利なツールになりました。
プログラムの使い方
以下のプログラムをなでしこエディタに貼り付けて、実行ボタンをクリックします。プログラムを実行すると、「最寄り駅を調べたい住所(地名)は?」と尋ねられるので、住所あるいは、地名を入力します。しばらく待つと最寄り駅と駅までの距離を表示します。
GoogleマップのAPIを利用していますので、「東京タワー」とか「清水寺」など名所旧跡から最寄り駅も調べることができます。
#-----------------------------------------------------------------------
# 最寄り駅検索ツール
# 利用API (Google MAPS API / HeartRails Express 最寄り駅データサービス)
#-----------------------------------------------------------------------
# ※下記APIキーはGoogle MAPS APIのページで取得して書き換えてください
APIキー="ABQIAAAA0WSUKVnriG9Hu-DbW3_8uxQOgPjiRvFbmc0VazTjqwnvIePYzRQzezR3yzYXk4-uMqjvFi_Qj7brUA"
#-----------------------------------------------------------------------
# メインプログラム
「最寄り駅を調べたい住所(地名)は?」と尋ねて住所に代入。
もし、住所が空ならば、終わる。
住所の最寄り駅調査して結果に代入。
「『{住所}』の最寄り駅{改行}{改行}{結果}」と表示。
#-----------------------------------------------------------------------
●最寄り駅調査(住所の)
座標=住所の緯度経度取得
もし、座標=「」ならば
それは「住所不明」。戻る。
結果=座標の座標最寄り駅取得
もし、結果=「」ならば、結果=「なし」
それは結果●緯度経度取得(住所の)
API_URL="http://maps.google.com/maps/geo"&
"?key={APIキー}&output=xml&ie=UTF8&q="
U住所=住所をUTF8N変換
ENC=U住所をURLエンコード
API_URL=API_URL&ENC
5回
エラー監視
XML=API_URLからHTTPデータ取得してSJIS変換
抜ける
エラーならば
母艦=「再試行:{回数}:{住所}」
3秒待つ
ここまで
結果=XMLから「Status/code」の階層タグ切り出してタグ削除。
もし、結果≠「200」ならば
「失敗:{住所}」と言う。
それは「」。戻る。
PM=XMLから「Placemark」のタグ切り出し。PM=PM\0。
EAST=空白除去(PMの「LatLonBox」から「east」をタグ属性取得)。
NORTH=空白除去(PMの「LatLonBox」から「north」をタグ属性取得)。
それは「{EAST},{NORTH}」●座標最寄り駅取得(座標の)
座標を「,」で区切って「EAST,NORTH」へ変数分配。
#座標から最寄り駅を調べる
API_BASE="http://express.heartrails.com/api/xml"&
"?method=getStations&"
API_URL="{API_BASE}x={EAST}&y={NORTH}"
5回
エラー監視
XML=API_URLからHTTPデータ取得してSJIS変換
抜ける
エラーならば
母艦=「再試行(最寄り駅):{回数}」
ここまで
#XMLを解析
駅名=「」
距離一覧=XMLから「distance」のタグ切り出してタグ削除
駅名一覧=XMLから「name」のタグ切り出してタグ削除
線名一覧=XMLから「line」のタグ切り出してタグ削除
もし、距離一覧=「」ならば、戻る。
#解析結果を文字列に変換
Iを0から(距離一覧の要素数-1)まで繰り返す
F駅名=駅名一覧¥I
F線名=線名一覧¥I
F距離=距離一覧¥I
駅名=駅名&「{F線名},{F駅名},{F距離}」&改行。
それは駅名。
#-----------------------------------------------------------------------