Register
tglogo.png
thumbblank.png 1 LIKES

Snippet

Current Temp/Weather
posted by err0r in Buzzen - 01/07/16
Simple !w command to get weather. ie: !w 38851, !w washington dc If your default temp is supposed to be in Celsius then go to set %weatherw.m F and change the F to C
on *:start:{
  hmake weather 50 | if ($exists($qt($mircdirdata\weatherhash.txt))) { hload weather $qt($mircdirdata\weatherhash.txt) } 
}
alias baddy {
  var %n $numtok($ial($1).user,46)
  if (%n isnum 1-3) { return $gettok($ial($1).user,%n,46) }
  else { return $ial($1).user }
}
alias bstripstyle { return $strip($regsubex($1-, /\[(?:style\x20.*?|/style)\]/gi,$null)) }
on *:text:*!w*:#: {
  tokenize 32 $bstripstyle($1-)
  if ($1 == !w) && (!%ontext.flood.ck) {
    set -u3 %ontext.flood.ck on
    if (!$2-) && (!$hget(weather,$baddy($nick))) { msg $chan Sorry $nick there is no weather infomation saved for you. Please use !w <location/zip> | halt }
    if (!$2-) && ($hget(weather,$baddy($nick))) { set %weather.search $hget(weather,$baddy($nick)) }
    if ($2-) { 
      set %weather.search $replace($2-,$chr(32),+)
      hadd -m weather $baddy($nick) $replace($2-,$chr(32),+)
    }
    hsave -o weather $qt($mircdirdata\weatherhash.txt) | set %weather.chan $chan | getweatherw
  }
}


;==== WEATHER ================================================================
alias getweatherw { sockclose weatherw | unset %wcheck | set %weatherw.check 1 | sockopen -e weatherw www.wunderground.com 443 }
on *:sockopen:weatherw:{
  if ($sockerr) { sockclose $sockname | halt }
  sockwrite -n $sockname GET /cgi-bin/findweather/hdfForecast?query= $+ $replace(%weather.search,$chr(32),+,$chr(44),$chr(37) $+ 2C) HTTP/1.1
  sockwrite -n $sockname User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0)
  sockwrite -n $sockname HOST: www.wunderground.com
  sockwrite -n $sockname CONNECTION: Keep-alive
  sockwrite -n $sockname $str($crlf,2)
}
on *:sockread:weatherw: {
  ;;;; Set the below variable to C for Celsius or F for Fahrenheit You can visit wunderground.com to see which it uses for you.
  set %weatherw.m F
  if ($sockerr > 0) return
  var %weatherw
  sockread -fn %weatherw
  if ($regex(%weatherw,/<td><a href="(.*?)" title="(.*?)">(.*?)</a><\/td>/)) {
    set %weatherw.place $regml(3)
    set %wcheck 1
  }
  if (%wcheck == 1) && ($regex(%weatherw,/<span class=\"wx-data\"><span class=\"wx-value\">(.*?)<\/span><span class=\"wx-unit\">(.*?)<\/span>/)) {
    set %weatherw.temp $regml(1) $+ %weatherw.m
    set %weatherw.tempc $converttempw(%weatherw.temp)
    set %wcheck 2
  }
  if (%wcheck == 3) {
    set %weatherw.type %weatherw
    unset %wcheck
    sockclose $sockname
    sockwrite -n sock.server privmsg %weather.chan :[ %weatherw.place ] Currently %weatherw.temp / %weatherw.tempc %weatherw.type 
    unset weatherw.*
  }
  if (%wcheck == 2) && ($regex(%weatherw,/<td>/)) {
    set %wcheck 3
  }
  if ($regex(%weatherw,/<meta property=\"og:title\" content=\"(.*?)\" \/>/)) { 
    set %weatherw.ck $regml(1)
    set %weatherw.place $gettok(%weatherw.ck,1,124)
    set %weatherw.temp $replace($gettok(%weatherw.ck,2,124),°,%weatherw.m)
    set %weatherw.tempc $converttempw(%weatherw.temp)
    set %weatherw.type $gettok(%weatherw.ck,3,124)
    sockclose $sockname 
    msg %weather.chan $chr(91) %weatherw.place $chr(93) Currently %weatherw.temp / %weatherw.tempc %weatherw.type 
    unset %weatherw.*
  }
}  
alias converttempw {
  if ($right($1,1) == f) { return $round($calc((($remove($1,f) - 32) * 5) / 9),1) $+ C } 
  else { return $round($calc(($remove($1,c) * 1.8) + 32),1) $+ F }
}


4 Comments
You must be logged in to comment.
Paige - Saturday, 23 January, 2016
It dont seem to work for mee, does anyone else have the same problem?
err0r - Sunday, 24 January, 2016
doesn't return any information? or wrong information?
Paige - Monday, 25 January, 2016
ooops, sorry errOr, wrong snippet! i meant to say the buzzen "show profile on join " is'nt working for me.
err0r - Monday, 4 April, 2016
updated 04/03/16