metar - annna - Annna the nice friendly bot. HTML 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"