📑

ChatGPTにAPIの仕様書を読み込ませ、APIにアクセスするプログラムを生成させる

2023/03/23に公開

ChatGPTにWebAPIの仕様書を読み込ませ、APIにアクセスするプログラムを自動的に生成させられないか検討した。実験にはChatGPT Plus(Model:GPT-4、2023/03/23)を用いました。

例1: 郵便番号検索API(郵便番号から住所を得る)

API仕様書 http://zipcloud.ibsnet.co.jp/doc/api

プロンプト

ゴール
===
WebAPIの仕様書を理解し、WebAPIにアクセスするpythonのプログラムを生成してください。 入力値にすべてのリクエストパラメメータ、出力値にはすべてのレスポンスをJSON形式で出力する関数を作成してください。関数のプログラムのみを出力してください。ステップバイステップで考えてゆきましょう。

仕様書
=====
(以下、http://zipcloud.ibsnet.co.jp/doc/api のテキストを手作業でコピペ)

結果

以下の関数は、指定された仕様に基づいて郵便番号検索APIにアクセスし、結果をJSON形式で返します。

import requests

def search_zipcode(zipcode, callback=None, limit=None):
    base_url = "https://zipcloud.ibsnet.co.jp/api/search"
    params = {"zipcode": zipcode}

    if callback:
        params["callback"] = callback
    if limit:
        params["limit"] = limit

    response = requests.get(base_url, params=params)

    if response.status_code == 200:
        return response.json()
    else:
        raise Exception(f"API request failed with status code {response.status_code}")


この関数は、必須のzipcodeパラメータを受け取り、オプションのcallbackおよびlimitパラメータを受け取ることができます。関数は、APIからのレスポンスをJSON形式で返します。APIリクエストが失敗した場合、関数は例外をスローします。

実行結果

print(search_zipcode('9041103')) #この行は人間が書きました。

出力されたJSON

{'message': None, 'results': [{'address1': '沖縄県', 'address2': 'うるま市', 'address3': '石川赤崎', 'kana1': 'オキナワケン', 'kana2': 'ウルマシ', 'kana3': 'イシカワアカサキ', 'prefcode': '47', 'zipcode': '9041103'}], 'status': 200}

はい。動く。

print(search_zipcode('')) # この行は人間が書きました。

出力されたJSON

{'message': '必須パラメータが指定されていません。', 'results': None, 'status': 400}

ハイすごい。仕様書だけあれば良い。

Discussion