Pythonリクエスト入門-GETリクエスト
序章
多くのWebアプリでは、APIを使用してさまざまなサードパーティサービスに接続するのが普通です。 これらのAPIを使用すると、天気情報、スポーツスコア、映画のリスト、ツイート、検索エンジンの結果、写真などのデータにアクセスできます。 APIを使用してアプリに機能を追加することもできます。 これらの例としては、支払い、スケジュール設定、電子メール、翻訳、地図、ファイル転送などがあります。 それらのいずれかを自分で作成する場合は、かなりの時間がかかりますが、APIを使用すると、1つに接続してその機能とデータにアクセスするのに数分しかかかりません。
この記事では、PythonでHTTPリクエストを送信できるPythonRequestsライブラリについて学習します。
また、APIを使用するとHTTPリクエストを送信し、レスポンスを受信するため、Requestsを使用するとPythonでAPIを使用できます。 ここでは、言語翻訳APIの使用方法を示し、その動作例を確認します。
HTTPリクエストの概要
HTTPリクエストは、Webの仕組みです。 Webページに移動するたびに、ブラウザはWebページのサーバーに対して複数の要求を行います。 次に、サーバーはページのレンダリングに必要なすべてのデータで応答し、ブラウザーは実際にページをレンダリングして、ページを表示できるようにします。
一般的なプロセスは次のとおりです。クライアント(リクエストを使用するブラウザやPythonスクリプトなど)がURLにデータを送信し、URLにあるサーバーがデータを読み取り、その処理を決定して、応答を返します。クライアントに。 最後に、クライアントは応答のデータをどう処理するかを決定できます。
クライアントがリクエストで送信するデータの一部は、リクエストメソッドです。 一般的なリクエストメソッドには、GET、POST、PUTがあります。 GETリクエストは通常、何かを変更せずにデータを読み取るためだけのものですが、POSTおよびPUTリクエストは通常、サーバー上のデータを変更するためのものです。 たとえば、Stripe APIを使用すると、POSTリクエストを使用して新しい料金を作成できるため、ユーザーはアプリから何かを購入できます。
注:サーバー上のデータは変更しないため、この記事ではGETリクエストについて説明します。
PythonスクリプトまたはWebアプリ内からリクエストを送信する場合、開発者は、各リクエストで何を送信するか、および応答をどう処理するかを決定できます。 それでは、最初に Scottch.io にリクエストを送信し、次に言語翻訳APIを使用してそれを調べてみましょう。
Pythonリクエストをインストールする
何かをする前に、ライブラリをインストールする必要があります。 それでは、先に進んで、を使用してリクエストをインストールしましょう pip
. 仮想環境をまだ作成していない場合は、最初に作成することをお勧めします。
- pip install requests
私たちの最初のリクエスト
まず、リクエストを使用してScott.ioサイトをリクエストしましょう。 というファイルを作成します script.py
次のコードを追加します。 この記事では、使用するコードがあまりないため、何かが変更された場合は、新しい行を追加する代わりに、既存のコードを更新するだけで済みます。
import requests
res = requests.get('https://scotch.io')
print(res)
したがって、このコードが実行しているのは、GETリクエストをScott.ioに送信することだけです。 これは、ブラウザがこのページを表示するために送信したリクエストと同じタイプですが、唯一の違いは、リクエストが実際にHTMLをレンダリングできないため、代わりに生のHTMLとその他の応答情報を取得することです。
私たちは使用しています .get()
ここで機能しますが、Requestsでは次のような他の機能を使用できます .post()
と .put()
それらのリクエストも送信します。
script.pyファイルを実行することで実行できます。
- python script.py
そして、これがあなたが見返りに得るものです:
ステータスコード
最初にできることは、ステータスコードを確認することです。 HTTPコードの範囲は1XXから5XXです。 おそらく見たことがある一般的なステータスコードは、200、404、および500です。
各ステータスコードの意味の概要は次のとおりです。
- 1XX-情報
- 2XX-成功
- 3XX-リダイレクト
- 4XX-クライアントエラー(エラーが発生しました)
- 5XX-サーバーエラー(エラーが発生しました)
一般的に、独自のリクエストを実行するときに探しているのは、200年代のステータスコードです。
リクエストは、4XXおよび5XXステータスコードがエラーであることを認識します。したがって、これらのステータスコードが返された場合、リクエストからの応答オブジェクトは次のように評価されます。 False
.
応答が真実かどうかを確認することで、要求が正常に応答したかどうかをテストできます。 例えば:
if res:
print('Response OK')
else:
print('Response Failed')
「応答に失敗しました」というメッセージは、400または500のステータスコードが返された場合にのみ表示されます。 URLをナンセンスに変更して、404で応答が失敗することを確認してください。
次を追加することで、ステータスコードを直接確認できます。
print(res.status_code)
これにより、ステータスコードが直接表示されるため、自分で番号を確認できます。
ヘッダー
応答から取得できるもう1つのことは、ヘッダーです。 応答オブジェクトのヘッダーディクショナリを使用して、それらを確認できます。
print(res.headers)
ヘッダーはリクエストと一緒に送信され、レスポンスで返されます。 ヘッダーは、クライアントとサーバーの両方が、応答/応答で送受信されているデータを解釈する方法を知っているように使用されます。
返されるさまざまなヘッダーが表示されます。 多くの場合、ヘッダー情報を直接使用する必要はありませんが、必要に応じてそこにあります。
コンテンツタイプは、HTML、JSON、PDF、テキストなどのデータの形式を明らかにするため、通常は必要になる可能性があります。 ただし、コンテンツタイプは通常、リクエストによって処理されるため、返されるデータにアクセスできます。
応答テキスト
そして最後に、見てみると res.text
(これは、私たちが見ているようなHTMLページのようなテキストデータに対して機能します)Scotchのホームページを構築するために必要なすべてのHTMLを見ることができます。 レンダリングされませんが、Scotchに属しているように見えます。 これをファイルに保存して開くと、Scotchサイトに似たものが表示されます。 実際の状況では、画像、スクリプト、スタイルシートなどを読み込むために1つのWebページに対して複数のリクエストが行われるため、HTMLのみをファイルに保存すると、Scotchのようには見えません。 HTMLデータを取得するために実行されたリクエストは1つだけであるため、ioページはブラウザでのように見えます。
print(res.text)
TranslateAPIの使用
それでは、もっと面白いことに移りましょう。 Yandex Translate APIを使用して、テキストを別の言語に翻訳するリクエストを実行します。
APIを使用するには、最初にサインアップする必要があります。 サインアップしたら、Translate APIに移動して、APIキーを作成します。 APIキーを取得したら、それを定数としてファイルに追加します。 これらすべてを実行できるリンクは次のとおりです。https://tech.yandex.com/translate/
API_KEY = 'your yandex api key'
APIキーが必要な理由は、YandexがAPIを使用するたびに認証できるようにするためです。 APIキーは、送信時にリクエストURLの最後に追加されるため、軽量の認証形式です。
APIを使用するために送信する必要のあるURLを知るには、Yandexのドキュメントを参照してください。
そこを見ると、TranslateAPIを使用してテキストを翻訳するために必要なすべての情報が表示されます。
アンパサンド(&)、疑問符(?)、等号(=)が付いたURLが表示されたら、そのURLがGETリクエスト用であることを確認できます。 これらの記号は、URLに付随するパラメーターを指定します。
通常、角括弧([])で囲まれたものはオプションです。 この場合、フォーマット、オプション、およびコールバックはオプションですが、リクエストにはキー、テキスト、および言語が必要です。
それでは、そのURLに送信するコードを追加しましょう。 作成した最初のリクエストを次のように置き換えることができます。
url = 'https://translate.yandex.net/api/v1.5/tr.json/translate'
res = requests.get(url)
パラメータを追加する方法は2つあります。 URLの末尾に直接追加することも、リクエストに追加してもらうこともできます。 後者を行うために、パラメーターの辞書を作成できます。 必要な3つの項目は、キー、テキスト、および言語です。 APIキーを使用して辞書を作成しましょう。 'Hello'
テキストの場合、および 'en-es'
langとして、これは英語からスペイン語に翻訳したいことを意味します。
他の言語コードを知る必要がある場合は、こちらをご覧ください。 あなたは639-1列を探しています。
を使用してパラメータ辞書を作成します dict()
関数を作成し、辞書に必要なキーと値を渡します。
params = dict(key=API_KEY, text='Hello', lang='en-es')
次に、パラメータ辞書を取得して、 .get()
関数。
res = requests.get(url, params=params)
この方法でパラメータを渡すと、リクエストが先に進み、パラメータをURLに追加します。
次に、応答テキストのprintステートメントを追加して、応答で返される内容を確認しましょう。
print(res.text)
3つのことがわかります。 応答自体のステータスコードとまったく同じステータスコードが表示され、指定した言語が表示され、リスト内に翻訳されたテキストが表示されます。 だからあなたは見るべきです 'Hola'
翻訳されたテキストの場合。
言語コードとしてen-frを使用して再試行すると、次のように表示されます。 'Bonjour'
今の応答で。
params = dict(key=API_KEY, text='Hello', lang='en-fr')
この特定の応答のヘッダーを見てみましょう。
print(res.headers)
明らかに、別のサーバーと通信しているため、ヘッダーは異なるはずですが、この場合、コンテンツタイプはtext/htmlではなくapplication/jsonです。 これは、データをJSONとして解釈できることを意味します。
application / jsonが応答のコンテンツタイプである場合、リクエストで応答を辞書とリストに変換して、データに簡単にアクセスできるようにすることができます。
データをJSONとして解析するには、 .json()
応答オブジェクトのメソッド。
印刷すると、データは同じように見えますが、形式が少し異なります。
json = res.json()
print(json)
異なる理由は、res.textから取得するプレーンテキストではなくなったためです。 今回は辞書の印刷版です。
テキストにアクセスしたいとします。 これは辞書になっているので、テキストキーを使用できます。
print(json['text'])
そして今、私たちはその1つのキーのデータだけを見ることができます。 この場合、1つのアイテムのリストを見ているので、リスト内のそのテキストを直接取得したい場合は、インデックスからアクセスできます。
print(json['text'][0])
そして今、私たちが目にするのは翻訳された単語だけです。
したがって、もちろん、パラメータを変更すると、異なる結果が得られます。 翻訳するテキストを変更しましょう Hello
に Goodbye
、ターゲット言語をスペイン語に戻し、リクエストを再送信します。
params = dict(key=API_KEY, text='Goodbye', lang='en-es')
長いテキストをさまざまな言語に翻訳してみて、APIがどのような応答を返すかを確認してください。
APIエラーケースの翻訳
最後に、エラーの場合を見ていきます。 すべてが常に機能するとは限らないため、それがいつ発生するかを知る必要があります。
1文字を削除してAPIキーを変更してみてください。 これを行うと、APIキーは無効になります。 次に、リクエストを送信してみてください。
ステータスコードを見ると、次のようになります。
print(res.status_code)
そのため、APIを使用している場合は、アプリのニーズに応じてエラーケースを処理できるように、問題がないかどうかを確認する必要があります。
結論
これが私たちが学んだことです:
- HTTPリクエストのしくみ
- 応答で可能なさまざまなステータスコード
- PythonRequestsライブラリを使用してリクエストを送信および受信する方法
- 言語翻訳APIを使用してテキストを翻訳する方法
- アプリケーション/JSONコンテンツの応答を辞書に変換する方法
さらに多くのことをしたい場合は、このリストをチェックして、利用可能なさまざまなAPIを確認し、PythonRequestsでそれらを使用してみてください。