PythonでAPIを使ってみた
そもそもAPIとは?
APIとは「アプリケーション・プログラミング・インターフェース(Application Programming Interface)」の略称です。 一言で表すと、ソフトウェアやプログラム、Webサービスの間をつなぐインターフェースのことを指します。
とググると出てきますが身近にあるAPIを簡単に言い表すと【サーバーに対してリクエスト=URLを送るとそのコマンドに応じて情報などを返してくれるシステム】です。
HTTPリクエストメソッド
ホームページなどWebサイトを見るときにChromeやSafariなどからそのページのサーバーに対して出される命令のこと。
Pythonでよく使うHTTPリクエストメソッドには以下のものがあります。
※説明はとーーーっても簡易的に書いているのであまり正確な表現ではありません。正確な情報はMDNを参照してください
- GETメソッド
- 指定したURLをサーバーに送ってページを表示させる
- POSTメソッド
- 自分が用意したデータをサーバーにプレゼントする
- PUTメソッド
- このファイルをサーバーにプレゼント
- DELETEメソッド
- サーバーにデータ消してくれん?って送る
実際にAPIを使ってみる
今回は国土地理院のジオコーディングAPIを使います。
このAPIは住所や名称を送るとそれに該当する緯度経度の情報を教えてくれるAPIです。
- リクエストURL
- サーバーから送られてくるデータ
- 検索結果の地点が複数ある場合以下のようになる
[
{
"geometry": {
"coordinates": [136.801834, 35.307137],
"type": "Point"
},
"type": "Feature",
"properties": {
"addressCode": "",
"title": "愛知県一宮市真清田"
}
},
{
"geometry": {
"coordinates": [136.802152496667, 35.3101592333333],
"type": "Point"
},
"type": "Feature",
"properties": {
"addressCode": "23203",
"title": "真清田神社",
"dataSource": "1"
}
}
]
ソースコード
「東京ディズニーシー」に該当する場所の緯度経度を取得するプログラム
"""
APIを使ってみる
"""
import requests
address = "東京ディズニーシー"
url = f"https://msearch.gsi.go.jp/address-search/AddressSearch?q={address}"
res = requests.get(
url=url
)
res_list=res.json()
for i in range(0, len(res_list)):
data = res_list[i]
print(f"名称・住所:{data['properties']['title']}")
print(f"緯度経度:{data['geometry']['coordinates']}")
ソースコード解説
- getリクエストを送るためのライブラリをインポート
import requests
- サーバーにgetリクエストを送る
res = requests.get(
url=url
)
getリクエストを送ってサーバーから返ってくるデータを変数resに格納します。
.get()メソッドの引数はサーバーに送信するURLです。getメソッドの他にもpsotメソッドなど色々あります。詳しくは公式ドキュメントを参照してください。
- 取得した情報をリスト型に変換する
res_list=res.json()
サーバーが返してきたデータ(変数resに格納)はそのままでは扱いにくいのでデータ型をリストに変換して処理します。
変換後のリストデータには以下のような辞書型のデータの中に辞書型のデータが格納されています。
入れ子状態のデータです。
{
"geometry": {
"coordinates": [136.802152496667, 35.3101592333333],
"type": "Point"
},
"type": "Feature",
"properties": {
"addressCode": "23203",
"title": "真清田神社",
"dataSource": "1"
}
}
- 変換したリスト型のデータを順番に表示させる
for i in range(0, len(res_list)):
data = res_list[i]
print(f"名称・住所:{data['properties']['title']}")
print(f"緯度経度:{data['geometry']['coordinates']}")
データ(リスト)のインデックスi番目のデータを変数dataに格納する。その後、抜き出したいバリューのキーを指定して情報の抽出する。
最後にそれを表示させる。
使えるかも?しれないAPI紹介
楽天API
楽天サイトの情報を取得できるAPIです。事前にアカウントの登録作業など必要ですが、ドキュメントも日本語で比較的使いやすいものです。
ホットペッパーAPI
楽天API同様、登録は必要ですが使いやすいAPIです。
ホットペッパーグルメに掲載されている店の情報など取得することができます。
ゲームのプレイヤー情報を取得できるAPI
なんかいろんなゲームのプレイ情報を取得できるAPIらしい・・・(使ったことないw)
実際に使ってみた人のサイトも見つけたのでそちらのリンクも添付します。
Discussion