「マッシュアップ」という手法をご存じでしょうか。これは、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距離}」&改行。
  それは駅名。
#-----------------------------------------------------------------------