Tcl de recherche google Googlesearch.tcl
#1
Voici un code assez basique que je viens de développer.

Vous pouvez me faire part de vos suggestions, améliorations etc.

TCL
#############
## GNU/GPL ##
######################################
# see www.gnu.org/licenses/agpl.txt  #
######################################
 
set ::cmd "!search"
set ::lastcmd "!lastsearch"
set ::author "BlackNight"
set ::version "1.0"
 
set ::chan {
"#ch@os"
"#les-tenebres"
"#la_tour_des_anges"
}
 
bind pub - $::cmd google_search
bind pub - $::lastcmd google_lastsearch
 
proc google_search {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set ::search [join [lrange $arg 0 end] +]
set ::url "http://www.google.fr/search?hl=fr&q=$::search"
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}
 
 
proc google_lastsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
putquick "PRIVMSG $chan :\002\00312La dernière recherche effectuée par\00312\00307 $::unick\00307 \00312est\00312 \00303$::url\00303\002"
}
}
}
 
putlog "GoogleSearch $::version par $::author chargé avec succès"


Répondre Avertir
#2
Sorry pour le double.

Si vous avez des idées de fonctionalitées en plus:
-nom de commande
-description de la commande
- idée globale de fonctionalité supplémentaire

Ou bien sur vous avez des améliorations à me proposer concernant le code, je suis tout ouïe.
Répondre Avertir
#3
Effectivement c'est assez basique, vu que tu ne donnes que la page contenant la recherche :-/

Tu pourrais aussi proposer pour google image, google video, google book etc... Wink
Répondre Avertir
#4
Voici donc la nouvelle version.

TCL
#############
## GNU/GPL ##
######################################
# see www.gnu.org/licenses/agpl.txt  #
######################################
 
set ::cmd "!search"
set ::imgcmd "!images"
set ::vidcmd "!videos"
set ::lastcmd "!lastsearch"
set ::helpcmd "!helpsearch"
set ::author "BlackNight"
set ::scriptver "1.1"
 
set ::vidbase "http://video.google.fr/videosearch?q="
set ::googlebase "http://www.google.fr/search?hl=fr&q="
set ::imgbase "http://images.google.fr/images?hl=fr&q="
 
set ::chan {
"#accueil"
"#les-tenebres"
"#la_tour_des_anges"
}
 
bind pub - $::cmd google_search
bind pub - $::lastcmd google_lastsearch
bind pub - $::imgcmd google_imgsearch
bind pub - $::vidcmd google_vidsearch
bind pub - $::helpcmd google_help
 
 
proc google_search {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set ::search [join [lrange $arg 0 end] +]
set ::url "http://www.google.fr/search?hl=fr&q=$::search"
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}
 
proc google_imgsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set ::search [join [lrange $arg 0 end] +]
set base $::imgbase
set ::url "$base$::search"
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}
 
proc google_vidsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set ::search [join [lrange $arg 0 end] +]
set base $::vidbase
set ::url "$base$::search"
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}
 
proc google_lastsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
putquick "PRIVMSG $chan :\002\00312La dernière recherche effectuée par\00312\00307 $::unick\00307 \00312est\00312 \00303$::url\00303\002"
}
}
}
 
proc google_help {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
putfast "NOTICE $nick :\00312Pour faire une recherche sur google \00313-> \00303$::cmd \00307<votre recherche>\003"
putfast "NOTICE $nick :\00312Pour faire une recherche d'image sur google \00313-> \00303$::imgcmd \00307<votre recherche>\003"
putfast "NOTICE $nick :\00312Pour faire une recherche de vidéo sur google \00313-> \00303$::vidcmd \00307<votre recherche>"
putfast "NOTICE $nick :\00312Cette fonctionalité vous est proposée par \002BlackNight\002"
 
 }
}
}
 
putlog "GoogleSearch $::scriptver par $::author chargé avec succès"





Si vous avez des idées à nouveau, n'hésitez pas à m'en faire part.
Répondre Avertir
#5
bonjour

