Meteo
Meteo
- Code:
# Meteo[queW] 0.3
# Cree le 09/04/2006
# Modifie la derniere fois le 15/04/2006
# !meteo affiche la meteo sur Paris-Montsouris
# !meteo XXXX affiche la meteo pour la ville/code postal
# !aide affiche l'aide
#
# by BaroqueW
#
# 0.1 : affichage températures, prévisions, fonction de recherche "un seul mot"
# 0.2 : ajout de l'aide, gestion des villes inconnues, gestion des noms de ville avec apastrophe et espaces
# 0.3 : fonction de recherche multi mots avec gestion des "-[]()' et autres espaces, ajout du dtcmode, ajout du mode debug
package require http
bind pub - !meteo pub:meteo
bind pub - !aide pub:aide
#0 n'affiche pas l'aide sur !aide et !help, 1 affiche l'aide
set affiche_aide 1
#0 pas de message spécifique sur !meteo XXX (XXX appartenant à dtcmatches), 1 mode cdtc (ie on répond dtcmessage à !meteo XXX)
set dtcmode 1
set dtcmessage "Il fait chaud et humide dtc !"
set dtcmatches {"dtc" "dans ton cul"}
#choisir où sera affichée la meteo
#1 -> sera affiché sur cette fenetre, 0 -> ne sera pas affiché sur cette fenetre
set chanpublic 0
set notice 0
set query 1
set agent "Mozilla"
#code par défaut du lieu renvoyé par !meteo
#FR75056 : Paris XIIIème
set IDDefault FR75056
#1 -> affiche les print de debug, 0 -> ne les affiche pas
set debug 0
proc print { nick channel message} {
global chanpublic
global notice
global query
if { ($chanpublic == 1) && ($query == 0) && ($notice == 0) } {
putserv "PRIVMSG $channel :$message"
} elseif { ($chanpublic == 0) && ($query == 1) && ($notice == 0) } {
putserv "PRIVMSG $nick :$message"
} elseif { ($chanpublic == 0) && ($query == 0) && ($notice == 1) } {
putserv "NOTICE $nick :$message"
}
}
proc printdebug { nick channel message} {
global chanpublic
global notice
global query
global debug
if {($debug == 1)} {
if { ($chanpublic == 1) && ($query == 0) && ($notice == 0) } {
putserv "PRIVMSG $channel :$message"
} elseif { ($chanpublic == 0) && ($query == 1) && ($notice == 0) } {
putserv "PRIVMSG $nick :$message"
} elseif { ($chanpublic == 0) && ($query == 0) && ($notice == 1) } {
putserv "NOTICE $nick :$message"
}
}
}
proc pub:aide { nick uhost handle channel arg } {
global affiche_aide
if { ($affiche_aide == 1) } {
print $nick $channel "!meteo pour avoir la météo sur Paris XIIIème"
print $nick $channel "!meteo code_postal ou !meteo ville pour rechercher la météo d'un autre endroit"
print $nick $channel "Données fournies par Meteo France"
}
}
proc parse {nick channel query} {
global agent
set token [http::config -useragent $agent]
set token [http::geturl $query]
puts stderr ""
set htmlFile [http::data $token]
#recupere le nom de la ville
set searchville [regexp -nocase {visions ville: ([a-zâêîéàçèïë �-9;]*)} $htmlFile ville villenom]
regsub -all {'} $villenom "'" villenom
print $nick $channel "Meteo à $villenom"
#recupere toutes les temperatures
set search [regexp -nocase -all -inline {[0-9]*°} $htmlFile]
#affiche les min/max de la journee
set tempmin [lindex $search 0]
regexp -nocase {([0-9]*)°} $tempmin valuemin tempmin
set tempmax [lindex $search 1]
regexp -nocase {([0-9]*)°} $tempmax valuemax tempmax
print $nick $channel "Aujourd'hui : température minimale $tempmin°/maximale $tempmax°"
#recupere les prochaines temperatures
set temp1 [lindex $search 2]
regexp -nocase {([0-9]*)°} $temp1 value1 temp1
set temp2 [lindex $search 3]
regexp -nocase {([0-9]*)°} $temp2 value2 temp2
set temp3 [lindex $search 4]
regexp -nocase {([0-9]*)°} $temp3 value3 temp3
set temp4 [lindex $search 5]
regexp -nocase {([0-9]*)°} $temp4 value4 temp4
#recupere la description meteo (nuageux etc.)
set weathers [regexp -all -nocase -inline {showAlt['()a-zàâéêèçùîô, ]*,false} $htmlFile]
set weather1 [lindex $weathers 0]
regexp -nocase {'([a-zàâéêèçùîô, ]*)'} $weather1 buffer weather1
set weather2 [lindex $weathers 1]
regexp -nocase {'([a-zàâéêèçùîô, ]*)'} $weather2 buffer weather2
set weather3 [lindex $weathers 2]
regexp -nocase {'([a-zàâéêèçùîô, ]*)'} $weather3 buffer weather3
set weather4 [lindex $weathers 3]
regexp -nocase {'([a-zàâéêèçùîô, ]*)'} $weather4 buffer weather4
set secondes [clock seconds]
set heure [clock format $secondes -format %H]
#affiche tout
if {($heure < 8)} {
print $nick $channel "Aujourd'hui à 8h : $temp1° - $weather1"
print $nick $channel "Aujourd'hui à 14h : $temp2° - $weather2"
print $nick $channel "Aujourd'hui à 20h : $temp3° - $weather3"
print $nick $channel "Demain à 8h : $temp4° - $weather4"
} elseif {($heure > 7) && ($heure < 14)} {
print $nick $channel "Aujourd'hui à 14h : $temp1° - $weather1"
print $nick $channel "Aujourd'hui à 20h : $temp2° - $weather2"
print $nick $channel "Demain à 8h : $temp3° - $weather3"
print $nick $channel "Demain à 14h : $temp4° - $weather4"
} elseif {($heure > 13) && ($heure < 20)} {
print $nick $channel "Aujourd'hui à 20h : $temp1° - $weather1"
print $nick $channel "Demain à 8h : $temp2° - $weather2"
print $nick $channel "Demain à 14h : $temp3° - $weather3"
print $nick $channel "Demain à 20h : $temp4° - $weather4"
} elseif {($heure > 19)} {
print $nick $channel "Demain à 8h : $temp1° - $weather1"
print $nick $channel "Demain à 14h : $temp2° - $weather2"
print $nick $channel "Demain à 20h : $temp3° - $weather3"
print $nick $channel "Après-demain à 2h : $temp4° - $weather4"
}
}
proc aplatir { vect } {
#si on a un code postal, pas de traitement
set first [lindex $vect 0]
set iscodepostal [regexp {[0-9][0-9][0-9][0-9][0-9]} $first codepostal]
if {([llength vect] == 1) && ($iscodepostal == 1)} {
set aplat $first
} else {
#traitement standard
set space "%20"
#on merge tous les arguments avec des %20 entre chaque (ie un espace)
set aplat [join $vect $space]
#on vire tous les chiffres puisque ce n'est pas un code postal
regsub -all {[0-9]} $aplat "" aplat
#on vire tous les "- et les espaces et on met un %20 à leur place
regsub -all {[ "-]+} $aplat $space aplat
#on remplace les apostrophes par leur code HTML (%27)
regsub -all {\'} $aplat "%27" aplat
#au cas où, on vire les parenthèses, crochets et accolades et on les remplace par des espaces (%20)
set setbrackets {\[|\]|\(|\)|\{|\}}
regsub -all $setbrackets+ $aplat $space aplat
#on supprime les "%20" à répétition
set aplat [split $aplat $space]
set buffer {}
foreach word $aplat {
if { ( $word != $space ) && ( $word != "" ) } {
lappend buffer $word
}
}
set aplat [join $buffer $space]
#petite feinte
regsub {%207} $aplat "%27" aplat
}
#dans tous les cas, on retourne aplat
return $aplat
}
proc pub:meteo { nick uhost handle channel arg } {
global dtcmode
global agent
global IDDefault
global dtcmessage
global dtcmatches
set ID $IDDefault
if {[llength $arg] == 0} {
#par defaut : Paris Montsouris
set query "http://www.meteofrance.com/FR/mameteo/prevVille.jsp?LIEUID=$ID"
parse $nick $channel $query
#si il y a des arguments
} else {
#chercher la premiere ville correspondante
set ville [aplatir $arg]
printdebug $nick $channel $ville
#vérifier le dtc mode
regsub -all {%20} $ville " " villedtc
printdebug $nick $channel $villedtc
set dtctest [lsearch -exact $dtcmatches $villedtc]
if { ($dtctest >= 0) && ($dtcmode == 1) } {
print $nick channel $dtcmessage
} else {
set pagesearch [http::config -useragent $agent]
set urlsearch "http://www.meteofrance.com/FR/mameteo/resultatRechercheLieu.jsp?VUE=PrevisionVilleGP&LIEU=$ville"
set pagesearch [http::geturl $urlsearch]
puts stderr ""
set searchresult [http::data $pagesearch]
set rechercheville [regexp {FR[0-9][0-9][0-9][0-9][0-9]} $searchresult ID]
if {($rechercheville != 0)} {
set query "http://www.meteofrance.com/FR/mameteo/prevVille.jsp?LIEUID=$ID"
parse $nick $channel $query
} else {
set query "http://www.meteofrance.com/FR/mameteo/resultatRechercheLieu.jsp?VUE=PrevisionVilleGP&LIEU=$ville"
set token [http::config -useragent $agent]
set token [http::geturl $query]
puts stderr ""
upvar #0 $token state
regexp -nocase {jsessionid=([a-z=?.0-9]*=FR[0-9]*)} $state(meta) buffer buffer2
if { [info exists buffer2] } {
set query "http://www.meteofrance.com/FR/mameteo/prevVille.jsp;jsessionid=$buffer2"
parse $nick $channel $query
} else {
print $nick $channel "La ville ou le code postal demandés (ie. $ville) n'ont pas été trouvés"
}
}
}
}
}
putlog "Meteo\[queW\] 0.3 - LOADED!"
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|