Python
 Computer >> コンピューター >  >> プログラミング >> Python

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ライブラリをプロのように使いこなせるようになったはずです!

  1. Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説

    Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し

  2. Pythonの辞書values()メソッド徹底解説:値の取得から活用まで

    Pythonの辞書(ディクショナリ)におけるvalues()メソッドは、辞書に格納されているすべての値を含むオブジェクトを返します。辞書のキーではなく値だけを扱いたい場合に非常に便利なメソッドです。また、後から辞書の内容を変更すると、values()が返すデータも自動的に新しい状態へ反映されます。 Pythonで開発を行っていると、データを辞書として保存したい場面はよくあります。たとえば、レストラン管理システムを構築している場合、各注文の情報を辞書に格納することになるでしょう。 そこで疑問になるのが「辞書に保存した値はどうやって取り出せばいいのか?」という点です。ここで活躍するのが、Pyt