Compare commits

..
5 Commits
Author SHA1 Message Date
cmallwitz 9e842b30de Updated Yahoo EU consent cookies 2022-12-09 13:51:19 +00:00
cmallwitz 52e7119081 Updated Yahoo EU consent cookies 2022-11-04 13:25:40 +00:00
cmallwitz 520d2441cb Refresh Yahoo cookies 2022-06-02 21:19:49 +01:00
cmallwitz 8b370dfc73 Updated version 2022-01-07 21:42:07 +00:00
cmallwitz af82f16740 Updated Yahoo EU consent 2022-01-07 21:33:55 +00:00
6 changed files with 58 additions and 54 deletions
BIN
View File
Binary file not shown.
+11 -12
View File
@@ -48,18 +48,17 @@ class BaseClient:
os.makedirs(self.basedir, exist_ok=True)
user_agents = [
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) Gecko/20100101 Firefox/82.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:97.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/96.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:101.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:103.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:105.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/97.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
+18 -14
View File
@@ -50,6 +50,13 @@ def fmt(m, key, default=0.0):
return default
def cookie(name, value):
return cookiejar.Cookie(version=0, name=name, value=value,
port=None, port_specified=False, domain=".yahoo.com", domain_specified=True,
domain_initial_dot=True, path="/", path_specified=True, secure=True, expires=None,
discard=False, comment=None, comment_url=None, rest=dict())
class Yahoo(BaseClient):
def __init__(self, ctx):
super().__init__()
@@ -111,19 +118,16 @@ class Yahoo(BaseClient):
url = 'https://finance.yahoo.com/quote/{}?p={}'.format(ticker, ticker)
cookies = [cookiejar.Cookie(version=0,
name="B",
value="er7g22lg35od5&b=3&s=8p",
port=None, port_specified=False,
domain=".yahoo.com", domain_specified=True, domain_initial_dot=True,
path="/", path_specified=True,
secure=True,
expires=None,
discard=False,
comment=None,
comment_url=None,
rest=dict())
]
cookies = [
cookie("A1", "d=AQABBDcIZWMCEHYhFYqQ7qyTvvD2eAT87mcFEgABCAGDlGPBY_bPb2UB9qMAAAcILwhlY6iIogg&S=AQAAAjZvTuAn1nH4h71eKJtCEHk"),
cookie("A1S", "d=AQABBDcIZWMCEHYhFYqQ7qyTvvD2eAT87mcFEgABCAGDlGPBY_bPb2UB9qMAAAcILwhlY6iIogg&S=AQAAAjZvTuAn1nH4h71eKJtCEHk&j=GDPR"),
cookie("A3", "d=AQABBDcIZWMCEHYhFYqQ7qyTvvD2eAT87mcFEgABCAGDlGPBY_bPb2UB9qMAAAcILwhlY6iIogg&S=AQAAAjZvTuAn1nH4h71eKJtCEHk"),
cookie("GUC", "AQABCAFjlINjwUIcFQQQ&s=AQAAAFOQKXn7&g=Y5M5Jg"),
cookie("GUCS", "ASHFadZS"),
cookie("maex", "{\"v2\":{}}"),
cookie("PRF", "t=TQQQ%2BASTO.L%2BCHMI%2BVFIAX%2BIBM%2BXMR-USD%2BMVV%2BSECU-B.ST%2BMSFT"),
cookie("thamba", "1")
]
try:
text = self.urlopen(url, redirect=True, data=None, headers=None, cookies=cookies)
@@ -310,7 +314,7 @@ class Yahoo(BaseClient):
self.getRealtime(ticker, datacode)
if not self.crumb:
return 'Yahoo.getHistoric({}, {}, {}) - crumb'.format(ticker, datacode, date)
return 'Yahoo.getHistoric({}, {}, {}) - crumb missing'.format(ticker, datacode, date)
try:
t1 = int(date_as_dt.timestamp())
+1 -1
View File
@@ -14,7 +14,7 @@ import os
cur_dir = os.getcwd()
addin_id = "com.financials.getinfo"
addin_version = "3.0.5"
addin_version = "3.0.9"
addin_displayname = "Financial Market Extension"
addin_publisher_link = "https://github.com/cmallwitz/Financials-Extension"
addin_publisher_name = "The Publisher"
+16 -16
View File
@@ -102,7 +102,7 @@ class Test(unittest.TestCase):
s = financials.getRealtime('IBM:NYQ', 'INDUSTRY', 'FT')
self.assertEqual(str, type(s), 'test_US_equity INDUSTRY {}'.format(s))
self.assertEqual(s, 'Software & Computer Services', 'test_US_equity INDUSTRY {}'.format(s))
self.assertEqual(s, 'Technology', 'test_US_equity INDUSTRY {}'.format(s))
# may fail (s is None) on weekends when date/time displayed doesn't have time component with TZ
s = financials.getRealtime('IBM:NYQ', 'TIMEZONE', 'FT')
@@ -208,7 +208,7 @@ class Test(unittest.TestCase):
s = financials.getRealtime('SAPX:GER', 'INDUSTRY', 'FT')
self.assertEqual(str, type(s), 'test_DE_equity INDUSTRY {}'.format(s))
self.assertEqual('Software & Computer Services', s, 'test_DE_equity INDUSTRY {}'.format(s))
self.assertEqual('Technology', s, 'test_DE_equity INDUSTRY {}'.format(s))
s = financials.getRealtime('SAPX:GER', 'LAST_PRICE_DATE', 'FT')
self.assertEqual(str, type(s), 'test_DE_equity LAST_PRICE_DATE {}'.format(s))
@@ -243,7 +243,7 @@ class Test(unittest.TestCase):
self.assertTrue(testutils.is_date(s), 'test_DE_equity EX_DIV_DATE {}'.format(s))
s = financials.getRealtime('ISHAX:GER', 'NAME', 'FT')
self.assertEqual('Intershop Communications AG', s, 'test_DE_equity NAME {}'.format(s))
self.assertEqual('INTERSHOP Communications AG', s, 'test_DE_equity NAME {}'.format(s))
s = financials.getRealtime('ISHAX:GER', 'BETA', 'FT')
self.assertTrue(testutils.is_positive_float(s), 'test_DE_equity BETA {}'.format(s))
@@ -275,7 +275,7 @@ class Test(unittest.TestCase):
s = financials.getRealtime('NOVO B:CPH', 'industry', 'FT')
self.assertEqual(str, type(s), 'test_DK_equity INDUSTRY {}'.format(s))
self.assertEqual('Pharmaceuticals & Biotechnology', s, 'test_DK_equity INDUSTRY {}'.format(s))
self.assertEqual('Pharmaceuticals and Biotechnology', s, 'test_DK_equity INDUSTRY {}'.format(s))
def test_TY_equity(self):
s = financials.getRealtime('6503:TYO', 'OPEN', 'FT')
@@ -312,38 +312,38 @@ class Test(unittest.TestCase):
def test_TLV_equity(self):
s = financials.getRealtime('DELT:TLV', 'LAST_PRICE', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity LAST_PRICE {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity LAST_PRICE {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'OPEN', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity OPEN {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity OPEN {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'LOW', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity LOW {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity LOW {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'HIGH', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity HIGH {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity HIGH {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'LOW_52_WEEK', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity LOW_52_WEEK {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity LOW_52_WEEK {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'HIGH_52_WEEK', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity HIGH_52_WEEK {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity HIGH_52_WEEK {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'MARKET_CAP', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity MARKET_CAP {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity MARKET_CAP {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'VOLUME', 'FT')
self.assertEqual(float, type(s), 'test_TlV_equity VOLUME {}'.format(s))
self.assertEqual(float, type(s), 'test_TLV_equity VOLUME {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'CURRENCY', 'FT')
self.assertEqual('ILa', s, 'test_TlV_equity CURRENCY')
self.assertEqual('ILa', s, 'test_TLV_equity CURRENCY')
s = financials.getRealtime('DELT:TLV', 'SECTOR', 'FT')
self.assertEqual(str, type(s), 'test_TlV_equity SECTOR {}'.format(s))
self.assertEqual('Consumer Goods', s, 'test_TY_equity SECTOR {}'.format(s))
self.assertEqual(str, type(s), 'test_TLV_equity SECTOR {}'.format(s))
self.assertEqual('Consumer Discretionary', s, 'test_TY_equity SECTOR {}'.format(s))
s = financials.getRealtime('DELT:TLV', 'INDUSTRY', 'FT')
self.assertEqual(str, type(s), 'test_TlV_equity INDUSTRY {}'.format(s))
self.assertEqual(str, type(s), 'test_TLV_equity INDUSTRY {}'.format(s))
self.assertEqual('Personal Goods', s, 'test_TY_equity INDUSTRY {}'.format(s))
def test_index(self):
+12 -11
View File
@@ -175,12 +175,11 @@ class Test(unittest.TestCase):
self.assertEqual(float, type(s), 'test_realtime_UK_ETF LAST_PRICE {}'.format(s))
s = financials.getRealtime('VERX.L', Datacode.TIMEZONE.value, 'YAHOO')
self.assertEqual(s, 'Europe/London', 'test_realtime_UK_ETF TIMEZONE {}'.format(s))
self.assertEqual('Europe/London', s, 'test_realtime_UK_ETF TIMEZONE {}'.format(s))
s = financials.getRealtime('CSP1.L', Datacode.NAME.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_UK_ETF NAME {}'.format(s))
self.assertEqual(s, 'iShares VII Public Limited Company - iShares Core S&P 500 UCITS ETF',
'test_realtime_UK_ETF NAME {}'.format(s))
self.assertEqual('iShares Core S&P 500 UCITS ETF USD (Acc)', s, 'test_realtime_UK_ETF NAME {}'.format(s))
def test_realtime_DE_equity(self):
@@ -188,11 +187,11 @@ class Test(unittest.TestCase):
self.assertEqual(float, type(s), 'test_realtime_DE_equity LAST_PRICE {}'.format(s))
s = financials.getRealtime('SAP.DE', Datacode.TIMEZONE.value, 'YAHOO')
self.assertEqual(s, 'Europe/Berlin', 'test_realtime_DE_equity TIMEZONE {}'.format(s))
self.assertEqual('Europe/Berlin', s, 'test_realtime_DE_equity TIMEZONE {}'.format(s))
s = financials.getRealtime('SAP.DE', Datacode.SECTOR.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_DE_equity SECTOR {}'.format(s))
self.assertEqual(s, 'Technology', 'test_realtime_DE_equity SECTOR {}'.format(s))
self.assertEqual('Technology', s, 'test_realtime_DE_equity SECTOR {}'.format(s))
s = financials.getRealtime('SAP.DE', Datacode.INDUSTRY.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_DE_equity INDUSTRY {}'.format(s))
@@ -205,6 +204,9 @@ class Test(unittest.TestCase):
self.assertEqual(s, 'GER', 'test_realtime_DE_equity EXCHANGE')
def test_DK_equity(self):
s = financials.getRealtime('NOVO-B.CO', 'last_price', 'YAHOO')
self.assertEqual(float, type(s), 'test_DK_equity LAST_PRICE {}'.format(s))
s = financials.getRealtime('NOVO-B.CO', 'name', 'YAHOO')
self.assertEqual('Novo Nordisk A/S', s, 'test_DK_equity NAME {}'.format(s))
@@ -260,12 +262,12 @@ class Test(unittest.TestCase):
self.assertIsNone(s, 'test_historic_US_equity LAST_PRICE {}'.format(s))
s = financials.getHistoric('IBM', Datacode.CLOSE.value, '2017-01-03', 'YAHOO')
self.assertEqual(167.190002, s, 'test_historic_US_equity CLOSE {}'.format(s))
self.assertEqual(159.837479, s, 'test_historic_US_equity CLOSE {}'.format(s))
financials.yahoo.historicdata = {}
s = financials.getHistoric('IBM', Datacode.CLOSE.value, '2017-01-03', 'YAHOO')
self.assertEqual(167.190002, s, 'test_historic_US_equity CLOSE {}'.format(s))
self.assertEqual(159.837479, s, 'test_historic_US_equity CLOSE {}'.format(s))
directory = os.path.join(str(pathlib.Path.home()), '.financials-extension')
ibm = os.path.join(directory, 'yahoo-IBM.csv')
@@ -277,11 +279,10 @@ class Test(unittest.TestCase):
financials.yahoo.historicdata = {}
s = financials.getHistoric('IBM', Datacode.CLOSE.value, '2017-01-03', 'YAHOO')
self.assertEqual(167.190002, s, 'test_historic_US_equity CLOSE {}'.format(s))
self.assertEqual(159.837479, s, 'test_historic_US_equity CLOSE {}'.format(s))
# Note: quarterly dividend and splits will change past adjusted prices - will fail after the next dividend
s = financials.getHistoric('IBM', Datacode.ADJ_CLOSE.value, '2017-01-03', 'YAHOO')
self.assertEqual(134.699081, s, 'test_historic_US_equity ADJ_CLOSE {}'.format(s))
self.assertEqual(float, type(s), 'test_historic_US_equity ADJ_CLOSE {}'.format(s))
def test_historic_UK_ETF(self):
@@ -329,7 +330,7 @@ class Test(unittest.TestCase):
self.assertEqual(s, 82.889999, 'test_historic_DE_equity CLOSE {}'.format(s))
s = financials.getHistoric('C060.DE', Datacode.CLOSE.value, '2017-01-03', 'YAHOO')
self.assertEqual(s, 68.209999, 'test_historic_DE_equity CLOSE {}'.format(s))
self.assertEqual(s, 72.870003, 'test_historic_DE_equity CLOSE {}'.format(s))
def test_realtime_errors(self):