j'ai tester le tcl mais il me met qu'il peut pas lire ces variable :

Tcl error: can't read "::": no such variable
Gilles
Répondre Avertir
#6
@BlackNight :
définir des variables globales avec des noms aussi peu originaux que $cmd $author $scriptver $url $chan etc... est très risqué. Si un autre script fait de même et utilise des variables du même nom, tu obtiendras des bugs incompréhensibles et des résultats aléatoires.
Utilise un namespace (un article existe à ce sujet dans le wiki) ou au moins choisis des noms de variables uniques tels que $BNG_cmd $BNG_author .... (BNG pour BlackNight Google) afin de réduire les risques de conflit.

-----

Pourquoi faire
TCL
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"


fais directement
TCL
putquick "PRIVMSG $chan :\002\00307$nick \00312votre recherche se trouve sur\00303 $::url \002\003"


puisque tu n'utilises pas $unick ultérieurement

-----

La commande putfast n'est pas une commande Tcl standard, il me semble qu'elle est liée au script alltools.tcl et tu devrais éviter d'obliger de telles dépendances.
Pour afficher des messages d'aide, la commande Tcl la plus appropriée est puthelp
-----

Le fonctionnement général pourrait également être optimisé mais chaque chose en son temps, en espérant déjà que ces quelques conseils t'aident à progresser.
Répondre Avertir
#7
MenzAgitat a écrit :Pourquoi faire
TCL
set ::unick $nick
putquick "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"


fais directement
TCL
putquick "PRIVMSG $chan :\002\00307$nick \00312votre recherche se trouve sur\00303 $::url \002\003"


puisque tu n'utilises pas $unick ultérieurement
$::unick est utilisé dans le lastsearch.

MenzAgitat a écrit :La commande putfast n'est pas une commande Tcl standard, il me semble qu'elle est liée au script alltools.tcl et tu devrais éviter d'obliger de telles dépendances.
Pour afficher des messages d'aide, la commande Tcl la plus appropriée est puthelp

Je vais effectivement changer ça, pas besoin du putfast lorsqu'il s'agit d'envoyer aussi peu de lignes. je vais remplacer par un putquick, et les autres par des puthelp.

Je vais également rajouter des namespace dans les variables.
Merci pour ces précieux conseils.

@bewess: Chez moi il est testé et fonctionne nickel.
Je posterai plus tard une nouvelle version.
Vérifie tout de même que tu utilises la dernière version eggdrop stable, à savoir, la 1.6.19 (corrigez moi si je me trompe)
Répondre Avertir
#8
Salut à toutes et à tous.

J'ai porté les quelques modifications au script, et je l'ai commenté un maximum pour que les débutants (enfin, ceux qui le sont encore plus que moi) puissent le comprendre.

le voici donc. Je le met en balise tcl et non pas en joint de manière a faciliter la lecture et la compréhension sans demander de téléchargement.

TCL
#############
## GNU/GPL ##
######################################
# see www.gnu.org/licenses/agpl.txt  #
######################################

#je commente la source un maximum pour les débutants.
#ici vous définissez les commande à taper sur le salon pour effectuer des recherches.

#commande recherche google classique
set ::cmd "!search"
#commande recherche google image
set ::imgcmd "!images"
#commande recherche google video
set ::vidcmd "!videos"
#commande pour connaitre la dernière recherche effectuée
set ::lastcmd "!lastsearch"
#commande pour obtenir de l'aide sur la recherche
set ::helpcmd "!helpsearch"
# auteur du script. merci de ne pas le modifier
set ::author "BlackNight"
# version du script
set ::scriptver "1.1.1"

#ici les URL de base dans lesquels seront implémentés les recherches
set ::vidbase "http://video.google.fr/videosearch?q="
set ::googlebase "http://www.google.fr/search?hl=fr&q="
set ::imgbase "http://images.google.fr/images?hl=fr&q="

#ici les salons ou les commande de recherche sont autorisés.
set ::chan {
"#accueil"
"#les-tenebres"
"#la_tour_des_anges"
}

