summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xledger-price-db-update.py48
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()