# This script is only for United States weather, based on zip code to use try # the following commands: # # !weather zipcode # # This returns current weather as reported on weather.com # # !forecast zipcode # # This retures the current extended forecast for 6 days (including current) # as reported on weather.com # # # This script was originally written as an addon for another bot, that uses ! # as it's trigger. # # # Revision 08.26.03 - No longer requires Geo::Weather Module to run # # Originally Created On 08.04.03 # use Irssi; $VERSION = "1.1"; %IRSSI = ( author => 'PrincessLeia2', contact => 'lyz\@princessleia.com ', name => 'weatherbot', description => 'a US weatherbot that provides weather and forecast based on zip code', license => 'GNU GPL v2 or later', url => 'http://www.princessleia.com' ); sub event_privmsg { my ($server, $data) =@_; my ($target, $text) = $data =~ /^(\S*)\s:(.*)/; return if ( $text !~ /^!/i ); if ( $text =~ /^!weather /i ) { my ($zip) = $text =~ /!weather (.*)/; `wget -q http://www.w3.weather.com/outlook/driving/local/$zip`; $pagehere = `grep "Sorry, the page you requested was not found on weather.com." $zip`; $error = "<FONT CLASS=\"errorText\">Sorry, the page you requested was not found on weather.com.</FONT><BR>"; if ($pagehere =~ /.*$error/){ $server->command ( "msg $target Sorry, no weather available for your location, please type !weather zipcode"); } else { $onelocation = `grep '<TR><TD WIDTH="100%" CLASS="titleBar"><B>' $zip`; $onecondition = `grep obsInfo2 $zip`; my @location = split(/\n/, $onelocation); my @condtions = split(/<\/TD>\n/, $onecondition); my ($space, $place) = $location[3] =~ /(.*)<TR><TD WIDTH="100%" CLASS="titleBar"><B>Your (.*) ...<\/B><\/TD><\/TR>/; my ($temperature) = $condtions[0] =~ /<TD VALIGN=MIDDLE ALIGN=CENTER CLASS=obsInfo2 WIDTH=50%><B CLASS=obsTempTextA>(.*)°F<\/B>/; my ($condition) = $condtions[1] =~ /<TD VALIGN=TOP ALIGN=CENTER CLASS=obsInfo2><B CLASS=obsTextA>(.*)<\/B>/; my ($humidity) = $condtions[5] =~ /<TD ALIGN=LEFT VALIGN=TOP CLASS=obsInfo2>(.*)/; my ($barometer) = $condtions[7] =~ / <TD ALIGN=LEFT VALIGN=TOP CLASS=obsInfo2>(.*)/; my ($teat) = $condtions[8] =~ /(.*)/; $server->command ( "msg $target \002Current Conditions for $place :\002 $condition \002Temp:\002 $temperature F \002Humidity:\002 $humidity \002Barometer:\002 $barometer"); } `rm $zip` } elsif ($text =~ /^!forcast/i ) { $server->command ( "msg $target Learn to SPELL!!! use !forecast zipcode" ); } elsif ( $text =~ /^!forecast/i ) { my ($zip) = $text =~ /!forecast (.*)/; `wget -q http://www.w3.weather.com/outlook/driving/local/$zip`; $pagehere = `grep "Sorry, the page you requested was not found on weather.com." $zip`; $error = "<FONT CLASS=\"errorText\">Sorry, the page you requested was not found on weather.com.</FONT><BR>"; if ($pagehere =~ /.*$error/){ $server->command ( "msg $target Sorry, no forecast available for your location, please type !forecast zipcode"); } else { `wget -q http://www.w3.weather.com/outlook/driving/local/$zip`; $oneday = `grep inDentWhite10DayA11 $zip`; $twoday = `grep inDentBlue10DayB11 $zip`; $onefore = `grep inDentWhite10DayA5 $zip`; $twofore = `grep inDentBlue10DayB5 $zip`; $onelocation = `grep '<TR><TD WIDTH="100%" CLASS="titleBar"><B>' $zip`; my @day1 = split(/<\/TD>\n/, $oneday); my @day2 = split(/<\/TD>\n/, $twoday); my @fore1 = split(/<\/TD>\n/, $onefore); my @fore2 = split(/<\/TD>\n/, $twofore); my @location = split(/\n/, $onelocation); my ($next0, $date0) = $day1[0] =~ /<TD CLASS=inDentWhite10DayA11><A HREF=\/outlook\/driving\/detail\/$zip>(.*)<\/A><BR> (.*)/; my ($next1, $date1) = $day2[0] =~ /<TD CLASS=inDentBlue10DayB11><A HREF=\/outlook\/driving\/detail\/$zip\?dayNum=1>(.*)<\/A><BR> (.*)/; my ($next2, $date2) = $day1[1] =~ /<TD CLASS=inDentWhite10DayA11><A HREF=\/outlook\/driving\/detail\/$zip\?dayNum=2>(.*)<\/A><BR> (.*)/; my ($next3, $date3) = $day2[1] =~ /<TD CLASS=inDentBlue10DayB11><A HREF=\/outlook\/driving\/detail\/$zip\?dayNum=3>(.*)<\/A><BR> (.*)/; my ($next4, $date4) = $day1[2] =~ /<TD CLASS=inDentWhite10DayA11><A HREF=\/outlook\/driving\/detail\/$zip\?dayNum=4>(.*)<\/A><BR> (.*)/; my ($next5, $date5) = $day2[2] =~ /<TD CLASS=inDentBlue10DayB11><A HREF=\/outlook\/driving\/detail\/$zip\?dayNum=5>(.*)<\/A><BR> (.*)/; my ($nextfore0) = $fore1[1] =~ /<TD CLASS=inDentWhite10DayA5>(.*)/; my ($nextfore1) = $fore2[1] =~ /<TD CLASS=inDentBlue10DayB5>(.*)/; my ($nextfore2) = $fore1[5] =~ /<TD CLASS=inDentWhite10DayA5>(.*)/; my ($nextfore3) = $fore2[5] =~ /<TD CLASS=inDentBlue10DayB5>(.*)/; my ($nextfore4) = $fore1[9] =~ /<TD CLASS=inDentWhite10DayA5>(.*)/; my ($nextfore5) = $fore2[9] =~ /<TD CLASS=inDentBlue10DayB5>(.*)/; my ($temp) = $fore1[2] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER><B>(.*)°<\/B><\/DIV>/; if ($temp =~ /.*°\/.*/) { my ($high, $low) = $temp =~ /(.*)°\/(.*)/; $temp = ("$high/$low"); } my ($nexthigh1, $nextlow1) = $fore2[2] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER><B>(.*)°\/(.*)°<\/B><\/DIV>/; my ($nexthigh2, $nextlow2) = $fore1[6] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER><B>(.*)°\/(.*)°<\/B><\/DIV>/; my ($nexthigh3, $nextlow3) = $fore2[6] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER><B>(.*)°\/(.*)°<\/B><\/DIV>/; my ($nexthigh4, $nextlow4) = $fore1[10] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER><B>(.*)°\/(.*)°<\/B><\/DIV>/; my ($nexthigh5, $nextlow5) = $fore2[10] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER><B>(.*)°\/(.*)°<\/B><\/DIV>/; my ($nextpop0) = $fore1[3] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($nextpop1) = $fore2[3] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($nextpop2) = $fore1[7] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($nextpop3) = $fore2[7] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($nextpop4) = $fore1[11] =~ /<TD CLASS=inDentWhite10DayA5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($nextpop5) = $fore2[11] =~ /<TD CLASS=inDentBlue10DayB5><DIV ALIGN=CENTER>(.*)<\/DIV>/; my ($space, $place) = $location[3] =~ /(.*)<TR><TD WIDTH="100%" CLASS="titleBar"><B>Your (.*) ...<\/B><\/TD><\/TR>/; $return = ("\002Forecast for $place : $next0 $date0\002 $nextfore0 Temp: $temp POP: $nextpop0 \002$next1 $date1\002 $nextfore1 Temp: $nexthigh1/$nextlow1 POP: $nextpop1 \002$next2 $date2\002 $nextfore2 Temp: $nexthigh2/$nextlow2 POP: $nextpop2 \002$next3 $date3\002 $nextfore3 Temp: $nexthigh3/$nextlow3 POP: $nextpop3 \002$next4 $date4\002 $nextfore4 Temp: $nexthigh4/$nextlow4 POP: $nextpop4 \002$next5 $date5\002 $nextfore5 Temp: $nexthigh5/$nextlow5 POP: $nextpop5"); $server->command ( "msg $target $return"); `rm $zip`; } } } Irssi::signal_add('event privmsg', 'event_privmsg');