yahoo_finance_api2で「json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)」が発生する。
昨日突然「yahoo_finance_api2」でエラーが発生するようになりました。
File "yahoo_finance_value.py", line 19, in get_stock_value
symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,
File "/opt/conda/lib/python3.8/site-packages/yahoo_finance_api2/share.py", line 26, in get_historical
data = self._download_symbol_data(period_type, period,
File "/opt/conda/lib/python3.8/site-packages/yahoo_finance_api2/share.py", line 94, in _download_symbol_data
resp_json = requests.get(url).json()
File "/opt/conda/lib/python3.8/site-packages/requests/models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "/opt/conda/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/opt/conda/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/opt/conda/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
困ったので、yahoo_finance_api2のGitHubを確認してみると同じエラーがissueに上がっていました。
とりあえず原因を探してみようと思い、share.pyをローカルにコピーして動作させたところ何故か動きました、、、
つたない英語ですが、issueに一応行ったことについてコメントを残しました。一応日本語で以下にも記載しておきます。
バグが解消されました 2021/07/19
こちらの問題ですが、すでに解消されました。pipに入っていたshare.pyのバージョンが古かったようです。ver0.0.12で解消されています。
迅速なご対応ありがとうございました。
私もいつかバグの原因を特定して発言できる様になりたい。お門違いな発言をしてしまい恥ずかしい、、、
エラーの回避方法
share.pyをプロジェクト内にコピーします。
関数を使用しているプロジェクトファイルのimport文をローカルのshare.pyを呼び出すように書き換えます。
from yahoo_finance_api2 import share → import share

※分ごとのデータを取っている場合、timestampを米国時刻→日本時刻に変換する必要があります。
time = datetime.fromtimestamp(t/ 1000) #Timespampをdatetime型に変換する。
time = datetime(year=time.year, month=time.month, day=time.day, hour=(time.hour + 9), minute=time.minute, second=time.second) #米国時刻→日本時刻に変換
「よし!ここから解析だ!」と思ったのですが、なぜかこの時点でプログラムが動くようになってしまいました。share.pyのエラーではないということはpipの不具合でしょうか、、、
暫定策ですが、yahoo_finance_api2のpipが修正されるまでは、上記の対応で動かせるようになると思います。