All pastes #110289 Raw Edit

Anonymous

public html v1 · immutable
·published 2006-08-01 14:47 UTC
rendered paste body
# 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 debugpackage require httpbind pub - !meteo pub:meteobind pub - !aide pub:aide#0 n'affiche pas l'aide sur !aide et !help, 1 affiche l'aideset 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 1set 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 fenetreset chanpublic 0set notice 1set query 0set agent "Mozilla"#code par défaut du lieu renvoyé par !meteo#FR75056 : Paris XIIIèmeset IDDefault FR75056#1 -> affiche les print de debug, 0 -> ne les affiche passet debug 0proc 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 debugif {($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âêîéàçèïë &#0-9;]*)} $htmlFile ville villenom]			regsub -all {&#39;} $villenom "'" villenom		print $nick $channel "Meteo à $villenom"				#recupere toutes les temperatures			set search [regexp -nocase -all -inline {[0-9]*&deg;} $htmlFile]		#affiche les min/max de la journee			set tempmin [lindex $search 0]			regexp -nocase {([0-9]*)&deg;} $tempmin valuemin tempmin			set tempmax [lindex $search 1]			regexp -nocase {([0-9]*)&deg;} $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]*)&deg;} $temp1 value1 temp1		set temp2 [lindex $search 3]			regexp -nocase {([0-9]*)&deg;} $temp2 value2 temp2		set temp3 [lindex $search 4]			regexp -nocase {([0-9]*)&deg;} $temp3 value3 temp3					set temp4 [lindex $search 5]			regexp -nocase {([0-9]*)&deg;} $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 traitementset 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!"