Python requestsライブラリ入門:GET・POSTリクエストの使い方を徹底解説
Pythonでアプリケーションを開発していると、外部のサードパーティサービスと連携したくなる場面が出てきます。例えば、フィットネスツールを作るならFitbit APIに接続して運動データを取得したいでしょうし、SMSを送信できるアプリならTwilio APIを利用することになるかもしれません。
Pythonでは「requests」ライブラリを使うことで、こうしたサードパーティのWebサービスと簡単に連携できます。この記事では、requestsライブラリの基本的な使い方と、HTTPリクエストの送信方法について詳しく解説します。
Webリクエストのおさらい
Webリクエストはインターネットの中核を担う仕組みです。この記事を開いたとき、あなたのブラウザはサーバーに対してHTTPリクエストを送信しました。サーバーはそのリクエストを受け取り、要求されたページを探し出して、見つかったページをブラウザへ返します。この一連の流れによって、私たちはWeb上のコンテンツを閲覧できるのです。
Webリクエストにはさまざまな種類があります。ページを表示する際に使われるのは「GETリクエスト」で、これはサーバーからデータを取得するためのリクエストです。その他にも、サーバー上のリソースを変更するためのPOSTやPUTといったリクエストが存在します。このチュートリアルでは、特に使用頻度の高いGETとPOSTの2つに焦点を当てて説明します。
requestsのインストール方法
requestsは、PythonでHTTPリクエストを扱うための定番ライブラリです。まずは以下のコマンドでインストールしましょう。
pip install requests
これでパッケージの準備が整い、Webリクエストを送信できるようになりました。
GETリクエストの送信方法
最もよく使われるのがGETリクエストです。サーバーからデータを取得する際に利用します。
ここでは、「猫に関する豆知識(cat facts)」の一覧を取得するアプリを作ることを想定してみましょう。公開APIであるcat-factsを使用すれば、認証情報なしでデータにアクセスできます。以下のコードでAPIにリクエストを送信できます。
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.status_code)
このコードを実行すると「200」という結果が返ってきます。コードの内容を分解して見ていきましょう。
1行目ではrequestsライブラリをインポートしています。次にrequests.get()メソッドを使ってWebリクエストを送信しました。他にも.put()や.post()などのメソッドがありますが、今回はcat-facts APIからデータを取得するだけなので、get()だけで十分でした。
最後に、リクエストのステータスコードを出力しています。「200」が返されたということは、リクエストが正常に完了したことを意味します。ステータスコードの詳細については後ほど解説します。
レスポンスの確認方法
先ほどの例ではステータスコードを表示しましたが、取得したデータそのものはどうやって確認すればよいのでしょうか。そこで活躍するのが.textと.json()メソッドです。
テキスト形式でレスポンスを表示する
.textメソッドを使うと、レスポンスの内容をそのままテキストとして確認できます。
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.text)
このコードを実行すると猫の豆知識のリストが返されます。しかし、APIから取得したデータはプレーンテキストのため、そのままでは読みにくく実用性に欠けます。
JSON形式でレスポンスを表示する
より扱いやすいのがJSON形式です。以下のコードでJSONデータを取得できます。
print(res.json())
実行すると、猫の豆知識が格納された長いリストが返されます。最初のレコードは以下のようになっています。
{'_id': '58e009550aac31001185ed12', 'text': 'The oldest cat video on YouTube dates back to 1894.', 'type': 'cat', 'user': {'_id': '58e007480aac31001185ecef', 'name': {'first': 'Kasimir', 'last': 'Schulz'}}, 'upvotes': 6, 'userUpvoted': None}
これで無事に猫の豆知識リストを取得できました。
POSTリクエストの送信方法
requestsライブラリはPOSTリクエストにも対応しています。POSTを使えば、Webサーバー上のデータを新規作成・更新できます。
ここではAirtable APIを使用します。cat-facts APIは読み取り専用のため、書き込み操作を試すにはPOSTに対応したAPIが必要だからです。
例として、飲んだお茶をすべて記録するデータベースがあるとしましょう。新しいお茶を1杯飲んだので、それをデータベースに追加したいと思います。以下のようなコードで実現できます。
import requests
headers = {
'Authorization': 'Bearer API_KEY',
'Content-Type': 'application/json',
}
data = '{"records": [{"fields": {"Drink": "Black Decaf Tea"}}]}'
res = requests.post('https://api.airtable.com/v0/YOUR_BASE_ID/TeaLog', headers=headers, data=data)
print(res.json())
コードの実行結果は以下の通りです。
{'records': [{'id': 'recqUEPuXEAXaNl1L', 'fields': {'Drink': 'Black Decaf Tea', 'Date': '2020-06-16T08:53:02.000Z'}, 'createdTime': '2020-06-16T08:53:02.000Z'}]}
この結果から、HTTPリクエストが成功し、Airtableのデータベースに新しいレコードが追加されたことがわかります。コードの内容を詳しく見ていきましょう。
まず、requestsライブラリをインポートしてHTTPリクエストを送れるようにしています。
次に、認証キーとコンテンツタイプという2つのキーと値を持つ辞書(headers)を定義しました。これはAirtable APIにリクエストを送る際に必要なヘッダー情報です。
続いて、変数dataにPOSTリクエストで送信するデータを格納します。ここでは「Black Decaf Tea(カフェインなし紅茶)」という飲み物をデータベースに追加しています。そしてrequests.post()メソッドにヘッダーとデータを引数として渡すことで、Airtable APIへのPOSTリクエストが実行されました。
最後に、res.json()を使ってリクエストの結果をJSON形式で出力しています。
HTTPステータスコード
HTTPプロトコルでは、リクエストのたびに固有のステータスコードが返されます。これにより、リクエストが成功したのか、あるいはエラーが発生したのかを判断できます。「404 Not Found」などは聞いたことがあるかもしれませんね。
Python requestsでリクエストを送信する際に出会う可能性のある主なステータスコードは以下の通りです。
- 1XX:情報提供
- 2XX:リクエスト成功
- 3XX:リダイレクト
- 4XX:クライアント側のエラー
- 5XX:サーバー側のエラー
ステータスコードを理解しておくと、プログラムにデバッグ処理を組み込めます。先ほどのcat-facts APIのGETリクエストを例に、アクセス先のリソースが見つからなかった場合にメッセージを表示する処理を追加してみましょう。
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
if res.status_code == 200:
print("Success")
else :
print("Error")
このコードを実行すると「Success」と表示されます。ステータスコードが200なので、成功メッセージがコンソールに出力されるのです。もしURLが間違っているなどでリクエストが失敗していれば、「Error」と表示されていたことでしょう。
まとめ
Pythonのrequestsライブラリを使えば、Pythonから手軽にHTTPリクエストを送信できます。この記事ではGETとPOSTリクエストの方法を中心に解説しましたが、PUTやDELETEリクエストも同様に送信可能です。
requests.get()やrequests.post()などのメソッドを呼び出すと、Pythonが指定したWebリソースへリクエストを送信します。ヘッダーやデータを添付することもできるので、自分が管理するWebリソースを更新したい場合にも便利です。
これであなたも、requestsライブラリをプロのように使いこなせるようになったはずです!
-
Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説
Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し
-
Pythonの辞書values()メソッド徹底解説:値の取得から活用まで
Pythonの辞書(ディクショナリ)におけるvalues()メソッドは、辞書に格納されているすべての値を含むオブジェクトを返します。辞書のキーではなく値だけを扱いたい場合に非常に便利なメソッドです。また、後から辞書の内容を変更すると、values()が返すデータも自動的に新しい状態へ反映されます。 Pythonで開発を行っていると、データを辞書として保存したい場面はよくあります。たとえば、レストラン管理システムを構築している場合、各注文の情報を辞書に格納することになるでしょう。 そこで疑問になるのが「辞書に保存した値はどうやって取り出せばいいのか?」という点です。ここで活躍するのが、Pyt