-
Notifications
You must be signed in to change notification settings - Fork 4
/
indonesia.html
101 lines (83 loc) · 5.4 KB
/
indonesia.html
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
92
93
94
95
96
97
98
99
100
101
<html lang="en">
<head>
<meta charset="UTF-8" />
<script src="https://d3js.org/d3.v6.min.js"></script>
</head>
<body>
<script>
// PARAMS For now
const VAR = 1953
const TURVAR = 1664
const VERVAR = 1
const KEY = '5a91eee05bb200a412fdddf3f53778a8'
const API_BASE = "https://webapi.bps.go.id/v1/api/list/model/data/lang/eng/domain/0000"
function get_data(real=false, VAR=1953, TURVAR=1664, VERVAR=1, KEY='5a91eee05bb200a412fdddf3f53778a8') {
url = `${API_BASE}/var/${VAR}/key/${KEY}/turvar/${TURVAR}/vervar/${VERVAR}/`
console.log(url)
if(!real){
console.log("Using dummy data")
return {"status":"OK","data-availability":"available","var":[{"val":1953,"label":"Number and Percentage of Employment and Unemployment","unit":"","subj":"Employment","def":"","decimal":"2","note":"<p>Year 2011-2013 was result of backcasting weighted by the 2010-2035 population projection\nSince 2014 the estimate was weighted by the 2010-2035 population projection\nYear 2018-2019 was result of backcasting weighted by the 2015-2045 population projection (SUPAS 2015)\nYear 2020 the estimate was weighted by the 2015-2045 population projection (SUPAS 2015)<br \/><\/p>"}],"turvar":[{"val":1664,"label":"Employment"}],"labelvervar":"Employment and Unemployment","vervar":[{"val":1,"label":"Percentage (%)"}],"tahun":[{"val":111,"label":"2011"},{"val":112,"label":"2012"},{"val":113,"label":"2013"},{"val":114,"label":"2014"},{"val":115,"label":"2015"},{"val":116,"label":"2016"},{"val":117,"label":"2017"},{"val":118,"label":"2018"},{"val":119,"label":"2019"},{"val":120,"label":"2020"},{"val":121,"label":"2021"},{"val":122,"label":"2022"},{"val":123,"label":"2023"}],"turtahun":[{"val":189,"label":"February"},{"val":190,"label":"August"}],"metadata":{"activity":null,"variable":null},"datacontent":{"119531664111189":93.04,"119531664111190":92.52,"119531664112189":93.63,"119531664112190":93.87,"119531664113189":94.12,"119531664113190":93.83,"119531664114189":94.3,"119531664114190":94.06,"119531664115189":94.19,"119531664115190":93.82,"119531664116189":94.5,"119531664116190":94.39,"119531664117189":94.67,"119531664117190":94.5,"119531664118189":94.9,"119531664118190":94.7,"119531664119189":95.02,"119531664119190":94.77,"119531664120189":95.06,"119531664120190":92.93,"119531664121189":93.74,"119531664121190":93.51,"119531664122189":94.17,"119531664122190":94.14,"119531664123189":94.55}}
}
console.log(`Fetching data from ${url}`)
return d3.json(url)
}
function parse_bps_response(bps_data){
//1. Get labels for vervar, var, turvar, tahun, turtahun
label_keys = ['vervar', 'var', 'turvar', 'tahun', 'turtahun']
labels = {}
for (key of label_keys){
labels[key] = {}
for (item of bps_data[key]){
labels[key][item.val] = item.label
}
}
// 2. get all posible keys - there may be a more elegant way of doing this but parsing keys rather than matching is difficult because of ambiguity due to non zero filled values
// Is there a better way to do this? e.g. a ES6 ittertools alternative?
let possibleKeys = {};
for (let vervar in labels['vervar']) {
for (let variable in labels['var']) {
for (let turvar in labels['turvar']) {
for (let tahun in labels['tahun']) {
for (let turtahun in labels['turtahun']) {
let key = "" + vervar + variable + turvar + tahun + turtahun;
possibleKeys[key] = {
"year": labels['tahun'][tahun],
"subyear": labels['turtahun'][turtahun],
"subvariable": labels['turvar'][turvar],
"variable": labels['var'][variable],
"vertical_variable": labels['vervar'][vervar]
};
}
}
}
}
}
parsed_data = []
// 3. get all keys in data
// loop over bps_data.datacontent obj with keys and values
for (let key in bps_data.datacontent) {
if (key in possibleKeys) {
let datum_labels = possibleKeys[key];
parsed_datum = {}
parsed_datum['value'] = bps_data.datacontent[key];
// parse the date using the year and subyear
subyear_lookups = { "January": "01-01", "February": "02-01", "March": "03-01", "April": "04-01", "May": "05-01", "June": "06-01", "July": "07-01", "August": "08-01", "September": "09-01", "October": "10-01", "November": "11-01", "December": "12-01", "Quarter I": "01-01", "Quarter 1": "01-01", "Quarter 2": "04-01", "Quarter II": "04-01", "Quarter III": "07-01", "Quarter 3": "07-01", "Quarter IV": "10-01","Quarter 4": "10-01","Semester 1 (March)" : "03-01", "Semester 2 (September)" : "09-01", "Annual": "01-01", "Annually" : "01-01", "Yearly" : "01-01"} // TODO: lazy
parsed_datum['date'] = datum_labels.year + "-" + subyear_lookups[datum_labels.subyear]
parsed_datum['series'] = datum_labels.subvariable
parsed_data.push(parsed_datum)
}
}
return {
'parsed_data': parsed_data,
'labels': labels,
'data': bps_data.datacontent
}
}
bps_data = get_data(false, VAR, TURVAR, VERVAR)
let parsed = parse_bps_response(bps_data)
d3.select('body')
.append('pre')
.text(JSON.stringify(parsed, null, 2))
</script>
</body>
</html>