9

It had been working all the time before today. I don't know why it doesn't work today.

import yfinance as yf
df = yf.Ticker('MMM').history(start='2021-01-01',end='2021-07-10')
File "D:\anaconda3\envs\tensorflow\lib\site-packages\yfinance\base.py", line 157, in history
data = data.json()
File "D:\anaconda3\envs\tensorflow\lib\site-packages\requests\models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "D:\anaconda3\envs\tensorflow\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "D:\anaconda3\envs\tensorflow\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\anaconda3\envs\tensorflow\lib\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)
Flavia Giammarino
  • 7,987
  • 11
  • 30
  • 40
Xitler
  • 101
  • 6

3 Answers3

6

I upgraded to the latest version and the problem was solved. Installation code for latest version: pip install yfinance==0.1.62

Emre Didir
  • 96
  • 2
  • Thank you this absolutely did the trick! This was the answer I have been searching for. Do you know why this is an issue and what the differences are between that version and the most recent version (0.1.63)? – Jared Cohen Jul 12 '21 at 05:43
  • 1
    @JaredCohen They changed the site from which they received the data. I noticed the error while trying to solve it. Example URL: [BTC-USD](https://query2.finance.yahoo.com/v8/finance/chart/BTC-USD) The keys have changed to meet the requests in the previous version. Thank you for your comment :) – Emre Didir Jul 17 '21 at 13:28
0

If Anyone Still facing problem with jsonDecoder error. Try deleting yfin from venv of pycharm folder. Somehow my system was not upgrading yfin in venv of pycharm. I had to manually delete yfin folder and upgrad yfin. Its now working for me. Thanks https://stackoverflow.com/a/68601710/16442394

0

The Below patch fixed my issue: In /usr/local/lib/python3.8/dist-packages/yfinance/base.py Make below changes:

        # Getting data from json
        num_tries = 4
        url = "{}/v8/finance/chart/{}".format(self._base_url, self.ticker)
        while num_tries > 0:
            data = self.session.get(
                url=url,
                params=params,
                proxies=proxy,
                headers=utils.user_agent_headers
            )
            if "Will be right back" in data.text:
                raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
                               "Our engineers are working quickly to resolve "
                               "the issue. Thank you for your patience.")
            if data.status_code == 404:
                _time.sleep(0.5)
                num_tries -= 1
                continue
            else:
                data = data.json()
                break
        if num_tries == 0:
            print("%s failed to get information"%self.ticker)
            data = {}