summaryrefslogtreecommitdiff
path: root/ledger-price-db-update.py
blob: d4d9bcea4a91adc06cde7988314faf115ab4fde5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from configparser import ConfigParser
import requests
import json
import datetime
from codecs import open

# Config sample:
#
# [fixer]
# access_key = 00000000000000000000000000000000
# base=RUB
#
# [exchange-symbols]
# USD=$
# EUR=€
# RUB=R
#
# [stocks]
# symbols=V,AMD
#
# [etf]
# symbols=FXUS

CONFIG_FILE = '~/.ledger-commodities'
current_date = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
config = ConfigParser()
config.readfp(open(os.path.expanduser(CONFIG_FILE), 'r', 'utf-8'))


def get_json(url, **kwargs):
    response = requests.get(url, **kwargs)
    return json.loads(response.content)


def print_price(symbol, price, base):
    print ('P %s %s %f %s'  % (current_date, symbol, price, base)).encode('utf-8')


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(symbols.keys() + [base,])
    }

    rates = get_json(r'http://data.fixer.io/api/latest', params=params)['rates']
    base_value = rates[base]
    for symbol, value in rates.items():
        if symbol != base:
            print_price(symbols[symbol], base_value / value, symbols[base])


def stocks():
    params = {
            "types": "ohlc",
            "symbols": config.get('stocks', 'symbols')
    }
    data = get_json(r'https://api.iextrading.com/1.0/stock/market/batch', params=params)
    for symbol in data.keys():
        price = data[symbol]['ohlc']['close']['price']
        print_price(symbol, price, '$')

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)

        value_index = data['marketdata']['columns'].index('LAST')
        value = data['marketdata']['data'][0][value_index]
        print_price(symbol, value, 'R')

def main():
    exchange_rates()
    stocks()
    etfs()

if __name__ == '__main__':
    main()