mIRC Home    About    Download    Register    News    Help

Print Thread
Halfway Weather Script #82682 11/05/04 07:38 AM
Joined: May 2004
Posts: 11
R
RockSteady Offline OP
Pikka bird
OP Offline
Pikka bird
R
Joined: May 2004
Posts: 11
Code:
on *:text:!weather *:#: {
  set %zip.code $2
  set %weather.chan $chan
  weather
}
alias weather { write -c E:\weather.txt | write -c E:\weather2.txt | window -eh @Weather | sockopen weather weatherforyou.com 80 | .timer 1 5 reportweather }
on *:sockread:weather: {
  //sockread %weather
  aline 8 @Weather %weather
  write weather.txt %weather
}
on *:sockopen:weather: {
  sockwrite -n $sockname GET /cgi-bin/hw3/hw3.cgi?forecast=zandh&pands= $+ %zip.code $+ &Submit=Get+Forecast HTTP/1.1
  sockwrite -n $sockname Host: weatherforyou.com $+ $crlf $+ $crlf
}
;http://www.weatherforyou.com/cgi-bin/hw3/hw3.cgi?forecast=zandh&pands=55110&Submit=Get+Forecast
alias reportweather {
  filter -wf @Weather E:\weather2.txt *Local Forecast* 
  filter -wf @Weather E:\weather2.txt *°F* 
  filter -wf @Weather E:\weather2.txt *°C*
  .timer 1 1 report2
}
alias report2 {
  var %weather.one = $read(E:\weather2.txt,1)
  var %weather.one = $remove(%weather.one,<span class="titlewhite">)
  var %weather.one = $remove(%weather.one,Local Forecast</span><br>)
  set %weather.City %weather.one
  var %weather.two = $read(E:\weather2.txt,2)
  var %weather.two = $remove(%weather.two,<font face="Verdana)
  var %weather.two = $remove(%weather.two,Arial" size="4"><b>)
  var %weather.two = $remove(%weather.two,</b></font><br>)
  var %weather.two = $replace(%weather.two,°,$chr(176))
  set %weather.temp Current Temp: %weather.two
  var %weather.three = $read(E:\weather2.txt,3)
  var %weather.three = $remove(%weather.three,<)
  var %weather.three = $remove(%weather.three,td align="right" class="smalldefault">)
  var %weather.three = $remove(%weather.three,/td>)
  var %weather.three = $replace(%weather.three,°,$chr(176))
  set %weather.dew Current Dewpoint: %weather.three
  window -c @Weather 
  humidity
}
alias humidity {
  var %a = $lines(E:\weather.txt)
  var %b = 1
  :begin
  var %read = $read(E:\weather.txt, %b)
  if (%b <= %a) {
    if (Humidity isin %read) && (META !isin %read) {
      set %humidity Humidity: $read(E:\weather.txt, $calc(%b + 1))
      set %humidity $remove(%humidity,<td align="right" class="smalldefault">,</td>)
    }
    inc %b
    goto begin
  }
  else { goto end }
  :end
  weathersay
}
alias weathersay {
  msg %weather.chan %weather.City
  msg %weather.chan %weather.temp
  msg %weather.chan %weather.dew
  msg %weather.chan $remove(%humidity,<td align="right" class="smalldefault">,</td>)
}

!weather 55110
OutPuts:
Saint Paul, MN
Current Temp: ,57F
Current Dewpoint: 36F
Humidity: 39%
A: I cant get rid of the comma on the temp, ive tried to do something like hi $+ thevar and tried to tokenize it but /me shrugs.
B: I get a butt load of
-
* /aline: insufficient parameters (line 19, script3.mrc)
-
Not sure how to prevent this.
Also sorry for the side scroll I know I hate it to lol

Re: Halfway Weather Script #82683 12/05/04 05:32 AM
Joined: Mar 2003
Posts: 1,271
L
LocutusofBorg Offline
Hoopy frood
Offline
Hoopy frood
L
Joined: Mar 2003
Posts: 1,271
A: we cannot possible offer any decent advise, so I'll go with indecent -- did you try using $remove(%somevar,$chr(44)).

B: you did a good thing providing the line number where the error occurs, but in line 19 of your code pasted here there is no aline command. It would be nice if next time you would paste the line separately or indicate where it is.
That said, I wil assume the only aline command in your code is the one causing the error. In which case the solution is simple: not everytime the sockread event triggers, does your variable %weather get a value. In that case, your line aline 8 @Weather %weather is interpreted by mIRC as aline 8 @Weather. mIRC will then complain that it is to write something to the window without knowing what, hence the error. The solution is simple:
Code:
if (%weather) aline 8 @Weather %weather


DALnet #Helpdesk
I hear and I forget. I see and I remember. I do and I understand. -Confucius
Re: Halfway Weather Script #82684 12/05/04 08:35 AM
Joined: May 2004
Posts: 11
R
RockSteady Offline OP
Pikka bird
OP Offline
Pikka bird
R
Joined: May 2004
Posts: 11
Cool that did the trick I tried $remove before but for some reason i had a different $chr number. One last question. Im getting
-
* /aline: line too long (line 19, script3.mrc)
-
I know id have to make a loop somehow but not quite sure how to go about that.
EDIT
Correction the if statement cut the aline errors down but I still receive them on the same line number
Code:
  if (%weather) aline 8 @Weather %weather | write weather.txt %weather 

EDIT
Is there a way to just supress these errors?

Last edited by RockSteady; 12/05/04 09:10 AM.
Re: Halfway Weather Script #82685 12/05/04 09:50 AM
Joined: Mar 2003
Posts: 1,271
L
LocutusofBorg Offline
Hoopy frood
Offline
Hoopy frood
L
Joined: Mar 2003
Posts: 1,271
The line-too-long error you mention now is a whole other ballgame from the one before. before, there was no data in the line, now there is too much. Variables are limited in their length to 900-something characters. Anything longer produces this problem. As far as I understand, the only way to get around is to use binary variables to store the stuff you read from the socket. Can't help you there tho.


DALnet #Helpdesk
I hear and I forget. I see and I remember. I do and I understand. -Confucius
Re: Halfway Weather Script #82686 13/05/04 07:09 AM
Joined: May 2004
Posts: 11
R
RockSteady Offline OP
Pikka bird
OP Offline
Pikka bird
R
Joined: May 2004
Posts: 11
Thanks Ill try to poke around that stuff

Re: Halfway Weather Script #82687 15/05/04 12:07 AM
Joined: Aug 2003
Posts: 1,831
I
Iori Offline
Hoopy frood
Offline
Hoopy frood
I
Joined: Aug 2003
Posts: 1,831
You might be better off using bread\bwrite in the sockread and the file handling commands to parse it.
Code:
on *:text:!weather *:#:{
  if $sock(weather) { msg # A weather search is already in progress. | return }
  set %weather.zip $2
  set %weather.chan $chan
  weather
}
alias weather {
  write -c E:\weather.txt
  sockopen weather weatherforyou.com 80
}
on *:sockread:weather:{
  if $sockerr { echo -a * $!sockerr ( $+ $sockname $+ ): $sock($sockname).wsmsg | return }
  sockread -f &weather
  bwrite E:\weather.txt -1 -1 &weather
}
on *:sockclose:weather:{
  if $file(E:\weather.txt) { weather.parse }
}
alias weather.parse {
  var %loc,%tmp,%hum,%dew
  .fopen w E:\weather.txt
  .fseek -w w *was not found*
  if !$feof { msg %weather.chan * Weather: Location $+([,%weather.zip,]) not found. | .fclose w | return }
  else .fseek w 0
  .fseek -w w *Reported at*
  %loc = $gettok($gettok($gettok($fread(w),2,62),1,60),3-,32)
  .fseek -w w *°f*
  %tmp = $replace($gettok($gettok($fread(w),3,62),1,60),°,)
  .fseek -w w *Humidity:* | .echo -q $fread(w)
  %hum = $gettok($gettok($fread(w),2,62),1,60)
  .fseek -w w *Dewpoint* | .echo -q $fread(w)
  %dew = $replace($gettok($gettok($fread(w),2,62),1,60),°,)
  .fclose w
  msg %weather.chan * Weather for %loc Current: %tmp Humidity: %hum Dewpoint: %dew
  unset %weather.*
}
on *:sockopen:weather:{
  if $sockerr { echo -a * $!sockerr ( $+ $sockname $+ ): $sock($sockname).wsmsg | return }
  sockwrite -n $sockname GET /cgi-bin/hw3/hw3.cgi?forecast=zandh&pands= $+ %weather.zip $+ &Submit=Get+Forecast HTTP/1.1
  sockwrite -n $sockname Host: weatherforyou.com $+ $crlf $+ $crlf
}

Re: Halfway Weather Script #82688 18/05/04 11:31 AM
Joined: May 2004
Posts: 11
R
RockSteady Offline OP
Pikka bird
OP Offline
Pikka bird
R
Joined: May 2004
Posts: 11
Dude thanks now I can use this to help solve my other problems
EDIT
Hmm its a bit laggy any clue how to sped it up i noticed its all bwrites is it just b/c of that?

Last edited by RockSteady; 18/05/04 11:37 AM.