68 lines
2.5 KiB
Python
Executable File
68 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import os
|
|
import requests
|
|
import re
|
|
import time
|
|
import datetime
|
|
import sys
|
|
import random
|
|
|
|
collection = 'funds'
|
|
interval = 3600
|
|
funds_behr = {
|
|
'robeco_one_defensief': 'rg.one.def',
|
|
'robeco_one_neutraal' : 'rg.one.neut',
|
|
'robeco_one_offensief': 'rg.one.offe',
|
|
# 'robeco_plus_gprec' : 'rg.bp.gprec',
|
|
# 'robeco_plus_glconsc' : 'rg.gl.consc',
|
|
# 'robeco_plus_uspreme' : 'rg.us.preme',
|
|
# 'robeco_plus_uslcfe' : 'rg.us.lc.fe'
|
|
}
|
|
funds_morningstar = {
|
|
'robeco_one_defensief': 'F00000OZ3S',
|
|
'robeco_one_neutraal' : 'F00000OZ3T',
|
|
'robeco_one_offensief': 'F00000OZ3U',
|
|
# 'robeco_plus_gprec' : 'F00000QDBK', # BP Global Premium Equities C
|
|
# 'robeco_plus_glconsc' : 'F00000PNRA', # Global Conservative Equities C EUR
|
|
# 'robeco_plus_uspreme' : 'F00000OWHQ', # BP US Premium Equities F
|
|
# 'robeco_plus_uslcfe' : 'F00000QDBI' # BP US Large Cap Equities F EUR
|
|
}
|
|
# log = open('/host/var/log/funds.log', 'a')
|
|
|
|
def behr_backlog(funds):
|
|
for fund,code in funds.items():
|
|
dir = '/var/lib/collectd/rrd/{}/exec-fund-{}'.format(collection, fund)
|
|
if not os.path.isdir(dir):
|
|
url = 'http://www.behr.nl/Beurs/Slotkoersen/slotkoersen.php?fd={}'.format(code)
|
|
# url = 'http://haggis.no-ip.org/funds/{}.html'.format(code)
|
|
response = requests.get(url)
|
|
matches = re.findall('(\d+): ([\d\.]+)', response.text)
|
|
for match in matches:
|
|
for i in range(23):
|
|
timestamp = int(time.mktime(datetime.datetime.strptime(match[0], '%y%m%d').replace(hour = i + 1).timetuple()))
|
|
put_value(fund, match[1], timestamp)
|
|
sys.stdout.flush()
|
|
|
|
def morningstar_ticker(funds):
|
|
for fund,code in funds.items():
|
|
url = 'http://www.morningstar.nl/nl/funds/snapshot/snapshot.aspx?id={}'.format(code)
|
|
response = requests.get(url)
|
|
matches = re.findall('>EUR[\s]*[^\d]*([\d,]+)', response.text)
|
|
quote = matches[0].replace(',', '.')
|
|
# quote = 100 + 50 * (random.random() - 1)
|
|
put_value(fund, quote)
|
|
|
|
def put_value(fund, value, timestamp = 'N'):
|
|
print('PUTVAL {}/exec-fund-{}/gauge-ticker interval={} {}:{}'.format(collection, fund, interval, timestamp, value))
|
|
sys.stdout.flush()
|
|
if timestamp is 'N':
|
|
timestamp = int(time.time())
|
|
# log.write('{},{},{}\n'.format(fund, timestamp, int(value)))
|
|
|
|
behr_backlog(funds_behr)
|
|
while True:
|
|
seconds = os.times()[4]
|
|
morningstar_ticker(funds_morningstar)
|
|
elapsed = os.times()[4] - seconds
|
|
time.sleep(interval - elapsed)
|