metar - annna - Annna the nice friendly bot.
(HTM) git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
metar (1518B)
---
1 #!/bin/sh
2
3 iata2icao() {
4 awk -v IATA="$1" --csv 'BEGIN { IATA = toupper(IATA) } $10 == IATA { print $1; exit }' "$csv"
5 }
6
7 printart() {
8 awk 'BEGIN { RS = ""; srand() } { if (rand() < 1 / ++n) out = $0 } END { print out }' "$txt"
9 }
10
11 dromeinfo() {
12 awk -v aerodrome="$1" --csv '
13 BEGIN { aerodrome = toupper(aerodrome) }
14 NR == 1 { split($0, header) }
15 $1 == aerodrome || $10 == aerodrome {
16 for (i = 1; i <= NF; i++)
17 if ($i)
18 {
19 gsub(/_/, " ", header[i])
20 gsub(/_/, " ", $i)
21 s = s sprintf(" %s %s\n", header[i]":", $i)
22 }
23 }
24 END { if (!s) exit; print s }' "$csv"
25 }
26
27 if ! id=$(printf '%s\n' "$1" | grep '^[A-Za-z0-9]\{3,4\}$'); then
28 printf '%s\n' "invalid IATA/ICAO code."
29 exit 1
30 fi
31
32 fmt=decoded
33 uri="https://aviationweather.gov/api/data/{stationinfo,metar}/"
34 txt="$HOME/bin/modules/metar/ascii-planes.txt"
35 csv="$HOME/bin/modules/airport-codes/data/airport-codes.csv"
36
37 [ "${#id}" = 3 ] && id=$(iata2icao "$id")
38
39 if [ -z "$id" ]; then
40 printf '%s\n' "invalid IATA code."
41 exit 1
42 fi
43
44 metar=$(curl -Ssfm 5 --data-urlencode format="$fmt" --data-urlencode ids="$id" "$uri")
45
46 if [ -z "$metar" ]; then
47 printf '%s\n' "error retrieving METAR for $id."
48 exit 1
49 fi
50
51 raw=$(printf '%s\n' "$metar" | sed -n '/Text:/ s/.*: //p')
52 art=$(printart | sed 's/^#//')
53 decode=$(printf '%s\n\n' "$metar" "$art" | /br/bin/bitreich-paste)
54 printf '%s\n' "$raw ; decode: $decode"