diff options
Diffstat (limited to 'example/weather')
-rwxr-xr-x | example/weather | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/example/weather b/example/weather new file mode 100755 index 0000000..4bd0e1b --- /dev/null +++ b/example/weather @@ -0,0 +1,81 @@ +#!/bin/sh +# -*- tcl -*- +# The next line is executed by /bin/sh, but not tcl \ +exec tclsh "$0" ${1+"$@"} + +package require Expect + + +# weather - Expect script to get the weather (courtesy University of Michigan) +# Don Libes +# Version 1.10 + +# local weather is retrieved if no argument +# argument is the National Weather Service designation for an area +# I.e., WBC = Washington DC (oh yeah, that's obvious) + +# Notes from Larry Virden <lvirden@yahoo.com> about the new host, +# rainmaker.wunderground.com: "[the] new site requires the +# machine doing the request be located in reverse dns lookup +# or it refuses to provide data." This appears to be a blind error +# condition on the part of rainmaker. + +exp_version -exit 5.0 + +if {$argc>0} {set code $argv} else {set code "WBC"} + +proc timedout {} { + send_user "Weather server timed out. Try again later when weather server is not so busy.\n" + exit 1 +} + +set timeout 60 + +set env(TERM) vt100 ;# actual value doesn't matter, just has to be set + +spawn telnet rainmaker.wunderground.com 3000 +while {1} { + expect timeout { + send_user "failed to contact weather server\n" + exit + } "Press Return to continue*" { + # this prompt used sometimes, eg, upon opening connection + send "\r" + } "Press Return for menu*" { + # this prompt used sometimes, eg, upon opening connection + send "\r" + } "M to display main menu*" { + # sometimes ask this if there is a weather watch in effect + send "M\r" + } "Change scrolling to screen*Selection:" { + break + } eof { + send_user "failed to telnet to weather server\n" + exit + } +} +send "C\r" +expect timeout timedout "Selection:" +send "4\r" +expect timeout timedout "Selection:" +send "1\r" +expect timeout timedout "Selection:" +send "1\r" +expect timeout timedout "city code:" +send "$code\r" +expect $code ;# discard this + +while {1} { + expect timeout { + timedout + } "Press Return to continue*:*" { + send "\r" + } "Press Return to display statement, M for menu:*" { + send "\r" + } -re "(.*)CITY FORECAST MENU.*Selection:" { + break + } +} + +send "X\r" +expect |