#ici on définis les binds, je pense que les noms sont parlants ...
bind pub - $::cmd google_search
bind pub - $::lastcmd google_lastsearch
bind pub - $::imgcmd google_imgsearch
bind pub - $::vidcmd google_vidsearch
bind pub - $::helpcmd google_help

 
#ici le proc re recherche classique
#le foreach nous sert rammener la liste des salons définis plus haut, et le string match à vérifier 
#si le salon sur lequel est tapé la command est autorisé.
#s'il ne l'est pas, il ne se passera rien.
#
#le join, nous permet de mettre le + entre chaque mot qui sera tapé, et donc ca nous donnera un url comme il faut.
#les définitions de variables suivantes vont nous permettre de donner le lien, mais aussi de "mémoriser" la dernière recherche
# et la stocker dans $::url ainsi que le nom de celui qui a fait la recherche dans $::unick
proc google_search {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set search [join [lrange $arg 0 end] +]
set base $::googlebase
set ::url "$base$search"
set ::unick $nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}

#le même principe que le proc de recherche classique est appliqué ici
proc google_imgsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set search [join [lrange $arg 0 end] +]
set base $::imgbase
set ::url "$base$search"
set ::unick $nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}

#le même principe que le proc de recherche classique est appliqué ici
proc google_vidsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
set search [join [lrange $arg 0 end] +]
set base $::vidbase
set ::url "$base$search"
set ::unick $nick
puthelp "PRIVMSG $chan :\002\00307$::unick \00312votre recherche se trouve sur\00303 $::url \002\003"
}
}
}

#Ici, on ne fait que reprendre nos variables $::url et $::unick pour donner la dernière recherche effectuée.
proc google_lastsearch {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
puthelp "PRIVMSG $chan :\002\00312La dernière recherche effectuée par\00312\00307 $::unick\00307 \00312est\00312 \00303$::url\00303\002"
}
}
}

#ici on définis les messages d'aide à la recherche, les variables des commandes définis plus haut sont utilisées
#de manière a ne pas réediter cette partie en cas de changement du nom des commandes
#Je vous demanderai encore une fois de ne pas enlever mon pseudo à la dernière ligne.
proc google_help {nick host hand chan arg} {
foreach google $::chan {
 if [string match -nocase $google $chan]  {
putquick "NOTICE $nick :\00312Pour faire une recherche sur google \00313-> \00303$::cmd \00307<votre recherche>\003"
putquick "NOTICE $nick :\00312Pour faire une recherche d'image sur google \00313-> \00303$::imgcmd \00307<votre recherche>\003"
putquick "NOTICE $nick :\00312Pour faire une recherche de vidéo sur google \00313-> \00303$::vidcmd \00307<votre recherche>"
putquick "NOTICE $nick :\00312Cette fonctionalité vous est proposée par \002BlackNight\002"
 
 }
}
}

#ici un indicateur party-line/telnet qui nous informe du chargement du script.
putlog "GoogleSearch $::scriptver par $::author chargé avec succès"


Répondre Avertir
#9
Bon, deux critiques:
1) à quoi servent les :: dans ta définition de variables alors que tu es dans le niveau le plus haut ?
2) Ce TCL ne fait qu'une concaténation de chaîne, pourquoi ne pas faire un TCL plus utile qui interroge directement google et retourne les X premiers résultats ?
Répondre
#10
Alors, je me suis servit des :: car cela me permet de ne pas utiliser le "global nomvariable".

Et concernant l'interrogation du site, je ne sais pas encore faire ça, c'est d'un trop haut niveau pour moi pour le moment.
Je tiens à le rappeler, je débute dans le scripting TCL, et j'évolue lentement.
Répondre Avertir
#11
Lorsque je parle des "::", c'est quand tu fais les set. C'est inutile, tu es déjà dans le namespace global. Dans les fonctions, c'est sûr que tu en as besoin.

Pour le reste, compte sur nous pour t'aider à progresser et faire un tcl plus complet.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté