HeartRails Express APIでエリア情報/都道府県情報/路線情報/駅情報/最寄駅情報を取得した際の備忘録（python）

# 目的

HeartRails Express APIでエリア情報/都道府県情報/路線情報/駅情報/最寄駅情報を取得した際の備忘録（python）

> [http://express.heartrails.com](http://express.heartrails.com/api.html#nearest)

# 準備

リクエスト送信モジュールをインストール

```
pip install requests
```

# テスト

### エリア情報取得 API

デフォルトのエリアを取得

```b:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

url = 'http://express.heartrails.com/api/json?method=getAreas'
ret = requests.get(url)
ret_json = json.loads(ret.text)
print(ret_json)
```

```
$ python sample1.py
{'response': {'area': ['北海道', '東北', '関東', '中部', '近畿', '中国', '四国', '九州']}}
```

### 都道府県情報取得 API

デフォルトの都道府県名を取得

```b:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

url = 'http://express.heartrails.com/api/json?method=getPrefectures'
ret = requests.get(url)
ret_json = json.loads(ret.text)
print(ret_json)
```

```
$ python sample.py
{'response': {'prefecture': ['北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県', '新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県', '三重県', '滋賀県', '京都府', '大阪府', '兵庫県', '奈良県', '和歌山県', '鳥取県', '島根県', '岡山県', '広島県', '山口県', '徳島県', '香川県', '愛媛県', '高知県', '福岡県', '佐賀県', '長崎県', '熊本県', '大分県', '宮崎県', '鹿児島県', '沖縄県']}}
```

### 路線情報取得 API

ex. prefecture=大阪府の路線情報を取得

```b:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

url = 'http://express.heartrails.com/api/json?method=getLines&prefecture=大阪府'
ret = requests.get(url)
ret_json = json.loads(ret.text)
print(ret_json)
print(ret_json["response"]["line"][0])
print(len(ret_json["response"]["line"]))
```

```
$ python sample.py
{'response': {'line': ['JR京都線', 'JR大和路線', 'JR大阪環状線', 'JR東西線', 'JR桜島線', 'JR片町線', 'JR神戸線', 'JR福知山線', 'JR関西空港線', 'JR阪和線', '京阪交野線', '京阪本線', '京阪中之島線', '北大阪急行', '南海多奈川線', '南海本線', '南海汐見橋線', '南海空港線', '南海高師浜線', '南海高野線', '大阪モノレール', '大阪モノレール彩都線', '大阪中央線', '大阪千日前線', '大阪南港ポートタウン線', '大阪四つ橋線', '大阪堺筋線', '大阪御堂筋線', '大阪谷町線', '大阪長堀鶴見緑地線', '山陽新幹線', '東海道新幹線', '水間鉄道', '泉北高速鉄道', '能勢電鉄妙見線', '近鉄けいはんな線', '近鉄信貴線', '近鉄南大阪線', '近鉄大阪線', '近鉄奈良線', '近鉄西信貴ケーブル線', '近鉄道明寺線', '近鉄長野線', '阪堺電軌上町線', '阪堺電軌阪堺線', '阪急京都本線', '阪急千里線', '阪急宝塚本線', '阪急神戸本線', '阪急箕面線', '阪神本線', '阪神なんば線', '大阪今里筋線', 'おおさか東線']}}
JR京都線
54
```

### 駅情報取得 API

ex.「name=大阪」を入力

```rb:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

url = 'http://express.heartrails.com/api/json?method=getStations&name=大阪'
ret = requests.get(url)
ret_json = json.loads(ret.text)
print(ret_json)
```

```
$ python sample.py
{'response': {'station': [{'name': '大阪', 'prefecture': '大阪府', 'line': 'JR京都線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'prev': '新大阪', 'next': None}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR大阪環状線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'prev': None, 'next': '福島'}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR神戸線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'prev': None, 'next': '塚本'}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR福知山線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'prev': None, 'next': '尼崎'}]}}
```

### 最寄駅情報取得 API

ex.大阪の緯度経度(x=135.495188, y=34.702398)を入力

```b:sample.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import requests

url = 'http://express.heartrails.com/api/json?method=getStations&x=135.495188&y=34.702398'
ret = requests.get(url)
ret_json = json.loads(ret.text)
print(ret_json)
```

```
$ python sample.py
{'response': {'station': [{'name': '大阪', 'prefecture': '大阪府', 'line': 'JR京都線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'distance': '00m', 'prev': '新大阪', 'next': None}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR大阪環状線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'distance': '00m', 'prev': None, 'next': '福島'}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR神戸線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'distance': '00m', 'prev': None, 'next': '塚本'}, {'name': '大阪', 'prefecture': '大阪府', 'line': 'JR福知山線', 'x': 135.495188, 'y': 34.702398, 'postal': '5300001', 'distance': '00m', 'prev': None, 'next': '尼崎'}, {'name': '梅田', 'prefecture': '大阪府', 'line': '阪神本線', 'x': 135.496745, 'y': 34.701242, 'postal': '5300001', 'distance': '190m', 'prev': '福島', 'next': None}, {'name': '梅田', 'prefecture': '大阪府', 'line': '大阪御堂筋線', 'x': 135.497496, 'y': 34.703765, 'postal': '5300017', 'distance': '260m', 'prev': '中津', 'next': '淀屋橋'}, {'name': '西梅田', 'prefecture': '大阪府', 'line': '大阪四つ橋線', 'x': 135.495802, 'y': 34.699642, 'postal': '5300001', 'distance': '310m', 'prev': None, 'next': '肥後橋'}]}}
```

# Error対策

```
$ python sample3.py
{'response': {'error': "Area '%E5%A4%A7%E9%98%AA%E5%BA%9C' not found."}}
```

HTTPリクエストパラメータが間違っていると上記エラーが出る

# 参考
[http://express.heartrails.com](http://express.heartrails.com/api.html#nearest)
[路線図とかのAPIを使ってみた](https://qiita.com/Frisys/items/b754d9ecf4b3b5f638e3)
[乗換案内オープンAPIをアプリでも使う](https://qiita.com/MYamate_jp/items/0f01742e0b32a012a5a9)
[駅すぱあとWebサービスでWebAPIを使ってみる](https://qiita.com/valsitoh/items/37e18cb76944cc7d05fe)
[乗換案内オープンAPI仕様書](https://biz.jorudan.co.jp/file/norikae_openAPI.pdf)
[Google Maps APIで任意の住所から最寄り駅までの時間を取得する](https://qiita.com/izmth/items/3574c8d435c289a41955)
[公共機関や関連サービスが提供するAPI 20選](https://ferret-plus.com/2481)
[オープンデータのメモ書き](https://qiita.com/pyon2/items/3805165b65abcb14d79b)
[気象庁のデータをJSON化するAPIのようなものを作った](https://qiita.com/ryo-a/items/4f651dbcf82537ac36f1)