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 '