Compare commits
4 Commits
0.2.62
...
draft/mark
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91666197c6 | ||
|
|
63698c56c3 | ||
|
|
05d744773f | ||
|
|
48bdfa06c8 |
@@ -28,6 +28,7 @@ from .utils import enable_debug_mode
|
||||
from .cache import set_tz_cache_location
|
||||
from .domain.sector import Sector
|
||||
from .domain.industry import Industry
|
||||
from .domain.market import Market
|
||||
from .screener.screener import Screener
|
||||
from .screener.screener_query import EquityQuery
|
||||
|
||||
@@ -38,4 +39,4 @@ import warnings
|
||||
warnings.filterwarnings('default', category=DeprecationWarning, module='^yfinance')
|
||||
|
||||
__all__ = ['download', 'Search', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_cache_location', 'Sector',
|
||||
'Industry', 'EquityQuery', 'Screener']
|
||||
'Industry', 'EquityQuery', 'Screener', 'Market']
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# domain/__init__.py
|
||||
from .sector import Sector
|
||||
from .industry import Industry
|
||||
from .market import Market
|
||||
|
||||
__all__ = ['Sector', 'Industry']
|
||||
__all__ = ['Sector', 'Industry', 'Market']
|
||||
85
yfinance/domain/market.py
Normal file
85
yfinance/domain/market.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from ..data import YfData
|
||||
from ..data import utils
|
||||
from ..const import _QUERY1_URL_
|
||||
# from .domain import Domain
|
||||
|
||||
import pandas as pd
|
||||
|
||||
class Market():
|
||||
def __init__(self, market:'str', session=None, proxy=None, timeout=30):
|
||||
self.market = market
|
||||
self.session = session
|
||||
self.proxy = proxy
|
||||
self.timeout = timeout
|
||||
|
||||
self._data = YfData(session=self.session)
|
||||
self._logger = utils.get_yf_logger()
|
||||
|
||||
self._status = None
|
||||
self._summary = None
|
||||
|
||||
def _fetch_json(self, url, params):
|
||||
data = self._data.cache_get(url=url, params=params, proxy=self.proxy, timeout=self.timeout)
|
||||
if data is None or "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.")
|
||||
try:
|
||||
return data.json()
|
||||
except _json.JSONDecodeError:
|
||||
self._logger.error(f"{self.market}: Failed to retrieve market data and recieved faulty data.")
|
||||
return {}
|
||||
|
||||
@property
|
||||
def status(self):
|
||||
if self._status is not None:
|
||||
return self._status
|
||||
|
||||
url = f"{_QUERY1_URL_}/v6/finance/markettime"
|
||||
params = {
|
||||
"formatted": True,
|
||||
"key": "finance",
|
||||
"lang": "en-GB",
|
||||
"market": self.market
|
||||
}
|
||||
self._status = self._fetch_json(url, params)
|
||||
try:
|
||||
# Unpack
|
||||
self._status = self._status['finance']['marketTimes'][0]['marketTime'][0]
|
||||
self._status['timezone'] = self._status['timezone'][0]
|
||||
del self._status['time'] # redundant
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
# Localise
|
||||
tz = self._status['timezone']['$text']
|
||||
open2 = pd.Timestamp(self._status['open']).tz_convert(tz)
|
||||
close2 = pd.Timestamp(self._status['close']).tz_convert(tz)
|
||||
self._status['open'] = open2
|
||||
self._status['close'] = close2
|
||||
except:
|
||||
pass
|
||||
|
||||
return self._status
|
||||
|
||||
@property
|
||||
def summary(self):
|
||||
if self._summary is not None:
|
||||
return self._summary
|
||||
|
||||
url = f"{_QUERY1_URL_}/v6/finance/quote/marketSummary"
|
||||
fields = ["shortName", "regularMarketPrice", "regularMarketChange", "regularMarketChangePercent"]
|
||||
params = {
|
||||
"fields": ",".join(fields),
|
||||
"formatted": False,
|
||||
"lang": "en-US",
|
||||
"market": self.market
|
||||
}
|
||||
self._summary = self._fetch_json(url, params)
|
||||
try:
|
||||
self._summary = self._summary['marketSummaryResponse']['result']
|
||||
self._summary = {x['exchange']:x for x in self._summary}
|
||||
except:
|
||||
pass
|
||||
return self._summary
|
||||
|
||||
Reference in New Issue
Block a user