Source code for yahoofinance.interfaces

from abc import ABC, abstractmethod
from bs4 import BeautifulSoup
import json
import requests
import re

from .dataconfigs import Locale, DataEvent, DataFormat, DataFrequency


[docs]class IYahooData(ABC): """This is the base interface. Each class in this library inherits implements this interface. **This class is NOT instantiable.** :param locale: a :class:`yahoofinance.Locale` constant to determine which domain to query from. """ # This is the default row _default_row = { x: '-' for x in DataFormat._FORMATS } def __init__(self, locale): self._base_url = Locale.locale_url(locale)
[docs] @abstractmethod def to_csv(self): # def to_csv(self, path, sep, data_format, csv_dialect): """Generates a CSV file.""" pass
[docs] @abstractmethod def to_dfs(self): # def to_dfs(self, data_format): """Generates a dictionary containing :class:`pandas.DataFrame`.""" pass
@staticmethod def _csv_row(dataset, heading, index, data_fmt): return [heading, ''] + [(data[index] if data.get(index) else IYahooData._default_row)[data_fmt] for data in dataset] @staticmethod def _df_row(dataset, index, data_fmt): return [(data[index] if data.get(index) else IYahooData._default_row)[data_fmt] for data in dataset] @staticmethod def _fetch_quote_summary(url): html = requests.get(url).text soup = BeautifulSoup(html,'html.parser') soup_script = soup.find("script",text=re.compile("root.App.main")).text json_script = json.loads(re.search(r"root.App.main\s+=\s+(\{.*\})",soup_script)[1]) # return json_script return json_script['context']['dispatcher']['stores']['QuoteSummaryStore']