yahoo_finance_api2で「json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)」が発生する。

2021-07-27

 昨日突然「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が修正されるまでは、上記の対応で動かせるようになると思います。