Scripting
Bonjour / Bonsoir,

Bienvenue sur ce forum.

Merci, de vous connectez si vous ne l'êtes pas.

Merci, de vous enregistrez si vous ne l'êtes pas. Ceci prend même pas une minute.

Cordialement,

Dylan

Rejoignez le forum, c’est rapide et facile

Scripting
Bonjour / Bonsoir,

Bienvenue sur ce forum.

Merci, de vous connectez si vous ne l'êtes pas.

Merci, de vous enregistrez si vous ne l'êtes pas. Ceci prend même pas une minute.

Cordialement,

Dylan
Scripting
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-20%
Le deal à ne pas rater :
-200€ Smart TV LG 65″ 4K QNED MiniLED
799 € 999 €
Voir le deal

Meteo

Aller en bas

Meteo Empty Meteo

Message  Dylan Mar 29 Déc - 4:58

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âêîéàçèïë &#0-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!"
Dylan
Dylan
Administrateur

Messages : 221
Date d'inscription : 23/11/2009
Age : 29
Localisation : Chez moi ...

https://scripting.forumactif.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum