# <- GIGAGOOGLE 2.1 -> root@sbird.org
#
# --> S?rie GigaGoogle enti?rement ?dit?e par Raphael
# gigagoogle.tcl 2.1 par Raphael (root@sbird.org)
# gigagoogle.tcl 2.0 par Raphael (root@sbird.org)
# gigagoogle.tcl 1.0 par Raphael (root@sbird.org)
# supergoogle.tcl 1.3 par brazOo (brazman@systemz.org)
# supergoogle.tcl 1.2 par brother (luc@rocketmail.com)
#
# Ce script est une extension du Google.tcl script de
# aNa|0Gue - analogue@glop.org - http://www.glop.org
# Il a ?t? modifi? par Scratch pour ajout? des options
# et caract?ristiques au google.tcl original.
# Modifi? et traduit en fran?ais par Raphael pour
# ajouter de nouvelles caract?ristiques et corriger les
# derniers bugs trouv?s.
#
# Contacter Raphael :
# E-Mail : root@sbird.org
# Site : http://www.sbird.org/
# IRC : Serveur : irc.sbird.org
# Port : 6667
# Chan : #Aide
#
#
# Caract?ristiques
# * Choisissez les canaux sur lesquels vous affichez les r?sultats [Par Scratch]
# * les Proxy sont support?s [Par Scratch]
# * Details comme le nom du site et la taille des liens [Par Scratch]
# * Aide en ligne [Par Scratch, modifi?e par Raphael]
# * Mode de DEBUG [Par Scratch]
# * Commande de contr?le du flood [Par Scratch]
# * Recherche dans les groupes, dans les images, etc... [Par Raphael]
# * Recherche en Party-Line [Par Scratch, modifi? par Raphael]
# * Demander plusieurs liens pour une recherche [Par Raphael]
# * Plusieurs options de recherche (langue, d?tails ou pas, etc...) [Par Raphael]
#
# Corrections de GigaGoogle v2.1 par rapport ? GigaGoogle v2.0
# * Modification de tous les parsages de pages ne fonctionnant plus depuis que google
# avait chang? ses pages
# * Am?lioration des affichages des recherches
# * Suppression momentan?e des tailles d'images/de page inutiles puisque introuvables.
#
# Corrections de GigaGoogle v2.0 par rapport ? GigaGoogle v1.0
# * R?paration de la recherche simple : dans la v1.0 le script supprimait le premier
# lien trouv? sur google dans les recherches !google.
#
# Vous avez seulement besoin de charger les modules TCL suivant pour que le script
# fonctionne :
# source scripts/alltools.tcl
# source scripts/http.tcl #seulement pour win32 ou si le module ne fonctionne pas
# source scripts/gigagoogle.tcl #ce script
#
#
#
#
# Ci-dessous remplissez ces quelques variables IMPORTANTES
# Hostname de votre service Proxy. Mettez ? "" si vous ne voulez pas l'utiliser.
# Ceci est pour les membres de bidule.fr (factice)
# set ggoogle_proxy "proxy.bidule.fr:8080"
set ggoogle_proxy ""
# Permettez seulement la commande sur les salons suivants...
# set ggoogle_channels "#chan1 #chan2 #chanX"
# ou pour tous les salons
# set ggoogle_channels ""
set ggoogle_channels ""
# Le maximum de liens retourn?s ? l'utilisateur
set ggoogle_hits 5
# le nombre par d?faut de liens retourn?s
set ggoogle_hits_default 1
# Permettre l'utilisation du mode d?taill?? [1/Oui - 0/Non]
set ggoogle_detail 1
# Employer le mode d?taill? seulement si il est demand?? [1/Oui - 0/Non]
set ggoogle_detail_request 1
# Methode de r?ponse pour une demande publique (sur le salon)
# Placer ? 0 pour une notice ? l'utilisateur
# Placer ? 1 pour un message priv? ? l'utilisateur
# Placer ? 2 pour une r?ponse sur le salon
set ggoogle_pubmethod 2
# Qui a le droit de faire une recherche Google dans la Party-Line
# (Utiliser les flags EggDrop)
# ie . Autorise seulement les BotMasters ou BotOwners
set ggoogle_pline_flags ""
# demande de notification? [1/Oui - 0/Non]
set ggoogle_log 1
# DEBUG le script? [1/Oui - 0/Non]
set ggoogle_debug 0
#
# Ne pas changer ? partir d'ici
#
set ggoogle_lastreq ""
set ggoogle_antiflood 0
package require http
if {!($ggoogle_proxy == "")} {
http::config -proxyhost [lindex [split $ggoogle_proxy {:}] 0] -proxyport [lindex [split $ggoogle_proxy {:}] 1] -useragent "BrasMort Browser"
} { http::config -useragent "BrasMort Browser" }
bind pub - !google pub:ggoogle
bind pub - !zoek pub:ggoogle
bind pub - !search pub:ggoogle
bind pub - !images pub:gimages
bind pub - !groups pub:ggroups
bind dcc $ggoogle_pline_flags google dcc:ggoogle
bind dcc $ggoogle_pline_flags zoek dcc:ggoogle
bind dcc $ggoogle_pline_flags search dcc:ggoogle
bind dcc $ggoogle_pline_flags images dcc:gimages
bind dcc $ggoogle_pline_flags groups dcc:ggroups
proc fixhtml {html} {
package require htmlparse
set value [::htmlparse::mapEscapes $html]
return $value
}
proc ggoogle_antiflood_reset {} {
global ggoogle_antiflood
set ggoogle_antiflood 0
set ggoogle_lastreq ""
foreach th [timers] {
if {[lindex $th 1]=="ggoogle_antiflood_reset"} {
killtimer [lindex $th 2]
}
}
}
proc pub:ggoogle { nick uhost handle channel arg } {
global ggoogle_channels ggoogle_pubmethod
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 4} {return 0}
if {[llength $arg]!=0} {
if {$arg == $ggoogle_lastreq} {return 0}
}
set ggoogle_lastreq $arg
if {!($ggoogle_channels == "") && ([lsearch -exact [string tolower $ggoogle_channels] [string tolower $channel]] < 0)} {return 0}
if {$ggoogle_pubmethod == 0} {set logger [ggoogle_start "google" 0 $nick $arg]} elseif {($ggoogle_pubmethod == 2) && ([string tolower $arg] != "help") && ([string tolower $arg] != "aide") && ([string tolower $arg] != "version")} {
set logger [ggoogle_start "google" 2 $channel $arg]} else {set logger [ggoogle_start "google" 1 $nick $arg]}
if {$ggoogle_log == 1} {putcmdlog "\[GG\] ($channel) $nick $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc dcc:ggoogle { handle idx arg } {
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 8} {return 0}
if {$arg == $ggoogle_lastreq} {return 0}
set ggoogle_lastreq $arg
set logger [ggoogle_start "google" 3 $idx $arg]
if {$ggoogle_log == 1} {putcmdlog "\[GG\] (Pline) $handle $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc pub:gimages { nick uhost handle channel arg } {
global ggoogle_channels ggoogle_pubmethod
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 4} {return 0}
if {$arg == $ggoogle_lastreq} {return 0}
set ggoogle_lastreq $arg
if {!($ggoogle_channels == "") && ([lsearch -exact [string tolower $ggoogle_channels] [string tolower $channel]] < 0)} {return 0}
if {$ggoogle_pubmethod == 0} {set logger [ggoogle_start "images" 0 $nick $arg]} elseif {($ggoogle_pubmethod == 2) && ([string tolower $arg] != "help") && ([string tolower $arg] != "aide")} {
set logger [ggoogle_start "images" 2 $channel $arg]} else {set logger [ggoogle_start "images" 1 $nick $arg]}
if {$ggoogle_log == 1} {putcmdlog "\[GG\] ($channel) $nick $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc dcc:gimages { handle idx arg } {
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 8} {return 0}
if {$arg == $ggoogle_lastreq} {return 0}
set ggoogle_lastreq $arg
set logger [ggoogle_start "images" 3 $idx $arg]
if {$ggoogle_log == 1} {putcmdlog "\[GG\] (Pline) $handle $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc pub:ggroups { nick uhost handle channel arg } {
global ggoogle_channels ggoogle_pubmethod
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 4} {return 0}
if {$arg == $ggoogle_lastreq} {return 0}
set ggoogle_lastreq $arg
if {!($ggoogle_channels == "") && ([lsearch -exact [string tolower $ggoogle_channels] [string tolower $channel]] < 0)} {return 0}
if {$ggoogle_pubmethod == 0} {set logger [ggoogle_start "groups" 0 $nick $arg]} elseif {($ggoogle_pubmethod == 2) && ([string tolower $arg] != "help") && ([string tolower $arg] != "aide")} {
set logger [ggoogle_start "groups" 2 $channel $arg]} else {set logger [ggoogle_start "groups" 1 $nick $arg]}
if {$ggoogle_log == 1} {putcmdlog "\[GG\] ($channel) $nick $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc dcc:ggroups { handle idx arg } {
global ggoogle_antiflood ggoogle_lastreq ggoogle_log
if {$ggoogle_antiflood > 8} {return 0}
if {$arg == $ggoogle_lastreq} {return 0}
set ggoogle_lastreq $arg
set logger [ggoogle_start "groups" 3 $idx $arg]
if {$ggoogle_log == 1} {putcmdlog "\[GG\] (Pline) $handle $logger"}
set ggoogle_antiflood [expr $ggoogle_antiflood + 1]
timer 1 ggoogle_antiflood_reset
return 0
}
proc ggoogle_start { mode public destination arg } {
global ggoogle_version version ggoogle_hits ggoogle_hits_default ggoogle_debug ggoogle_detail_request ggoogle_detail lastbind
regsub -all -nocase {\$\{\}\[\]} $arg {} arg
set arg [string tolower $arg]
if {(([llength $arg]==0) || ([string tolower $arg] == "help") || ([string tolower $arg] == "aide")) && ($mode=="google")} {
set temp ""
lappend temp "Aide: $ggoogle_version"
lappend temp "|-$lastbind \[fr|france|linux\] \[detail|simple\] <num> <mot(s) cl?(s)>"
lappend temp "| Recherchez sur Google avec des Mots Cl?s. Vous pouvez sp?cifier "
lappend temp "| le nombre de liens que vous d?sirez ainsi que plusieurs"
lappend temp "| mots cl?s pour trouver plus facilement ce que vous cherchez."
lappend temp "| Le Maximum de liens est actuellement de : $ggoogle_hits"
lappend temp "|-$lastbind <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des sites sur Google avec des Mots Cl?s"
lappend temp "|-!images <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des images sur Google avec des Mots Cl?s"
lappend temp "|-!groups <num> \[langue=fr|de|en...\] <mot(s) cl?(s)>"
lappend temp "| Chercher des groupes sur Google avec des Mots Cl?s"
lappend temp "`-$lastbind aide"
ggoogle_sendtext $temp 0 $destination
return "asked for help."
}
if {(([llength $arg]==0) || ([string tolower $arg] == "help") || ([string tolower $arg] == "aide")) && ($mode=="images")} {
set temp ""
lappend temp "Aide: $ggoogle_version"
lappend temp "|-!google \[fr|france|linux\] \[detail|simple\] <num> <mot(s) cl?(s)>"
lappend temp "| Recherchez sur Google avec des Mots Cl?s. Vous pouvez sp?cifier "
lappend temp "| le nombre de liens que vous d?sirez ainsi que plusieurs"
lappend temp "| mots cl?s pour trouver plus facilement ce que vous cherchez."
lappend temp "| Le Maximum de liens est actuellement de : $ggoogle_hits"
lappend temp "|-!google <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des sites sur Google avec des Mots Cl?s"
lappend temp "|-$lastbind <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des images sur Google avec des Mots Cl?s"
lappend temp "|-!groups <num> \[langue=fr|de|en...\] <mot(s) cl?(s)>"
lappend temp "| Chercher des groupes sur Google avec des Mots Cl?s"
lappend temp "`-$lastbind aide"
ggoogle_sendtext $temp 0 $destination
return "asked for help."
}
if {(([llength $arg]==0) || ([string tolower $arg] == "help") || ([string tolower $arg] == "aide")) && ($mode=="groups")} {
set temp ""
lappend temp "Aide: $ggoogle_version"
lappend temp "|-!google \[fr|france|linux\] \[detail|simple\] <num> <mot(s) cl?(s)>"
lappend temp "| Recherchez sur Google avec des Mots Cl?s. Vous pouvez sp?cifier "
lappend temp "| le nombre de liens que vous d?sirez ainsi que plusieurs"
lappend temp "| mots cl?s pour trouver plus facilement ce que vous cherchez."
lappend temp "| Le Maximum de liens est actuellement de : $ggoogle_hits"
lappend temp "|-!google <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des sites sur Google avec des Mots Cl?s"
lappend temp "|-!images <num> <mot(s) cl?(s)>"
lappend temp "| Chercher des images sur Google avec des Mots Cl?s"
lappend temp "|-$lastbind <num> \[langue=fr|de|en...\] <mot(s) cl?(s)>"
lappend temp "| Chercher des groupes sur Google avec des Mots Cl?s"
lappend temp "`-$lastbind aide"
ggoogle_sendtext $temp 0 $destination
return "asked for help."
}
if {$arg == "version"} {
ggoogle_sendtext "{$ggoogle_version est activ? sur un eggdrop [lindex $version 0].}" 0 $destination
return "a demand? la version."
}
if {$mode=="images"} {
set zoekstring $arg
set detailed 0
if {[string match {[0-9]} [lindex $zoekstring 0]] || [string match {[0-9][0-9]} [lindex $zoekstring 0]]} {
set hits [lindex $zoekstring 0]
set zoekstring [lrange $arg 1 end]
if {$hits > $ggoogle_hits} {
ggoogle_sendtext "{Trop de liens demand?s (voir $lastbind aide)}" $public $destination
return "a demand? ? avoir trop de liens."
}
if {$hits < 1} {
ggoogle_sendtext "{Le nombre de liens demand?s doit ?tre de 1 minimum}" $public $destination
return "a mit un nombre invalide de liens."
}
} else {
set hits $ggoogle_hits_default
}
set query "http://images.google.fr/images?q="
for { set index 0 } { $index<[llength $zoekstring] } { incr index } {
set query "$query[lindex $zoekstring $index]"
if {$index<[llength $zoekstring]-1} then {
set query "$query+"
}
}
set query "$query&num=$hits"
if {$ggoogle_debug == 1} {
putlog "DEBUG: Query built ($query)"
putlog "DEBUG: Contacting website..."
}
set token [http::geturl $query]
puts stderr ""
upvar #0 $token state
if {$ggoogle_debug == 1} {putlog "DEBUG: Got state ($state(http))"}
if {[string tolower [lindex $state(http) 2]] != "ok"} {
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring (Error: [lrange $state(http) 2 end])}" $public $destination
return "a recherch? $zoekstring (images) mais il y a eu une erreur: [lrange $state(http) 2 end]."
}
set htmldata [http::data $token]
if {$ggoogle_debug == 1} {putlog "DEBUG: Got data ([string length $htmldata] bytes)"}
set parsed [images_parse $htmldata]
if {$parsed == 0} {
if {$ggoogle_debug == 1} {putlog "DEBUG: Could not find items to parse."}
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring}" $public $destination
return "a recherch? $zoekstring mais n'a pas eu de r?sultats. (images)"
}
if {$ggoogle_debug == 1} {putlog "DEBUG: Data parsed (got [lindex $parsed 0] items)"}
set sendtext [images_template $parsed $detailed $zoekstring]
if {$ggoogle_debug == 1} {putlog "DEBUG: Template applied ([llength $sendtext] lines of text)"}
ggoogle_sendtext $sendtext $public $destination
if {$ggoogle_debug == 1} {putlog "DEBUG: Sent text to output. Done..."}
return "a recherch? $zoekstring et a eu [lindex $parsed 0] liens (images - [string length $htmldata] bytes)"
}
if {$mode=="groups"} {
set zoekstring $arg
set detailed 0
if {[string match {[0-9]} [lindex $zoekstring 0]] || [string match {[0-9][0-9]} [lindex $zoekstring 0]]} {
set hits [lindex $zoekstring 0]
set zoekstring [lrange $arg 1 end]
if {$hits > $ggoogle_hits} {
ggoogle_sendtext "{Trop de liens demand?s (voir $lastbind aide)}" $public $destination
return "a demand? ? avoir trop de liens."
}
if {$hits < 1} {
ggoogle_sendtext "{Le nombre de liens demand?s doit ?tre de 1 minimum}" $public $destination
return "a mit un nombre invalide de liens."
}
} else {
set hits $ggoogle_hits_default
}
set lang 0
if {[string range $zoekstring 0 4]=="lang="} {
set lang [lindex $zoekstring 0]
set zoekstring [lrange $zoekstring 1 end]
set lang [string range $lang 5 end]
set lang "lr=lang_[string tolower $lang]"
}
set query "http://groups.google.fr/groups?q="
for { set index 0 } { $index<[llength $zoekstring] } { incr index } {
set query "$query[lindex $zoekstring $index]"
if {$index<[llength $zoekstring]-1} then {
set query "$query+"
}
}
if {$lang!=0} {
set query "$query&$lang"
}
set query "$query&num=$hits"
if {$ggoogle_debug == 1} {
putlog "DEBUG: Query built ($query)"
putlog "DEBUG: Contacting website..."
}
set token [http::geturl $query]
puts stderr ""
upvar #0 $token state
if {$ggoogle_debug == 1} {putlog "DEBUG: Got state ($state(http))"}
if {[string tolower [lindex $state(http) 2]] != "ok"} {
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring (Erreur: [lrange $state(http) 2 end])}" $public $destination
return "a recherch? $zoekstring (groups) mais a eu une erreur: [lrange $state(http) 2 end]."
}
set htmldata [http::data $token]
if {$ggoogle_debug == 1} {putlog "DEBUG: Got data ([string length $htmldata] bytes)"}
set parsed [groups_parse $htmldata]
if {$parsed == 0} {
if {$ggoogle_debug == 1} {putlog "DEBUG: Could not find items to parse."}
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring}" $public $destination
return "a recherch? $zoekstring mais n'a pas eu de r?sultats. (groups)"
}
if {$ggoogle_debug == 1} {putlog "DEBUG: Data parsed (got [lindex $parsed 0] items)"}
set sendtext [groups_template $parsed $detailed $zoekstring]
if {$ggoogle_debug == 1} {putlog "DEBUG: Template applied ([llength $sendtext] lines of text)"}
ggoogle_sendtext $sendtext $public $destination
if {$ggoogle_debug == 1} {putlog "DEBUG: Sent text to output. Done..."}
return "a recherch? $zoekstring et a eu [lindex $parsed 0] liens (groups - [string length $htmldata] bytes)"
}
set maybelang [string tolower [lindex $arg 0]]
if {($maybelang == "france")||($maybelang == "fr")} {set arg [lrange $arg 1 end];set google_lang "fr"}
if {($maybelang == "linux")} {set arg [lrange $arg 1 end];set google_lang "linux"}
if {[string tolower [lindex $arg 0]] == "detail"} {
set zoekstring [lrange $arg 1 end]
if {$ggoogle_detail == 1} {
set detailed 1
} else {
ggoogle_sendtext "{Le mode d?taill? a ?t? interdit par l'administrateur}" $public $destination
}
} elseif {[string tolower [lindex $arg 0]] == "simple"} {
set zoekstring [lrange $arg 1 end]
set detailed 0
} else {
set zoekstring $arg
if {$ggoogle_detail_request == 1} {set detailed 0} else {set detailed 1}
}
if {[string match {[0-9]} [lindex $zoekstring 0]] || [string match {[0-9][0-9]} [lindex $zoekstring 0]]} {
set hits [lindex $zoekstring 0]
set zoekstring [lrange $zoekstring 1 end]
if {$hits > $ggoogle_hits} {
ggoogle_sendtext "{Trop de liens demand?s (voir $lastbind aide)}" $public $destination
return "a demand? ? avoir trop de liens."
}
if {$hits < 1} {
ggoogle_sendtext "{Le nombre de liens demand?s doit ?tre de 1 minimum}" $public $destination
return "a mit un nombre invalide de liens."
}
} else {
set hits $ggoogle_hits_default
set zoekstring $zoekstring
}
if {[info exist google_lang]} {
switch -exact -- $google_lang {
"fr" {set query "http://www.google.fr/search?lr=lang_fr&q="}
"linux" {set query "http://www.google.com/linux?q="}
}
} else {
set query "http://www.google.com/search?q="
}
for { set index 0 } { $index<[llength $zoekstring] } { incr index } {
set query "$query[lindex $zoekstring $index]"
if {$index<[llength $zoekstring]-1} then {
set query "$query+"
}
}
set query "$query&num=$hits"
if {$ggoogle_debug == 1} {
putlog "DEBUG: Query built ($query)"
putlog "DEBUG: Contacting website..."
}
set token [http::geturl $query]
puts stderr ""
upvar #0 $token state
if {$ggoogle_debug == 1} {putlog "DEBUG: Got state ($state(http))"}
if {[string tolower [lindex $state(http) 2]] != "ok"} {
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring (Erreur: [lrange $state(http) 2 end])}" $public $destination
return "a recherch? $zoekstring (google) mais a eu une erreur: [lrange $state(http) 2 end]."
}
set htmldata [http::data $token]
if {$ggoogle_debug == 1} {putlog "DEBUG: Got data ([string length $htmldata] bytes)"}
set parsed [ggoogle_parse $htmldata]
if {$parsed == 0} {
if {$ggoogle_debug == 1} {putlog "DEBUG: Could not find items to parse."}
ggoogle_sendtext "{Aucun r?sultat trouv? pour $zoekstring}" $public $destination
return "a recherch? $zoekstring mais n'a pas eu de r?sultats. (google)"
}
if {$ggoogle_debug == 1} {putlog "DEBUG: Data parsed (got [lindex $parsed 0] items)"}
set sendtext [ggoogle_template $parsed $detailed $zoekstring]
if {$ggoogle_debug == 1} {putlog "DEBUG: Template applied ([llength $sendtext] lines of text)"}
ggoogle_sendtext $sendtext $public $destination
if {$ggoogle_debug == 1} {putlog "DEBUG: Sent text to output. Done..."}
return "a recherch? $zoekstring et a eu [lindex $parsed 0] liens (google - [string length $htmldata] bytes)"
}
proc ggoogle_parse {data} {
set count 0
set outputdata ""
regsub -all "\n" $data "<newline>" data
regsub -all "<div class=g><a " $data \n data
regsub -all " - </span><nobr><a class=" $data \n data
regsub -all -- "<font size=-1>" $data \n data
regsub -all "<newline>" $data \n data
set data [split $data \n]
set pattern "href=*"
foreach elem $data {
if {[string match "Results *" $elem] || [string match "R?sultats *" $elem]} {
regsub -all "</font>" $elem "\n" elem
set elem [lindex [split $elem \n] 0]
regsub -all "<b>" $elem "\002" elem
regsub -all "</b>" $elem "\002" elem
lappend outputdata $elem
}
if {[string match $pattern $elem]} {
set full $elem
regsub -all "\"" $elem "" elem
regsub -all "class=l>" $elem "" elem
regsub -all "</a>" $elem \n elem
set elem [split $elem \n]
set elem [lindex $elem 0]
set full [lrange $full [expr [llength $full]-7] end]
set size "N/A"
foreach word $full {
regexp {[0-9]+k} $word size
}
set result ""
set infos [gere_result $elem]
set title [lindex $infos 0]
set url [lindex $infos 1]
lappend result $title $url $size
lappend outputdata $result
incr count
}
}
if {$count==0} {return 0}
return "$count $outputdata"
}
proc gere_result { line } {
set reply ""
regsub -all "href=" $line "" line
regsub -all ">" $line \n buf
set lien [lindex $buf 0]
set lienlen [string length $lien]
set title [string range $line [expr $lienlen+1] end]
set title [gere_html $title]
lappend reply $title $lien
return $reply
}
proc gere_html {title} {
regsub -all "</?b>" $title "\002" title
regsub -all "</?u>" $title "\037" title
set title [fixhtml $title]
return $title
}
proc images_parse {data} {
set count 0
set outputdata ""
regsub -all "\n" $data "<newline>" data
regsub -all "<a href=/imgres" $data "\n" data
regsub -all " ko<br><font color" $data "\n" data
set data [split $data \n]
set pattern "?imgurl=*"
foreach elem $data {
if {[string match $pattern $elem]} {
set size "N/A"
regexp {[0-9]+} [lindex $elem end] size
if {$size!="N/A"} {append size "ko"}
regsub -all "&imgrefurl=" $elem "\n" elem
set elem [split $elem \n]
set url "[string range [lindex $elem 0] 8 end]"
lappend outputdata "$url $size"
incr count
}
}
if {$count==0} {return 0}
return "$count $outputdata"
}
proc groups_parse {data} {
set count 0
set outputdata ""
regsub -all "\n" $data "<newline>" data
regsub -all "<font size=\"\\+0\"><newline> <a " $data "\n" data
regsub -all "</td></tr></table>" $data "\n" data
regsub -all "<p><a href=/group" $data "\n" data
regsub -all -- "- <a href=/groups" $data "\n" data
set data [split $data \n]
foreach elem $data {
set url "N/A"
regexp "^href=\"/group/(.+)\">(.+)</a><newline> </font> <newline> <nobr><font size=\"-1\">Groupe :</font><newline> <a href=\"/group/.+\?lnk=sg\" >(.+)</a><newline></nobr><newline> <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tr><td><newline> .+<newline><br><newline> <font class=\"gl\">(.+) de (.+) - (\[0-9]+) messages? - (\[0-9]+) auteurs?.*$" $elem match url title group date auteur nbmsgs nbauteurs
if {$url != "N/A"} {
set url "http://groups.google.fr/group/$url"
set title [gere_html $title]
lappend outputdata [list $title $date $group $auteur $url $nbmsgs $nbauteurs]
incr count
}
}
if {$count==0} {return 0}
return "$count $outputdata"
}
proc groups_template {data details terms} {
global ggoogle_version
set items [lrange $data 1 end]
set reply ""
set count 0
foreach hit $items {
set title [lindex $hit 0]
set date [lindex $hit 1]
set group [lindex $hit 2]
set auteur [lindex $hit 3]
set url [lindex $hit 4]
set nbmsgs [lindex $hit 5]
set nbauteurs [lindex $hit 6]
set count [expr $count + 1]
if {[lindex $data 0] == 1} then {
set temp "$title - $date par $auteur ($group) $url"
} else {
set temp "\[$count\] $title - $date par $auteur ($group) $url"
}
lappend reply $temp
}
return $reply
}
proc images_template {data details terms} {
global ggoogle_version
set items [lrange $data 1 end]
set reply ""
set count 0
foreach hit $items {
set url [lindex $hit 0]
set size [lindex $hit 1]
set count [expr $count + 1]
if {[lindex $data 0] == 1} then {
# set temp "$url ($size)" // when $size could be used ...
set temp "$url"
} else {
# set temp "\[$count\] $url ($size)" // when $size could be used ...
set temp "\[$count\] $url"
}
lappend reply $temp
}
return $reply
}
proc ggoogle_template {data detail terms} {
global ggoogle_version
# les liens sont [lrange $data 2 end] dans la version pr?c?dente
set items [lrange $data 1 end]
set reply ""
if {$detail == 0} {
set count 0
foreach hit $items {
set url [lindex $hit 1]
set size [lindex $hit 2]
if {$size != "-"} then {
set count [expr $count + 1]
if {[lindex $data 0] == 1} then {
# set temp "$url ($size)" // when $size could be used ...
set temp "$url"
} else {
# set temp "\[$count\] $url ($size)" // when $size could be used ...
set temp "\[$count\] $url"
}
lappend reply $temp
}
}
} else {
lappend reply "Recherche de $terms ($ggoogle_version)"
set count 0
foreach hit $items {
set name [lindex $hit 0]
set url [lindex $hit 1]
set size [lindex $hit 2]
if {$size != "-"} then {
set count [expr $count + 1]
if {[lindex $data 0] == 1} then {
# lappend reply "|- $url ($size)" // when $size could be used ...
lappend reply "|- $url"
lappend reply "| $name"
} else {
# lappend reply "|-\[$count\] $url ($size)" // when $size could be used ...
lappend reply "|-\[$count\] $url"
lappend reply "| $name"
}
}
}
set result [lindex $data 1]
regsub -all "for" $result \n result
regsub -all "pour" $result \n result
set result [split $result \n]
set result [lindex $result 0]
regsub -all " " $result " " result
regsub -all "," $result " " result
regsub -all "Results" $result "R?sultats" result
regsub -all "of about" $result "sur un total d'environ" result
lappend reply "`- $result"
}
return $reply
}
proc ggoogle_sendtext {data public destination} {
global botnick
if {[llength $data] == 1 && $public == 2} {putquick ":$botnick PRIVMSG $destination :[lindex $data 0]"} else {
foreach text $data {
if {$public == 0} {
putquick ":$botnick NOTICE $destination :$text"
} elseif {$public == 1 || $public == 2} {
putquick ":$botnick PRIVMSG $destination :$text"
} else {
putdcc $destination $text
}
}
}
}
set ggoogle_version "GigaGoogle v2.1"
putlog "$ggoogle_version par Raphael charg? (root@sbird.org - http://www.sbird.org/)"