😽

JSONDecodeError: Expecting value: line 1 column 1 (char 0)の解決方法

2023/01/19に公開

金融庁の電子閲覧サイトEDINETからAPIを使って、複数のJSONファイルを取得しようとした際に、次のエラーがでました。この解決方法について、記事に残します。

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

ちなみにEDINETからJSONファイルを取得するコードはこんな感じ。
このコードを回しているときにエラーが出たのです。

for day in day_list:
    url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"
    params = {"date": day, "type": 2}
    res = requests.get(url, params=params)
    json_data = res.json()

解決方法

time.sleep(3)を入れたら解決しました。
大量のファイルをAPIを使って取得する際には、時間の間隔をある程度、開けた方が良いみたいです。
ちなみにtime.sleep(1)ではダメでしたね。

import time

for day in day_list:
    url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"
    params = {"date": day, "type": 2}
    res = requests.get(url, params=params)
    json_data = res.json()
    #ここにtime.sleep()を入れる。
    time.sleep(3)

補足

2023年1月4日からEDINETがシステム更改していて、最初は、それが原因か?とEDINETのAPI仕様書を調べたりしました。しかし、APIについては仕様変更がなされておらず、システム更改は原因ではないと考えました。

次に、エラーメッセージをネットで調べたら、「レスポンスのヘッダーを確認してからjson()を行う」というのを見つけて、トライしてみました。
JSONDecodeErrorはなくなりましたが、代わりに、TypeError: 'NoneType' object is not iterableが出てしましました。
以前、同種のエラーを解決する際に、time.sleep()が効いたことがあったので、試してみたらうまく行った次第です。
さらさら書きましたが、解決するのに2時間ぐらいかかりました(泣)

Discussion