LoginSignup
1
0

More than 3 years have passed since last update.

rubyで住所文字列から最寄駅までの距離を取得してみた

Last updated at Posted at 2021-01-01

rubyで住所から最寄駅の情報を取得できる様にしてみました。

やったことざっくり

  1. Yahoo APIで住所からを緯度経度を取得
  2. Heart Rails APIで緯度経度から最寄駅情報を取得

 実行環境

  1. ruby2.7.2
  2. mac catalina
  3. 実行日時 2021/01/01

1. Yahoo APIで住所からを緯度経度を取得

1.1 yahoo app ID 取得

ここで取得する
https://e.developer.yahoo.co.jp/dashboard/

1.2 リクエストする

・リクエストする住所をurl様にエンコード
・open-uriでリクエストする
レスポンスはこんな感じ
スクリーンショット 2021-01-01 14.58.05.png

1.3 レスポンスから緯度経度をスクレイピング

REXMLを使って取得します。
coordinatesタグに格納されてます。

2. Heart Rails APIで緯度経度から最寄駅情報を取得

2.1 1.で取得した緯度経度でリクエストする

urlはこちら

http://express.heartrails.com/api/xml?method=getStations&x=#{lon}&y=#{lat}"

返ってくるレスポンスはこんな感じ (近い順に複数返ってきてます:eyes:)
スクリーンショット 2021-01-01 14.59.22.png

2.2 返ってきた最寄駅情報をスクレイピングする

上記の様にstationタグに駅情報が入っています。
複数の駅情報が含まれるので最初のstationタグを指定します。

完成したコード

コードはこんな感じになります。


require 'open-uri'
require 'uri'
require "rexml/document"

## 1. request Yahoo API

### 1.1
YAHOO_APP_ID = '[Yahoo app_id]'

### 1.2
ADDRESS ='東京都千代田区千代田1番1号'
p ADDRESS
query = URI.encode_www_form(query: ADDRESS) ## エンコーディング

request_url = "https://map.yahooapis.jp/geocode/V1/geoCoder?appid=#{YAHOO_APP_ID}&#{query}"

### 1.3 
res = OpenURI.open_uri(request_url)

doc = REXML::Document.new(res.read)
coordinates = doc.elements['YDF/Feature/Geometry/Coordinates'].text
lon,lat = coordinates.split(',')

p "経度 = #{lon} , 緯度 = #{lat}"

## 2. Heart Rails API

### 2.1 1.で取得した緯度経度でリクエストする
heart_rails_request_url = "http://express.heartrails.com/api/xml?method=getStations&x=#{lon}&y=#{lat}"


### 2.2 返ってきた最寄駅情報をスクレイピングする
res = OpenURI.open_uri(heart_rails_request_url)
doc = REXML::Document.new(res.read)

station = doc.elements['response/station[1]']
name = station.elements['name'].text
line = station.elements['line'].text
distance = station.elements['distance'].text
p name
p line
p distance

実行結果

皇居(東京都千代田区千代田1番1号)で最寄駅をリクエストしてみた結果。


"経度 = 139.75381447 , 緯度 = 35.68382285"
"桜田門"
"東京メトロ有楽町線"
"740m"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0