This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Google search

Help for those learning Tcl or writing their own scripts.
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Google search

Post by ComputerTech »

So was trying to make a Google search script, which eould retrieve the URL and Title of the search term, (this is my first time messing with http and websites)

Code: Select all

bind PUB - "!google" ct:google

package require http
package require tls

proc ct:google {nick host hand chan text} {
	set token [http::geturl https://www.google.com/search?q=[join $text +] -timeout 9000]
	set data [http::data $token]
	putserv "PRIVMSG $chan :$data"
}
So i also need to figure out how to make it for https/tls as google only works that way, if i use a http link for $token it dumps a pile of http code so, again i will try working on it tomorrow, but will appreciate any/all help ;) I noticed other web scripts use regex, but again i am trying to figure that out heh :lol:
ComputerTech
User avatar
CrazyCat
Revered One
Posts: 1216
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

Loading tls package but not using it...

Code: Select all

bind PUB - "!google" ct:google

package require http
package require tls

proc ct:google {nick host hand chan text} {
   http::register https 443 [list ::tls::socket]
   set token [http::geturl https://www.google.com/search?q=[join $text +] -timeout 9000]
   set data [http::data $token]
   putserv "PRIVMSG $chan :$data"
   http::unregister https
}
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

oh, lmfao, thanks CrazyCat, i'll test it right away :wink:


EDIT

just tested it and when i do !google lego ,i get this weird code

Code: Select all

ComputerTech_ !google lego
Tech <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
ComputerTech
User avatar
CrazyCat
Revered One
Posts: 1216
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

It's not weird, it's the html code of the google result page, as if you displayed the source code.
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

Oh, i see, i didn't realise that lol.

Will try see how to convert the html code into readable then :lol:
ComputerTech
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

Okay, finally got a working version

Code: Select all

######################################################################################
# CT-Google.tcl
######################################################################################
#Author    ComputerTech
#IRC       Irc.DareNet.Org  #ComputerTech
#Email     ComputerTech@DareNet.Org
#GitHub    https://github.com/computertech312
#Version   0.1
#Released  20/03/2021
######################################################################################
# Description:
#
#               An Elaborate Google Search Script
#               
#
# Credits:
#
#               Special thanks to launchd, spyda and CrazyCat
#               
#
# History:
#
#               - 0.1: First release.
#
######################################################################################
# Start Of Configuration #
##########################
# Set trigger of the script.
##
set ctgg(trig) "!google"

###################
# Set flag for Commands.
##
# Owner     = n
# Master    = m
# Op        = o
# Voice     = v
# Friend    = f
# Everyone  = -
##
set ctgg(flag) "ofmn"

###################
# Set API Key
##
set ctgg(api) "Your-API-Key-Here"

##################
# Set to use Notice Or Privmsg for Output of Commands
##
# 0 = Notice
# 1 = Privmsg
# 2 = Channel
##
set ctcmd(msg) "0"

########################
# End Of Configuration #
######################################################################################

bind PUB $ctgg(flag) $ctgg(trig) goo:gle

package require json
package require tls
package require http

proc goo:gle {nick host hand chan text} {
	global ctgg
	set google "\0032G\003\0034o\003\0038o\003\0032g\003\0033l\003\0034e\003"
	http::register https 443 [list ::tls::socket]
	set url "https://www.googleapis.com/customsearch/v1?key=$ctgg(api)&cx=016496445636816056556:qvzl4ib4xtb&q=[join $text +]"
 	 set data "[http::data [http::geturl "$url" -timeout 10000]]"
  	set datadict [::json::json2dict $data]
     set items [dict get $datadict "items"]
    	set item [lindex $items 0]
	     set title [dict get $item "title"]
      	set link [dict get $item "link"]
        	set info [dict get $item "snippet"]
        switch -- $ctgg(msg) {
        "0" {set ctgg(output) "NOTICE $nick"}
        "1" {set ctgg(output) "PRIVMSG $nick"}
        "2" {set ctgg(output) "PRIVMSG $chan"}
        }
    }
	  putserv "$ctgg(output) :$google $title / $link / $info"
  http::unregister https
}
######################################################################################
It's working perfectly, but i plan to add much more things :wink:

