weather program

Raul A. Gallegos raul at asmodean.net
Wed Jun 16 16:13:25 EDT 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I don't remember who wrote this but here is a script which is real good.

- --begin here---
#!/bin/sh
#  The following script uses lynx to retrieve the 
#  weather for the entered zipcode or city/state.
#  A simple awk program selects the fields to be displayed.
#  parse options using the getopts shell build-in.
while getopts "wdsny" NAME; do
  #echo "$NAME"
  #echo $OPTIND
  case $NAME in 
    "w") WFLAG="w";;
    "d") DFLAG="d";;
    "s") SFLAG="s";;
    "n") NFLAG="n";;
    "y") YFLAG="y";;
  esac
done
#echo "$# ${#WFLAG}"
if [ $((${#WFLAG} + ${#DFLAG} + ${#SFLAG}+ ${#NFLAG} + ${#YFLAG})) -gt 0 ]; then
  shift
fi
FLAGS="$WFLAG$DFLAG$SFLAG$NFLAG$YFLAG"
#echo $FLAGS
case $# in
    0) echo "Usage:"
       echo "    wx options <zipcode>"
       echo "  or" 
       echo "    wx options <city>,  <state>"
       echo "    where options are:"
       echo "    -w wind a dnwindchill"
       echo "    -d dewpoint and humidity"
       echo "    -s sunrise and sunset"
       echo "    -n normal high and low temp"
       echo "    -y yesterday\'s temps and degree days"
       echo "Example:  wx -dws boston, ma" 
       
       exit;;
    1) query=$1;;
    2) query=${1/%,}%2C+$2\";;
    3) query=${1}+${2/%,}%2C+$3\";;
esac
lynx -dump  http://braille.wunderground.com/cgi-bin/findweather/getForecast?query=${query}|\
awk -v flags=$FLAGS ' \
BEGIN {
  wflag = index(flags, "w")
  dflag = index(flags, "d")
  sflag = index(flags, "s")
  nflag = index(flags, "n")
  yflag = index(flags, "y")
  #print sflag
}
/^ *Observed/ { line = ""
               #print NF    
               sub(" *" $1 " +" $2 " +", "")
               line = line  $0 
               gsub(/,/, "", line)
               gsub(/$/, ",", line)
              } 
/^ *Temperature/ {t = $2
    #print NF  
    sub(/..$/, "", t)
    line = line " " t  
    }
/^ *Conditions/ {
           #print NF
           sub(" *" $1 " +", "")
           line = line " " $0
         }
/^ *Windchill/ {
  if (wflag > 0) {
    t = $2
    sub(/..$/, "", t)
    wline = $1 " " t
  }
}
/^ *Wind/ {
  if (wflag > 0) {
    direction = $2
    gsub(/N/, "North", direction)
    gsub(/E/, "East", direction)
    gsub(/S/, "South", direction)
    gsub(/W/, "West", direction)
    wline1 = $1 " " direction " " $3 " " $4 " " $5
  }
}
/^ *Dew/ {
  if (dflag > 0) {
    t = $3
    sub(/..$/, "", t)
    dline = $1 " " $2 " " t
  }
}
/^ *Humidity/ {
  if (dflag > 0) {
    dline1 = $1 " " $2
  }
}
/^ *Sunrise/ {
  if (sflag > 0) {
    sline = $1 " " $2 " " $3
  }
}
/^ *Sunset/ {
  if (sflag > 0) {
    sline1 = $1 " " $2 " " $3
  }
}
/^ *Normal high/ {
  if (nflag > 0) {
    t = $3
    sub(/..$/, "", t)
    nline1 = $1 " " $2 " " t
  }
}
/^ *Normal low/ {
  if (nflag > 0) {
    t = $3
    sub(/..$/, "", t)
    nline2 = $1 " " $2 " " t
  }
}
/^ *Record high/ {
  if (nflag > 0) {
    t = $3
    sub(/..$/, "", t)
    nline3 = $1 " " $2 " " t " in " $5
  }
}
/^ *Record low/ {
  if (nflag > 0) {
    t = $3
    sub(/..$/, "", t)
    nline4 = $1 " " $2 " " t " in " $5
  }
}
/^ *Yesterday.. Maximum/ {
  if (yflag > 0) {
    t = $3
    sub(/..$/, "", t)
    yline1 = $1 " " $2 " " t
  }
}
/^ *Yesterday.. Minimum/ {
  if (yflag > 0) {
    t = $3
    sub(/..$/, "", t)
    yline2 = $1 " " $2 " " t
  }
}
/^ *Yesterday.. Heating/ {
  if (yflag > 0) {
    yline3 = $0
  }
}
/^ *Yesterday.. Cooling/ {
  if (yflag > 0) {
    yline4 = $0
  }
}
END {
  print line 
  if (wflag > 0) { print wline1; print wline }
  if (dflag > 0) { print dline; print dline1 }
  if (sflag > 0) { print sline; print sline1 }
  if (nflag > 0) { print nline1; print nline2; print nline3; print nline4 }
  if (yflag > 0) {
    print yline1
    print yline2
    print yline3
    print yline4
  }
}' 

- ---end here---

- -- 
Raul A. Gallegos - http://www.asmodean.net
All outgoing E-Mail is PGP-signed so that you know it really came from
me and not a virus.  Public key at: http://asmodean.net/raul-pgp.asc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFA0Knlas0vKmIuNMcRApTBAKCPrgZ/FIHCuXOWE8959+Df+y5QMwCgwczw
kKqbPowNwhlHK6uhDJTLUT8=
=g+ks
-----END PGP SIGNATURE-----




More information about the Speakup mailing list