Skip to content
TG007 community snippet #78

Current Temp/Weather

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

By err0r Added Jan 7, 2016 Updated Apr 3, 2016
Buzzen All snippets
mIRC script 75 lines
About this snippet

Overview

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
Source code

mIRC script

75 lines · 3,371 characters
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 }
}
Community

Comments

Want to join the discussion? Sign in to TG007.
err0rSunday, 3 April, 2016
updated 04/03/16
PaigeMonday, 25 January, 2016
ooops, sorry errOr, wrong snippet! i meant to say the buzzen "show profile on join " is'nt working for me.
err0rSaturday, 23 January, 2016
doesn't return any information? or wrong information?
PaigeSaturday, 23 January, 2016
It dont seem to work for mee, does anyone else have the same problem?