Any ideas are much appreciated :P
ComputerTech
User avatar
CrazyCat
Revered One
Posts: 1216
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

Don't use:

Code: Select all

set url "https://www.googleapis.com/customsearch/v1?key=$ctgg(api)&cx=016496445636816056556:qvzl4ib4xtb&q=[join $text +]" 
set data "[http::data [http::geturl "$url" -timeout 10000]]"
Better use:

Code: Select all

set uargs [http::formatQuery key $ctgg(api) cx 016496445636816056556:qvzl4ib4xtb q $text]
set data [http::data [http::geturl "https://www.googleapis.com/customsearch/v1" -query $uargs -timeout 10000]]
Last edited by CrazyCat on Sun Mar 21, 2021 3:27 am, edited 1 time in total.
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

Getting this error with your code CrazyCat

Code: Select all

<Tech> [01:01:29] Tcl error [goo:gle]: invalid command name "http::formatquery"
Code

Code: Select all

######################################################################################
# CT-Google.tcl
######################################################################################
#Author    ComputerTech
#IRC       Irc.DareNet.Org  #ComputerTech
#Email     ComputerTech@DareNet.Org
#GitHub    https://github.com/computertech312
#Version   0.2
#Released  21/03/2021
######################################################################################
# Description:
#
#               - An Elaborate Google Search Script.
#               - After 100 usages of the script, it will automatically stop until the next day.
#               - Grab your own API key from here - https://developers.google.com/custom-search/v1/overview
#
# Credits:
#
#               - Special thanks to launchd, spyda and CrazyCat.
#               - Usage of m00nies throttle control.
#             
# History:
#
#               - 0.1: First release.
#
######################################################################################
# Start Of Configuration #
##########################
# Set trigger of the script.
##
set ctgg(trig) "!google"

###################
# Set flag for Commands.
##
# Owner     = n
# Master    = m
# Op        = o
# Voice     = v
# Friend    = f
# Everyone  = -
##
set ctgg(flag) "ofmn"

###################
# Set API Key
##
set ctgg(api) "API-KERE-HERE"

##################
# Set to use Notice Or Privmsg for Output of Commands
##
# 0 = Notice
# 1 = Privmsg
# 2 = Channel
##
set ctgg(msg) "2"


########################
# End Of Configuration #
######################################################################################

bind PUB $ctgg(flag) $ctgg(trig) goo:gle
bind time - "00 00 * * *" api:reset

package require json
package require tls
package require http

proc goo:gle {nick host hand chan text} {
   global ctgg
 if {![info exists google]} {
   set google "\0032G\003\0034o\003\0038o\003\0032g\003\0033l\003\0034e\003"
}
 if {![info exists ctgg(count)]} {
        set ctgg(count) "0"
 }
 if {$ctgg(count) == "100"} {
    puthelp "$ctgg(output) :Max uses of API exceeded."
    return 1
 }
        switch -- $ctgg(msg) {
        "0" {set ctgg(output) "NOTICE $nick"}
        "1" {set ctgg(output) "PRIVMSG $nick"}
        "2" {set ctgg(output) "PRIVMSG $chan"}
        }
   http::register https 443 [list ::tls::socket]
set uargs [http::formatquery key $ctgg(api) cx 016496445636816056556:qvzl4ib4xtb q $text]
set data [http::data [http::geturl "https://www.googleapis.com/customsearch/v1" -query $uargs -timeout 10000]]
   if {[string length $data] == 0} { 
     puthelp "$ctgg(output) :API key Returned no Data" ;return 1 }
     set datadict [::json::json2dict $data]
     set items [dict get $datadict "items"]
       set item [lindex $items 0]
        set title [dict get $item "title"]
         set link [dict get $item "link"]
         set info [dict get $item "snippet"]
     putserv "$ctgg(output) :$google $title / $link / $info"
     incr ctgg(count) 1
  http::unregister https
}
proc api:reset {min hour day month weekday} {
   global ctgg
unset ctgg(count)
}
######################################################################################
ComputerTech
User avatar
CrazyCat
Revered One
Posts: 1216
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

My bad, formatQuery with a capital Q.
I corrected my previous post.
G
Goga
Halfop
Posts: 83
Joined: Sat Sep 19, 2020 2:12 am

