API入門チュートリアル(Python実装)

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]
- - - - - - - - - - - - - - - - -------- - -------

おすすめ

転載: blog.csdn.net/weixin_42731543/article/details/103040753