😽
JSONDecodeError: Expecting value: line 1 column 1 (char 0)の解決方法
金融庁の電子閲覧サイト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