Post by Goga »

Code: Select all

######################################################################################
# CT-Google.tcl
######################################################################################
#Author    ComputerTech
#IRC       Irc.DareNet.Org  #ComputerTech
#Email     ComputerTech@DareNet.Org
#GitHub    https://github.com/computertech312
#Version   0.3
#Released  21/03/2021
######################################################################################
# Description:
#
#               - An Elaborate Google Search Script.
#               - After 100 usages of the script, it will automatically stop until the next day.
#               - Grab your own API key from here 
#                 https://developers.google.com/custom-search/v1/overview
#               - And a Engine ID from here
#                 https://cse.google.com/cse/
#
# Credits:
#
#               - Special thanks to launchd, spyda and CrazyCat.
#              
# History:
#
#               - 0.3: Added Max results option.
#               - 0.2: Fixed a few minor bugs.
#               - 0.1: First release.
#
######################################################################################
# Start Of Configuration #
##########################
# Set trigger of the script. 
##
set ctgg(trig) "!google"


###################
# Set flag for Commands.
##
# Owner     = n
# Master    = m
# Op        = o
# Voice     = v
# Friend    = f
# Everyone  = -
##
set ctgg(flag) "ofmn"


###################
# Set API Key
##
set ctgg(api) "KeyGiven"


##################
# Set Engine ID
##
set ctgg(id) "KeyGiven"


##################
# Set to use Notice Or Privmsg for Output of Commands
##
# 0 = Notice
# 1 = Privmsg
# 2 = Channel
##
set ctgg(msg) "2"


##################
# Set amount of results to output
##
set ctgg(max) "3"


########################
# End Of Configuration #
######################################################################################

bind PUB $ctgg(flag) $ctgg(trig) goo:gle

package require json
package require tls
package require http

proc goo:gle {nick host hand chan text} {
   global ctgg
   set google "\0032G\0034o\0038o\0032g\0033l\0034e\003"
   http::register https 443 [list ::tls::socket]
     set url "https://www.googleapis.com/customsearch/v1?key=$ctgg(api)&cx=$ctgg(id)&q=[join $text +]"
     set data "[http::data [http::geturl "$url" -timeout 10000]]"
     set datadict [::json::json2dict $data]
     set items2 [dict get $datadict "searchInformation"]
     set items [dict get $datadict "items"]
for {set i 0} {$i < $ctgg(max)} {incr i} {
     set item [lindex $items $i]
     set title [dict get $item "title"]
     set link [dict get $item "link"]
     set info [dict get $item "snippet"]
     set time [dict get $items2 "formattedSearchTime"]
     set total [dict get $items2 "formattedTotalResults"]
     switch -- $ctgg(msg) {
        "0" {set ctgg(output) "NOTICE $nick"}
        "1" {set ctgg(output) "PRIVMSG $nick"}
        "2" {set ctgg(output) "PRIVMSG $chan"}
     }
     putserv "$ctgg(output) :$google  About $total results ($time seconds)"
     putserv "$ctgg(output) :$google  $title / $link / $info"
  http::unregister https
  http::cleanup $data
  }
putlog "{$google}.tcl v0.3 by ComputerTech Loaded"
}
This is ComputerTech's !Google TCL I am getting this error:

Tcl error [goo:gle]: key "searchInformation" not known in dictionary

help please.
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

Try this, it works perfectly here :wink:

Code: Select all

######################################################################################
# CT-Google.tcl
######################################################################################
#Author    ComputerTech
#IRC       Irc.DareNet.Org  #ComputerTech
#Email     ComputerTech@DareNet.Org
#GitHub    https://github.com/computertech312
#Version   0.3
#Released  21/03/2021
######################################################################################
# Description:
#
#               - An Elaborate Google Search Script.
#               - After 100 usages of the script, it will automatically stop until the next day.
#               - Grab your own API key from here
#                 https://developers.google.com/custom-search/v1/overview
#               - And a Engine ID from here
#                 https://cse.google.com/cse/
#
# Credits:
#
#               - Special thanks to launchd, spyda and CrazyCat.
#
# History:
#
#               - 0.3: Added Max results option.
#               - 0.2: Fixed a few minor bugs.
#               - 0.1: First release.
#
######################################################################################
# Start Of Configuration #
##########################
# Set trigger of the script.
##
set ctgg(trig) "!google"


