Enigma Bot — File Browser

EnigmaBotv1.4 / EnigmaBotv1.4 / Enigma versione1_4 / Addons / meteo.mrc

meteo.mrc — 7.61 KB — Download this file

alias html { var %x | var %i | %i = $regsub($1-,/(^[^<]*>|<[^>]*>|<[^>]*$)/g,$null,%x) | %x = $remove(%x, ) | return %x }
;È un alias che ci permette di filtrare testi/parole/url sulle righe html. Si usa nella forma $html(riga)

on *:text:!meteo *:%canalemeteo: {
  set %chan.meteo $chan
  meteo $2-
  .timerchiudisock 1 15 /SOCKCLOSE meteo
}
alias meteo {
  if ($sock(meteo)) || ($sock(meteo2)) { /msg %chan.meteo —]0,12Meteo[— È gia in corso una ricerca, aspettare i risultati. | halt }
  ;Controlla se è ancora aperta la connessione socks del meteo
  unset %meteo*
  set %meteo.ticks $ticks
  set %meteo.find $replace($1-,$chr(32),$chr(43))
  ;Abbiamo settato le variabili per la durata della ricerca (ticks) e per il comune da trovare, se eventualmente il comune ha più parole trasformiamo gli spazi in un +
  sockopen meteo meteo.ansa.it 80
  ;Apriamo la connessione al sito http://meteo.ansa.it tramite la porta 80
}
on 1:SOCKOPEN:meteo: {
  if ($sockerr > 0) return
  sockwrite -n meteo $eval(GET http://meteo.ansa.it/ricerca.asp?cerca=,0) $+ %meteo.find
  ;Mandiamo ulteriori informazioni al sito: il comando ricerca e da trovare il comune desiderato
}
on 1:SOCKCLOSE:meteo: { return }
on 1:SOCKREAD:meteo: {
  if ($sockerr > 0) return
  :meteo
  sockread %meteo.temp
  if ($sockbr == 0) return
  if (Nessun Comune isin %meteo.temp) {
    /msg %chan.meteo —]0,12Meteo[— $upper($left($replace(%meteo.find,+,$chr(32)),1)) $+ $right($replace(%meteo.find,+,$chr(32)),$calc($len($replace(%meteo.find,+,$c hr(32))) -1)) $+ : comune inesistente. [ $+ $calc(($ticks - %meteo.ticks) / 1000) $+ secs.]
    unset %meteo* | sockclose meteo | return
    ;Se il comune è inesistente lo script finisce e si ferma qua
  }
  if (Location: isin %meteo.temp) {
    set %meteo.url $remove(%meteo.temp,$gettok(%meteo.temp,1,32),$chr(32))
    sockopen meteo2 meteo.ansa.it 80 | sockclose meteo | return
    ;Il sito usa un relink per le pagine riguardanti i comuni: ogni regione/comune ha un numero
    ;e per trarre le informazioni sul meteo bisogna prima sapere il numero identificativo del comune 
    ;e della regione.
  }
  if ($replace(%meteo.find,+,$chr(32)) isin %meteo.temp) && ($gettok(%meteo.temp,1-3,32) == <td HEIGHT="20" BGCOLOR="#F0F1F2"><a) {
    set %meteo.url $remove(%meteo.temp,$gettok(%meteo.temp,1-3,32),$gettok(%meteo.temp,5-,32),H REF=",amp;,&Tur=",$chr(32))
    sockopen meteo2 meteo.ansa.it 80 | sockclose meteo | return
    ;Alcuni comuni hanno un nome o una parte in comune, e quindi il sito ci mostra la lista di tutti i
    ;comuni che possono corrispondere alla ricerca.
    ;Perciò noi prendiamo il comune in cima alla lista,
    ;identifichiamo il numero corrispondente al nome e alla regione e apriamo la "vera" ricerca sul
    ;comune
  }
  goto meteo
  ;Ritorniamo al :meteo finchè non abbiamo avuto le informazioni necessarie
}
on 1:SOCKOPEN:meteo2: {
  if ($sockerr > 0) return
  sockwrite -n meteo2 $eval(GET http://meteo.ansa.it/Regione.asp?,0) $+ $remove(%meteo.url,Regione.asp?)
  ;Mandiamo ulteriori informazioni al sito, con il numero della regione e del comune
}
on 1:SOCKCLOSE:meteo2: { return }
on 1:SOCKREAD:meteo2: {
  if ($sockerr > 0) return
  :meteo2
  sockread %meteo.temp
  if ($sockbr == 0) return
  if (<td colspan="4"><font color="#FFFFFF"><small><small>&nbsp; isin %meteo.temp) && (</small></small></font></td><td align="right"><img src="images/smusso.gif" WIDTH="5" HEIGHT="15"> isin %meteo.temp) {
    set %meteo.regione $remove($html(%meteo.temp),&nbsp;)
    goto meteo2
    ;Settiamo nella variabile %meteo.regione il nome della regione del comune
  }
  if ($replace(%meteo.find,+,$chr(32)) isin %meteo.temp) && (<td HEIGHT="20" isin %meteo.temp) && (</a></td> isin %meteo.temp) && (!%meteo.citta) {
    set %meteo.citta $html(%meteo.temp)
    if ($replace(%meteo.find,+,$chr(32)) !isin %meteo.citta) { unset %meteo.citta | goto meteo2 }
    else { set %meteo.comune on | goto meteo2 }
    ;In questo caso controlliamo che il comune selezionato può corrispondere al nome della città che
    ;abbiamo trovato.
    ;Se sì, attiviamo la variabile %meteo.comune per poi attivare tutti i parametri seguenti
    ;(temperatura, tempo etc..)
    ;Se no, cancelliamo la variabile della città e riproviamo un'altra volta con un altro comune della
    ;stessa regione
    ;(può succedere che la stringa html contiene un gruppo di lettere che però non appartiene al
    ;nome della città ma però combacia, per questo bisogna fare questo controllo)
  }
  if (%meteo.comune == on) && ($gettok(%meteo.temp,1-2,32) == <div ALIGN="right"><img) {
    if (%meteo.tempo == $null) {
      set %meteo.tempo $remove(%meteo.temp,$gettok(%meteo.temp,1-3,32),ALT=","></div>)
      set %meteo.comune off
    }
    goto meteo2
    ;Abbiamo settato la variabile riguardante il tempo e disattivato la variabile %meteo.comune per
    ;non rischiare che vengono registrati parametri di altri comuni
  }

  if (%meteo.comune == on) && (</div> isin %meteo.temp) {
    inc %meteo.temperatura 1
    if (%meteo.temperatura == 1) { set %meteo.temper $html(%meteo.temp) | goto meteo2 }
    elseif (%meteo.temperatura > 1) && (%meteo.temperatura < 3) {
      set %meteo.temper %meteo.temper $html(%meteo.temp)
      set %meteo.temper , la temperatura e' intorno a  $+ $round($calc( ( $gettok(%meteo.temper,1,32) + $gettok(%meteo.temper,2,32) ) /2 ),1) $+ ° - min $gettok(%meteo.temper,1,32) $+ ° max $gettok(%meteo.temper,2,32) $+ °. | goto meteo2
      ;Tramite la variabile %meteo.temperatura abbiamo potuto controllare e dividere le due

    }
  }
  if (altitudine isin %meteo.temp) {
    set %meteo.alt $gettok($gettok(%meteo.temp,$calc($numtok(%meteo.temp,32) -1) $+ -,32),1,32)
    goto meteo2
  }
  ;Abbiamo settato la variabile riguardante l'altitudine del comune rispetto al livello del mare
  if (vento isin %meteo.temp) && (%meteo.vento != on) { set %meteo.vento on | goto meteo2 }
  ;Abbiamo attivato la variabile %meteo.vento così che al prossimo ciclo scattino i parametri
  ;seguenti
  if (%meteo.vento == on) && (<br><br> isin %meteo.temp) {
    set %meteo.spira $remove(%meteo.temp,<br><br>) $+ .
    set %meteo.tipovento on
    goto meteo2
    ;Abbiamo settato da dove "tira" il vento, e ora abbiamo attivato anche la variabile
    ;%meteo.tipovento
    ;al prossimo ciclo scatta il parametro seguente
    ;Dobbiamo fare questo procedimento perché la riga html dopo di questa è senza codici e non
    ;possiamo verificare manualmente che cosa contiene
  }
  if (%meteo.tipovento == on) {
    /msg %chan.meteo —]0,12Meteo[— %meteo.regione $+ : $iif($mid(%meteo.citta,1,1) isin aeiou,Ad,A) %meteo.citta $iif(temporale isin %meteo.tempo,c'è il,il tempo è) $lower(%meteo.tempo) $+ %meteo.temper Altitudine media: %meteo.alt $+ m s.l.m. $iif($gettok(%meteo.temp,1,32) = vento,Un,Una) %meteo.temp spira %meteo.spira [ $+ $calc(($ticks - %meteo.ticks) / 1000) $+ secs.]
    unset %meteo* | sockclose meteo2 | return
    ;Finito
  }
  if (</html> isin %meteo.temp) {
    /msg %chan.meteo —]0,12Meteo[— %meteo.regione $+ : $iif($mid(%meteo.citta,1,1) isin aeiou,Ad,A) %meteo.citta $iif(temporale isin %meteo.tempo,c'è il,il tempo è) $lower(%meteo.tempo) $+ %meteo.temper Altitudine media: %meteo.alt $+ m s.l.m. [ $+ $calc(($ticks - %meteo.ticks) / 1000) $+ secs]
    unset %meteo* | sockclose meteo2 | return
    ;Se il sito non ha il dato del vento riguardante il comune, aspettiamo l'ultimo carattere html
    ;(</html>)
    ;Inseriamo anche variabili che potrebbero essere vuote (come la temperatura) per mancanza
    ;del dato da parte del sito
  }
  goto meteo2
}



Per fare la ricerca basta fare: /meteo <comune>