anwb.sh - randomcrap - random crap programs of varying quality
(HTM) git clone git://git.codemadness.org/randomcrap
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
anwb.sh (2027B)
---
1 #!/bin/sh
2 # ANWB traffic information.
3 # Dependencies: awk, curl, json2tsv
4
5 ua="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0.2) Gecko/20100101 Firefox/82.0"
6 url="https://api.anwb.nl/v2/incidents/desktop-light?apikey=QYUEE3fEcFD7SGMJ6E7QBCMzdQGqRkAi"
7
8 curl \
9 -s \
10 -H "$ua" \
11 "$url" | \
12 json2tsv | \
13 awk '
14 function show(o) {
15 if (o["id"] == "")
16 return;
17
18 print o["id"] OFS o["category"] OFS o["road"] OFS \
19 o["start"] OFS o["stop"] OFS \
20 seg["start"] OFS seg["end"] OFS \
21 o["from"] OFS o["to"] OFS \
22 o["lat"] OFS o["lon"] OFS o["reason"];
23 }
24 BEGIN {
25 FS = OFS = "\t";
26 }
27 # road segment
28 $1 == ".roads[].segments[]" {
29 delete seg;
30 }
31 $1 == ".roads[].segments[].start" {
32 seg["start"] = $3;
33 }
34 $1 == ".roads[].segments[].end" {
35 seg["end"] = $3;
36 }
37 $1 ~ /^\.roads\[\]\.segments\[\]\.(jams|radars|roadworks)\[\]$/ && $2 == "o" {
38 type = substr($1, length(".roads[].segments[].") + 1);
39 type = substr(type, type, length(type) - 2);
40
41 show(o);
42 delete o;
43 }
44 $1 ~ /^\.roads\[\]\.segments\[\]\.(jams|radars|roadworks)\[\]\..*\.lat$/ {
45 o["lat"] = $3;
46 }
47 $1 ~ /^\.roads\[\]\.segments\[\]\.(jams|radars|roadworks)\[\]\..*\.lon$/ {
48 o["lon"] = $3;
49 }
50 $1 ~ /^\.roads\[\]\.segments\[\]\.(jams|radars|roadworks)\[\]\.[a-zA-Z]*$/ {
51 sel = $1;
52 gsub(/^\.roads\[\]\.segments\[\]\.(jams|radars|roadworks)\[\]\./, "", sel);
53
54 o[sel] = $3;
55 }
56 END {
57 show(o);
58 }
59 ' | \
60 sort -t ' ' -k2,2 -k3,3 -k4,4 -k5,5 | \
61 awk -F '\t' '
62 function show() {
63 printf("%s", "[" $3 "] ");
64 if ($6 == $7)
65 printf("%s", $6);
66 else
67 printf("%s", $6 " - " $7);
68 if (length($6) && length($8))
69 printf(", ");
70 if ($8 == $9)
71 printf("%s", $8);
72 else
73 printf("%s - %s", $8, $9);
74 if (length($12))
75 printf(": %s", $12);
76 print "";
77 }
78 # filter on a specific road.
79 tolower($3) != "a28" {
80 next;
81 }
82 # longitude (cut off part of long road).
83 $11 < 6.4124 {
84 next;
85 }
86 $2 == "jams" {
87 print "";
88 print "Files:";
89 show();
90 }
91 $2 == "radars" {
92 print "";
93 print "Snelheidscontroles:";
94 show();
95 }
96 $2 == "roadworks" {
97 print "";
98 print "Wegwerkzaamheden:";
99 show();
100 }
101 '