diff options
| -rwxr-xr-x | ledger-price-db-update.py | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/ledger-price-db-update.py b/ledger-price-db-update.py index 853cfe9..b80191c 100755 --- a/ledger-price-db-update.py +++ b/ledger-price-db-update.py @@ -1,13 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import datetime +import json import os import sys import traceback +from codecs import open from configparser import ConfigParser + import requests -import json -import datetime -from codecs import open # Config sample: # @@ -23,6 +24,9 @@ from codecs import open # [stocks] # symbols=V,AMD # +# [stocks_moex] +# symbols=GAZP,SBER +# # [etf] # symbols=FXUS # @@ -42,16 +46,16 @@ def get_json(url, **kwargs): def print_price(symbol, price, base, date=datetime.datetime.now()): date_str = date.strftime('%Y/%m/%d %H:%M:%S') if ' ' in symbol: - symbol = '"' + symbol +'"' - print(('P %s %s %f %s' % (date_str, symbol, price, base))) + symbol = '"' + symbol + '"' + print(('P %s %s %f %s' % (date_str, symbol, price, base))) def exchange_rates(): base = config.get('fixer', 'base') symbols = dict([(symbol.upper(), commodity) for symbol, commodity in config.items('exchange-symbols')]) params = { - "access_key": config.get('fixer', 'access_key'), - "symbols": ','.join(list(symbols.keys()) + [base,]) + "access_key": config.get('fixer', 'access_key'), + "symbols": ','.join(list(symbols.keys()) + [base, ]) } rates = get_json(r'http://data.fixer.io/api/latest', params=params)['rates'] @@ -63,13 +67,14 @@ def exchange_rates(): def stocks(): for symbol in config.get('stocks', 'symbols').split(','): - params = { "assetclass": "stocks" } + params = {"assetclass": "stocks"} url = r'https://api.nasdaq.com/api/quote/%s/info' % (symbol) response = requests.get(url, params=params) data = json.loads(response.content) price = float(data['data']['keyStats']['PreviousClose']['value'][1:]) print_price(symbol, price, '$') + def get_moex_value(data, name): if 'columns' in data: index = data['columns'].index(name) @@ -78,14 +83,27 @@ def get_moex_value(data, name): return data['data'][0][index] return None + def etfs(): symbols = config.get('etf', 'symbols') for symbol in symbols.split(','): - data = get_json(r'http://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities/%s.jsonp' % symbol)['marketdata'] + data = \ + get_json(r'http://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities/%s.jsonp' % symbol)[ + 'marketdata'] + value = get_moex_value(data, 'LAST') + print_price(symbol, value, 'R') + +def stocks_moex(): + symbols = config.get('stocks_moex', 'symbols') + for symbol in symbols.split(','): + data = \ + get_json(r'http://iss.moex.com/iss/engines/stock/markets/shares/boards/TQBR/securities/%s.jsonp' % symbol)[ + 'marketdata'] value = get_moex_value(data, 'LAST') print_price(symbol, value, 'R') + def bonds(): symbols = config.items('bond') date = datetime.datetime.now() - datetime.timedelta(days=1) @@ -93,9 +111,11 @@ def bonds(): for short, symbol in symbols: if symbol.startswith('SU') or symbol.startswith('RU'): if symbol.startswith('SU'): - url = r'https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities/%s.jsonp?from=%s' % (symbol, date_str) + url = r'https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities/%s.jsonp?from=%s' % ( + symbol, date_str) else: - url = r'https://iss.moex.com/iss/engines/stock/markets/bonds/boards/EQOB/securities/%s.jsonp?from=%s' % (symbol, date_str) + url = r'https://iss.moex.com/iss/engines/stock/markets/bonds/boards/EQOB/securities/%s.jsonp?from=%s' % ( + symbol, date_str) data = get_json(url)['securities'] price = get_moex_value(data, 'PREVPRICE') value = get_moex_value(data, 'FACEVALUE') @@ -104,7 +124,8 @@ def bonds(): continue print_price(short.upper(), price / 100.0 * value + accrued, 'R', date) else: - url = r'https://iss.moex.com/iss/history/engines/stock/markets/bonds/boards/TQOD/securities/%s.jsonp?from=%s' % (symbol, date_str) + url = r'https://iss.moex.com/iss/history/engines/stock/markets/bonds/boards/TQOD/securities/%s.jsonp?from=%s' % ( + symbol, date_str) data = get_json(url)['history'] if len(data['data']) > 0: value = get_moex_value(data, 'CLOSE') @@ -122,7 +143,7 @@ def bonds(): def main(): - updates = [exchange_rates, stocks, etfs, bonds] + updates = [exchange_rates, stocks, stocks_moex, etfs, bonds] for update in updates: try: update() @@ -130,5 +151,6 @@ def main(): print('Oops, update method `%s` failed: %s' % (update, e), file=sys.stderr) traceback.print_exc() + if __name__ == '__main__': main() |
