aboutsummaryrefslogtreecommitdiff
path: root/evi_to_asn.py
blob: 0531f301361808b0e88f3477b0c1ee5c0f9c2ace (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
import csv
import json
import sys

# Script om Evi vermogensontwikkeling om te zetten in het CSV formaat van de
# ASN, zodat het door plotasn.py meegenomen kan worden.
#
# Om de data te krijgen:
#
# 1. Ga naar https://mijn.evivanlanschot.nl/deelnemer/vermogensontwikkeling
# 2. Er wordt een request gedaan naar /deelnemer/vermogensontwikkeling/postjsondata
# 3. Dit script converteert zulke data op stdin naar een CSV bestand op stdout

MONTHS = {
        'jan': '01', 'feb': '02', 'mrt': '03', 'apr': '04', 'mei': '05', 'jun': '06',
        'jul': '07', 'aug': '08', 'sep': '09', 'okt': '10', 'nov': '11', 'dec': '12',
        }

def parse_date(s):
    d, m, y = s.split('-')
    return '{}-{}-20{}'.format(d, MONTHS[m], y)

def evi_to_asn(json):
    dates = [e['label'] for e in obj['categories'][0]['Category']]

    cum = obj['dataset'][0]
    assert cum['seriesName'] == 'Cumulatieve ontwikkeling'

    prev = 0

    for date, entry in zip(dates, cum['data']):
        if len(entry['value']) == 0:
            continue

        value = float(entry['value'].replace(',', '.'))
        if value == prev:
            continue

        diff = round(value - prev, 2)
        date = parse_date(date)
        yield '', '', '', '', '', '', '', 'EUR', prev, 'EUR', diff, date

        prev = value

if __name__ == '__main__':
    for line in sys.stdin:
        s = json.loads(line)
        obj = json.loads(s)

        wr = csv.writer(sys.stdout)
        for line in evi_to_asn(obj):
            wr.writerow(line)