APIとは
完全にアプリケーションプログラミングインターフェイスと呼ばれるAPIは、コードを取得し、コードを使用するサーバーにデータを送信するために使用できるアプリケーションプログラミングインターフェイスです。
APIからデータを受け取りたい場合は、リクエストを行う必要があります。リクエストはネットワーク全体に分散されます。たとえば、このブログ投稿にアクセスすると、Webブラウザーがサーバーに要求を送信し、サーバーはWebページのコンテンツで応答します。
PythonでAPIリクエストを送信する
最初にPythonでリクエストライブラリをインストールします(Teriminalに直接入力します)
pip install requests
最初の単純なAPIリクエスト
リクエストライブラリには、さまざまな種類のリクエストがあります。最も一般的に使用されるGETリクエストは、データを取得するために使用されます。データのみを取得するため、「取得」リクエストの発行に重点を置きます。
「GET」リクエストを発行するには、次のように定義されているrequests.get()関数を使用します。
help(requests.get)
Help on function get in module requests.api:
get(url, params=None, **kwargs)
Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
これらのうち、最初の注意を払うURL URLパラメータ入力uはrをlは最も重要なAPIインタフェースです。
これでAPIにアクセスします
response = requests.get("http://api.open-notify.org/this-api-doesnt-exist")
print(response.status_code)
# 404
サーバーから返されるステータスコードであるステータスコード「404」は、取得するリソースがこのサーバーに存在しないことを示していることをご存知かもしれません。
他にも多くのステータスコードがあります。
·200:一切正常,结果已返回(如果有)。
·301:服务器将您重定向到其他端点。当公司切换域名或更改端点名称时,可能会发生这种情况。
·400:服务器认为您提出了错误的请求。当您没有正确发送数据时,可能会发生这种情况。
·401:服务器认为您未通过身份验证。许多API都需要登录证书,因此当您没有发送正确的凭据来访问API时就会发生这种情况。
·403:您尝试访问的资源被禁止:您没有查看该资源的正确权限。
·404:在服务器上找不到您尝试访问的资源。
·503:服务器尚未准备好处理请求。
実際のリソースにアクセスする
通常、複数のAPIが特定のサーバーで提供されます。これらの各APIは、一般にエンドポイントと呼ばれます。使用する最初のエンドポイントはhttp://api.open-notify.org/astros.jsonで、現在宇宙にいる宇宙飛行士に関するデータを返します。
response = requests.get("http://api.open-notify.org/astros.json")
print(response.status_code)
# 200
戻り値は「200」で、すべてが正常であり、結果が返されたことを示します。
ただし、返される形式はJSON形式であることに注意してください。出力を見てみましょう。
print(response.json())
#{'message': 'success', 'people': [{'name': 'Alexey Ovchinin', 'craft': 'ISS'}, {'name': 'Nick Hague', 'craft': 'ISS'}, {'name': 'Christina Koch', 'craft': 'ISS'}, {'name': 'Alexander Skvortsov', 'craft': 'ISS'}, {'name': 'Luca Parmitano', 'craft': 'ISS'}, {'name': 'Andrew Morgan', 'craft': 'ISS'}], 'number': 6}
出力形式は計算機が読みやすいものですが、このデータセットの特性を観察するのは簡単ではないため、このJSONデータを処理するにはjsonモジュールをインポートする必要があります。
import json
def jprint(obj):
# create a formatted string of the Python JSON object
text = json.dumps(obj, sort_keys=True, indent=4)
print(text)
jprint(response.json())
出力は次のとおりです。
{
"message": "success",
"number": 6,
"people": [
{
"craft": "ISS",
"name": "Alexey Ovchinin"
},
{
"craft": "ISS",
"name": "Nick Hague"
},
{
"craft": "ISS",
"name": "Christina Koch"
},
{
"craft": "ISS",
"name": "Alexander Skvortsov"
},
{
"craft": "ISS",
"name": "Luca Parmitano"
},
{
"craft": "ISS",
"name": "Andrew Morgan"
}
]
}
このように、Pythonの辞書のように見え、データの属性を簡単に確認でき、さらにデータを処理するのにも便利です。
2番目に重要なパラメータ-params
前のGET関数では、URLの入力に加えて、paramsという別の属性があります。すべてのリクエスト条件にパラメータが必要なわけではありませんが、特定のデータをリクエストするには、必要なデータを返すパラメータをサーバーに指定する必要があります。
たとえば、エンドポイントhttp://api.open-notify.org/iss-pass.json。このエンドポイントは、次回、国際宇宙ステーションが地球上の特定の位置を通過することを示しています。このとき、地理的な位置を入力し、宇宙ステーションの位置を取得する必要があります。
parameters = {
"lat": 40.71,
"lon": -74
}
緯度と経度の情報を辞書の形式で提供し、GETを使用してデータを再度要求します。
response = requests.get("http://api.open-notify.org/iss-pass.json", params=parameters)
jprint(response.json())
返されたデータ:
{
"message": "success",
"request": {
"altitude": 100,
"datetime": 1568062811,
"latitude": 40.71,
"longitude": -74.0,
"passes": 5
},
"response": [
{
"duration": 395,
"risetime": 1568082479
},
{
"duration": 640,
"risetime": 1568088118
},
{
"duration": 614,
"risetime": 1568093944
},
{
"duration": 555,
"risetime": 1568099831
},
{
"duration": 595,
"risetime": 1568105674
}
]
}
ただし、上記の時刻-risetimeは数字の文字列であり、理解しにくいようです。この時刻形式は、タイムスタンプまたはエポックと呼ばれます。日時ライブラリを使用して、使い慣れた時間形式に変換できます。
最初のテイクアウト時間:
risetimes = []
for d in pass_times:
time = d['risetime']
risetimes.append(time)
print(risetimes)
次に、日時ライブラリをインポートして変換します。
from datetime import datetime
times = []
for rt in risetimes:
time = datetime.fromtimestamp(rt)
times.append(time)
print(time)
結果は一目でわかります。
2019-09-09 21:27:59
2019-09-09 23:01:58
2019-09-10 00:39:04
2019-09-10 02:17:11
2019-09-10 03:54:34
結論
この記事は単純なチュートリアルです。後で、Pythonを使用してTuringロボットAPIにアクセスするための新しい実用的な記事を公開するので、しばらくお待ちください。
− − − − − − − − − − − − − − − − ---------------- −−−−−−−−−−−−−−- -
この記事は、最初に登場しzyairelu.cn
コメントに私のウェブサイトへようこそと話し合う
個人的なメールボックス[email protected]を
- - - - - - - - - - - - - - - - -------- - -------−−−−−−−−−−−−−−− −