PythonでAPIを扱う方法
こんにちは。クラウドソリューショングループのnakamura.tです。
Pythonでweb開発を行う上で避けて通れないAPIの代表的な扱い方をまとめてみました。
参考になれば幸いです。
目次
Requestsモジュールを使用した方法
Requestsモジュールを使用したAPIの実行方法から見ていきます。
まずモジュールをインストールする必要があるので以下コマンドを実行します。
pip install requests
それではソースを見ていきます。
import requests
url = "実行するAPIのURL"
header = {
'API_KEY': '取得したAPIキー'
}
payload = {
'request_body': '必要なリクエスト内容'
}
res = requests.post(url, headers=header, data=payload)
res = requests.get(url, headers=header)
res = requests.delete(url, headers=header)
基本的な記法としては上記の通り「requests.{httpリクエスト}(url)」となります。
APIキーなどヘッダーの指定が必要な場合も追加のパラメータで指定することができます。またPostの場合はリクエストボディが必要になる場合があるのでその内容も追加パラメータで指定します。
次にレスポンスの扱いを見ていきます。
# ステータスコード
res.status_code
# レスポンスbodyをテキスト形式で返却
res.text
# レスポンスbodyをバイナリ形式で返却
res.content
# URLを返却
res.url
# ヘッダー情報を返却
res.headers
上記のようにレスポンス内容を取得することができます。
開発をする際はレスポンスボディを加工して扱うことが多いと思われますが、「res.content」で受け取った場合バイナリになっているのでデコードをする必要があるので注意です。
また、一般的なREST(ful) APIのレスポンスボディはjsonである可能性が高いですが、pythonではそのままでは扱えず辞書型に変換してあげる必要があります。
初めのうちはログを見てもjsonなのか辞書型なのか見分けがつかず苦労することがあるかもしれません。
見分け方は以下の通りです。
# json(ダブルクオテーション)
{"key": "value"}
# 辞書型(シングルクオテーション)
{'key': 'value'}
変換自体はこちらのソースで可能になります。
import json
response = json.loads(res)
ここまでの内容をランダムでアドバイスをくれる「Advice Slip JSON API」を使用して試してみたいと思います。
import json
import requests
advice_url = "https://api.adviceslip.com/advice"
# リクエスト実行
res = requests.get(advice_url)
# レスポンス内容を辞書型に変換
res = json.loads(res.text)
print(res['slip']['advice'])
# 実行結果
Remember that spiders are more afraid of you, than you are of them.
クライアントライブラリを使用する方法
APIを使用する場合、中には特定のプログラミング言語を対象にクライアントライブラリが公開されている場合があります。
この場合は前章で見てきたような「requests」を使用する必要がなくより手軽にシステムに組み込むことができます。
DeepLのAPIを例にとって見ていきます。
まずはDeepLのライブラリをインストールします。
pip install deepl
次にソースを実装していきます。
import deepl
# translatorオブジェクトを生成
translator = deepl.Translator("取得したAPIキー")
# 翻訳したい内容を入力し実行
result = translator.translate_text('Hello World', target_lang="JA")
print(result)
# 実行結果
ハロー・ワールド
どうでしょうか。先ほど紹介した方法より手軽に実装することが出来たんじゃないでしょうか。
おまけ
前章の例とDeepLを合わせて使用すると日本語でランダムなアドバイスをくれるので復習がてら試してみてください
import deepl
import json
import requests
translator = deepl.Translator("取得したAPIキー")
advice_url = "https://api.adviceslip.com/advice"
res = requests.get(advice_url)
res = json.loads(res.text)
result = translator.translate_text(res['slip']['advice'], target_lang="JA")
print(res['slip']['advice'])
print(result)
# 実行結果
When hugging, hug with both arms and apply reasonable, affectionate pressure.
ハグをするときは両腕で抱き、適度な愛情を込めた圧力をかける。
おわりに
どうでしたでしょうか。APIを扱うことは避けては通れないのでここで理解の一助になっていたら幸いです。