【Python】yahoo_finance_api2が突然動かなくなった件

Python
スポンサーリンク

皆さんこんにちは!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を確認してみましょう。

yahoo-finance-api2
Yahooo Finance API package

GitHubはpipページのHomepageから飛ぶ事ができます。

pkout/yahoo_finance_api2
API to interact with Yahoo Finance. Contribute to pkout/yahoo_finance_api2 development by creating an account on GitHub.

GitHubの最新ソースで試してみよう

pipの最新バージョンでは2021年5月11日に更新されているようですが、GitHubでは更新頻度も高い為、GitHubの株価取得するファイル(share.py)のソースコードをコピーして実行してみます。

pkout/yahoo_finance_api2
API to interact with Yahoo Finance. Contribute to pkout/yahoo_finance_api2 development by creating an account on GitHub.

GitHubのソースをコピーして実行してみました

GitHubのソースをコピーし実行すると、なんとエラーが発生しませんでした!

どうやらpipのバージョンよりGitHubの方が新しく、更新されているようです。

という事でGitHubを戻してエラーが発生するかどうか確認してみます。

GitHubのソースを戻してエラーを検証してみました。

最新のpipバージョンに対して変更された履歴は一つしかありませんでした。

変更された部分を元に戻して実行してみると・・・エラーが発生しました!

2021年7月4日に更新された内容でエラーがなくなったかと思います。

pkout/yahoo_finance_api2
API to interact with Yahoo Finance. Contribute to pkout/yahoo_finance_api2 development by creating an account on GitHub.

ちなみに、修正内容は以下のように書いてありました。

Add User-Agent request header.
If no User-Agent request header is added, an http403 error will occur.
[AI]BOTさん
[AI]BOTさん

何書いてあるか分からない・・・

まぁ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を試した事をまた記事に起こしていこうかと思います。

最後まで読んで頂きありがとうございました。

コメント

タイトルとURLをコピーしました