駅周辺のスーパーとコンビニを検索して距離と徒歩移動時間を出力する (Ruby + 駅すぱあとWebサービス + YOLP)

## サンプルコード

```ruby
require 'json'
require 'uri'
require 'open-uri'

# 駅すぱあとWebサービス
# @see http://docs.ekispert.com/
class Ekispert

  # Ekispertオブジェクトを生成する
  # @param access_key [String] アクセスキー
  # @return [Ekispert]
  def initialize(access_key)
    @access_key = access_key
  end

  # 駅名称から駅情報を検索する
  # @see http://docs.ekispert.com/v1/api/station.html
  # @param name [String] 駅名称
  # @return [String] 駅情報
  def station(name)
    base_url = 'https://api.ekispert.jp/v1/json/station'
    params = {
      'key' => @access_key,
      'name' => name,
      'gcs' => 'wgs84',
    }
    url = base_url + '?' + URI.encode_www_form(params)
    json = open(url).read
    json2stations(json)
  end

  private

  # 駅情報検索レスポンスJSON文字列を駅データの配列にする
  # @param json [String] JSON文字列
  # @return [Array]
  def json2stations(json)
    data = JSON.parse(json)
    # 駅が複数の場合は配列、駅が1つの場合はHashで来る
    point = data['ResultSet']['Point']
    if !point.kind_of?(Array)
      point = [point] # 駅が1つの場合は配列化
    end
    stations = []
    point.each do |p|
      stations << {
        :name => p['Station']['Name'],
        :lat  => p['GeoPoint']['lati_d'],
        :lon  => p['GeoPoint']['longi_d'],
      }
    end
    stations
  end

end

# YOLP (Yahoo! Open Local Platform)
# @see https://developer.yahoo.co.jp/webapi/map/
class YOLP

  # YOLPオブジェクトを生成する
  # @param appid [String] アプリケーションID
  # @return [YOLP]
  def initialize(appid)
    @appid = appid
  end

  # 拠点情報(POI)を検索する
  # @see https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/localsearch.html
  # @param lat [String] 緯度
  # @param lon [String] 経度
  # @param dist [String] 検索距離(km)
  # @return [String] 拠点情報(POI)
  def localsearch(lat, lon, dist)
    base_url = 'https://map.yahooapis.jp/search/local/V1/localSearch'
    params = {
      'appid'  => @appid,
      'lat'  => lat,
      'lon'  => lon,
      'gc' => '0205', # スーパー、コンビニのYOLP業種コード
      'sort' => 'dist', # 距離が近い順に取得
      'results' => '3', # 3件取得
      'output' => 'json',
    }
    url = base_url + '?' + URI.encode_www_form(params)
    JSON.parse(open(url).read)
  end

end

begin

  # 駅すぱあとWebサービス アクセスキー
  ekispert_access_key = '<YOUR ACCESS KEY>'

  # Yahoo! JAPAN アプリケーションID
  yahoo_appid = '<APPLICATION ID>'

  # 検索パラメータ
  name = 'ささしまライブ' # 駅名
  dist = '0.5' # 検索距離(km)

  # 駅情報を取得
  stations = Ekispert.new(ekispert_access_key).station(name)

  if stations.size > 0

    # 最初にヒットした駅だけ使う
    station = stations[0]

    puts "駅名: #{station[:name]}"
    puts

    # 駅周辺の店舗を検索
    list = YOLP.new(yahoo_appid).localsearch(station[:lat], station[:lon], dist)
    list['Feature'].each do |poi|
      puts "名称: #{poi['Name']}"

      if poi['Property']['Station'].size > 0
        # 最寄り駅を1つだけ出力する
        s = poi['Property']['Station'][0]
        puts "- 最寄り駅: #{s['Name']}"
        puts "- 距離: #{s['Distance']}m"
        puts "- 徒歩: #{s['Time']}分"
      end
      puts
    end
  end

rescue Exception => e
  puts "ERROR: #{e.message}"
  puts "ERROR: #{e.backtrace}"
end
```

## 出力結果

```
駅名: ささしまライブ

名称: ファミリーマート　ささしま店
- 最寄り駅: ささしまライブ
- 距離: 220m
- 徒歩: 2分

名称: ファミマグローバルゲート店
- 最寄り駅: ささしまライブ
- 距離: 213m
- 徒歩: 2分

名称: ミニストップ　愛知大学店
- 最寄り駅: ささしまライブ
- 距離: 271m
- 徒歩: 3分
```

## 参考資料

- [駅情報 \- 駅すぱあとWebサービス Documents 駅データ・路線検索のWebAPI](http://docs.ekispert.com/v1/api/station.html)
- [YOLP\(地図\):Yahoo\!ローカルサーチAPI \- Yahoo\!デベロッパーネットワーク](https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/localsearch.html)
- [YOLP\(地図\):YOLP業種コード \- Yahoo\!デベロッパーネットワーク](https://developer.yahoo.co.jp/webapi/map/openlocalplatform/genre.html)