-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdawum-to-csv.py
executable file
·91 lines (81 loc) · 2.36 KB
/
dawum-to-csv.py
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
83
84
85
86
87
88
89
90
91
#!/usr/bin/env python3
import csv
import io
import requests
from slugify import slugify
DAWUM_API_URL = 'https://api.dawum.de/'
SLUGIFY_GERMAN_UMLAUTS = [
['ä', 'ae'],
['Ä', 'Ae'],
['ö', 'oe'],
['Ö', 'Oe'],
['ü', 'ue'],
['Ü', 'Ue'],
]
rsp = requests.get(DAWUM_API_URL)
data = rsp.json()
# Parse Parliaments
parliaments = {}
for key, value in data['Parliaments'].items():
parliaments[key] = {
'parliament_id': slugify(value['Shortcut'], replacements=SLUGIFY_GERMAN_UMLAUTS),
'parliament_name': value['Name']
}
# Parse Institutes
institutes = {}
for key, value in data['Institutes'].items():
institutes[key] = {
'institute_id': slugify(value['Name'], replacements=SLUGIFY_GERMAN_UMLAUTS),
'institute_name': value['Name'],
}
# Parse Taskers
taskers = {}
for key, value in data['Taskers'].items():
taskers[key] = {
'tasker_id': slugify(value['Name'], replacements=SLUGIFY_GERMAN_UMLAUTS),
'tasker_name': value['Name'],
}
# Parse Parties
parties = {}
for key, value in data['Parties'].items():
parties[key] = {
'party_id': slugify(value['Shortcut'], replacements=SLUGIFY_GERMAN_UMLAUTS),
'party_name': value['Name'],
}
# Parse Surveys
surveys = {}
result_fieldnames = set()
for key, value in data['Surveys'].items():
surveys[key] = {
'survey_id': key,
'survey_date': value['Date'],
'survey_persons': value['Surveyed_Persons'],
'survey_start': value['Survey_Period']['Date_Start'],
'survey_end': value['Survey_Period']['Date_End'],
}
surveys[key].update(
parliaments[value['Parliament_ID']]
)
surveys[key].update(
taskers[value['Tasker_ID']]
)
surveys[key].update(
institutes[value['Institute_ID']]
)
for party_id, result in value['Results'].items():
col = 'result_' + parties[party_id]['party_id']
result_fieldnames.add(col)
surveys[key][col] = float(result)
f = io.StringIO()
fieldnames = [
'survey_id', 'survey_date', 'survey_persons', 'survey_start', 'survey_end',
'parliament_id', 'parliament_name',
'institute_id', 'institute_name',
'tasker_id', 'tasker_name',
]
fieldnames += result_fieldnames
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for survey in surveys.values():
writer.writerow(survey)
print(f.getvalue())