Files
opt/collectd/usr/local/bin/funds-data
2024-11-27 10:16:41 +01:00

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)