diff --git a/.gitignore b/.gitignore index 5fbd326..a087389 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# this project +login.py + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/start.py b/start.py new file mode 100644 index 0000000..43fc8e5 --- /dev/null +++ b/start.py @@ -0,0 +1,52 @@ + +import json + +import login + +from wikifolio import Wikifolio + + +wikifolioID = "wf00gk0001" + +wf = Wikifolio(login.login_mail, login.login_pw, wikifolioID) + + +print(wf.performance_since_emission) +print(wf.performance_ever) + +print(wf.symbol) +print(wf.description) +print(wf.trader) +print(wf.creation_date) + +print(wf.get_price_information()) + +wf.get_tags() + +wf.get_content().underlyings + + +## Trades + +trades = wf.get_trade_history() + +for a in trades: + a.name + a.isin + a.link + a.orderType + a.executionPrice + a.executionDate + a.performance + a.weightage + print('---') + + +## Portfolio + +portf = wf.get_portfolio() + +print(json.dumps(portf, indent = 2)) + +print(json.dumps(portf['groups'][1], indent = 2)) + diff --git a/wikifolio.py b/wikifolio.py index 569734d..77d0400 100644 --- a/wikifolio.py +++ b/wikifolio.py @@ -24,7 +24,7 @@ class Wikifolio: rawData = None twoFA_key = None - def __init__(self, username: str, password: str, wikifolio_name: str, twoFA_key = None) -> None: + def __init__(self, username: str, password: str, wikifolio_name: str, twoFA_key = None, postprocessRawData: typing.Optional[bool] = True) -> None: params = { "email": username, "password": password, @@ -37,17 +37,20 @@ def __init__(self, username: str, password: str, wikifolio_name: str, twoFA_key r.raise_for_status() self.cookie = r.cookies self.name = wikifolio_name - self._get_wikifolio_id(wikifolio_name) + self._get_wikifolio_id(wikifolio_name, postprocessRawData) self.twoFA_key = twoFA_key - def _get_wikifolio_id(self, name: str) -> None: + def _get_wikifolio_id(self, name: str, postprocessRawData: typing.Optional[bool] = True) -> None: r = requests.get( "https://www.wikifolio.com/de/de/w/{}".format(name), cookies=self.cookie, ) r.raise_for_status() - html = etree.fromstring(r.text) - result = json.loads(html.xpath('//*[@id="__NEXT_DATA__"]/text()')[0]) + rawData = r.text + if postprocessRawData: + rawData = rawData.replace('& ', '') + html_parsed = etree.fromstring(rawData) + result = json.loads(html_parsed.xpath('//*[@id="__NEXT_DATA__"]/text()')[0]) self.wikifolio_id = result["props"]["pageProps"]["data"]["wikifolio"]["id"] self.rawData = result @@ -772,3 +775,22 @@ def remove_order(self, order_uuid: str): r.raise_for_status() raw_json = r.json() return raw_json + + + def get_portfolio(self): + header = { + "accept": "application/json", + } + params = { + "country": "de", + "language": "de", + } + r = requests.get( + "https://www.wikifolio.com/api/wikifolio/{}/portfolio".format(self.name), + params=params, + headers=header, + cookies=self.cookie, + ) + r.raise_for_status() + raw_json = r.json() + return raw_json