###################
# Set flag for Commands.
##
# Owner     = n
# Master    = m
# Op        = o
# Voice     = v
# Friend    = f
# Everyone  = -
##
set ctgg(flag) "-"


###################
# Set API Key
##
set ctgg(api) "Your-API-Key"


##################
# Set Engine ID
##
set ctgg(id) "Your-Engine-ID"


##################
# Set to use Notice Or Privmsg for Output of Commands
##
# 0 = Notice
# 1 = Privmsg
# 2 = Channel
##
set ctgg(msg) "2"


##################
# Set amount of results to output
##
set ctgg(max) "3"


########################
# End Of Configuration #
######################################################################################

bind PUB $ctgg(flag) $ctgg(trig) goo:gle

package require json
package require tls
package require http

proc goo:gle {nick host hand chan text} {
	global ctgg google
	set ::google "\00302G\00304o\00308o\00302g\00303l\00304e\003"
	http::register https 443 [list ::tls::socket]
	set url "https://www.googleapis.com/customsearch/v1?key=$ctgg(api)&cx=$ctgg(id)&q=[join $text +]"
	set data "[http::data [http::geturl "$url" -timeout 10000]]"
    http::cleanup $data
	set datadict [::json::json2dict $data]
	set items2 [dict get $datadict "searchInformation"]
    		switch -- $ctgg(msg) {
			"0" {set ctgg(output) "NOTICE $nick "}
			"1" {set ctgg(output) "PRIVMSG $nick"}
			"2" {set ctgg(output) "PRIVMSG $chan"}
		}
    set time [dict get $items2 "formattedSearchTime"]
    set total [dict get $items2 "formattedTotalResults"]
    putserv "$ctgg(output) :$google  About $total results ($time seconds)"
    set items [dict get $datadict "items"]
	for {set i 0} {$i < $ctgg(max)} {incr i} {
		set item [lindex $items $i]
		set title [dict get $item "title"]
		set link [dict get $item "link"]
		set info [dict get $item "snippet"]
		putserv "$ctgg(output) : $title / $link / $info"
	}
		http::unregister https
}
putlog "$::google.tcl v0.3 by ComputerTech Loaded"
######################################################################################

Code: Select all

CT !google eggdrop irc bot
 Tech Google  About 40,200 results (0.36 seconds)
 Tech  Eggdrop / https://www.eggheads.org/ / Eggdrop is the oldest Internet Relay Chat (IRC) bot still in active development. 
 Tech  Eggdrop - Wikipedia / https://en.wikipedia.org/wiki/Eggdrop / It was originally written by Robey Pointer in December 1993 to help manage and 
 Tech  eggheads/eggdrop: The Eggdrop IRC Bot - GitHub / https://github.com/eggheads/eggdrop / Jul 2, 2016 ... The Eggdrop IRC Bot. Contribute to eggheads/eggdrop development by creating 
ComputerTech
s
simo
Revered One
Posts: 1071
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

oh thats weird im gettin this :
<!doctype html><html itemscope="" itemtype="http://schema.org/SearchResultsPage" lang="en"><head><meta charset="UTF-8"><meta content="origin" name="referrer"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>eggdrop irc bot - Google Search</title><script nonce="cHq6NVRRsXiPVm7hMKyhWA==">(function(){window.google={kEI:'0aFfYJ2TDruv0PEPzOubwAU',kEXPI:'31',kBL:'jmEJ'};google.sn='web';google.kHL='en';})();(function(){
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

got the latest version of the http, json, tcl and tls package? because it works here :lol:

Thats the only things i can think would affect

Also what did you search? it might not be full proof from weird searches, like !google {foo}
Last edited by ComputerTech on Sat Mar 27, 2021 5:25 pm, edited 1 time in total.
ComputerTech
s
simo
Revered One
Posts: 1071
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

oh it needs API i dont have that yet only been using YT API
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

ah, you can find the custom search api from the same google api console :wink:

(Instructions in Description)


Future Note: i am going to remove the api option soon and hopefully "scrape" from the google
search engine, like incith once did :P
ComputerTech
Post Reply