皆さんこんにちは!SEふじたけです。
突然ですが、yahoo_finance_api2を実行すると例外が発生するようになりました。
yahoo_finance_api自体が非公式という事もあり、突然動かなくなっても仕方ないかな?
とも思っていましたが、今まで作っていた株価を取得する部分が止まってしまいます。
それは非常に困る為、原因を調査していきました。
今回は調査した内容について備忘録として記事を書いていこうと思います。
発生したエラー内容について
今回発生したエラーは以下のような内容でした。
例外が発生しました: JSONDecodeError
Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
ぱっと見yahoo_finance_api2内でJsonファイルのデコードに失敗しているように見えます。
yahoo_finance_api2のpipに掲載されているGitHubを確認してみましょう。

GitHubはpipページのHomepageから飛ぶ事ができます。
GitHubの最新ソースで試してみよう
pipの最新バージョンでは2021年5月11日に更新されているようですが、GitHubでは更新頻度も高い為、GitHubの株価取得するファイル(share.py)のソースコードをコピーして実行してみます。
GitHubのソースをコピーして実行してみました
GitHubのソースをコピーし実行すると、なんとエラーが発生しませんでした!
どうやらpipのバージョンよりGitHubの方が新しく、更新されているようです。
という事でGitHubを戻してエラーが発生するかどうか確認してみます。
GitHubのソースを戻してエラーを検証してみました。
最新のpipバージョンに対して変更された履歴は一つしかありませんでした。
変更された部分を元に戻して実行してみると・・・エラーが発生しました!
2021年7月4日に更新された内容でエラーがなくなったかと思います。
ちなみに、修正内容は以下のように書いてありました。
Add User-Agent request header.
If no User-Agent request header is added, an http403 error will occur.
![[AI]BOTさん](https://awsgcp.go-cloudpro.com/wp-content/uploads/2020/12/6e9811b92a277141a27037d6ef857498.png)
何書いてあるか分からない・・・
まぁUser-Agentリクエストヘッダが無いからHTTP 403エラーが発生するという事ですかね!
※英語できないので間違ってたらすみません。
GitHubのコードをローカルにコピーする事で動きます
どうしてもyahoo_finance_api2を作動させたい場合は、GitHubのshare.pyをローカルから呼び出す事で動作してくれます。
またはpipが更新されるのを待ちましょう。
※2021年7月19日にpipが更新されました。更新されたライブラリではエラー解消されていました。
「yfinance」の方が使いやすいかも
今回色々ライブラリを検索するにあたり、yahoo_finance_api2よりyfinanceの方が使い勝手がよさそうです。例えばyfinanceなら、1978年からの株価を取得できます。yahoo_finance_api2では2か月分しか取得できなかったので、大きな違いかと思います。
※yfinanceは外国株に対して実施したものです。
yfinanceを試した事をまた記事に起こしていこうかと思います。
最後まで読んで頂きありがとうございました。
コメント