REBOL [
Title: "Fast Google Search"
Date: 11-May-2001
Version: 0.1.0
File: %google-search.r
Home: http://www.ross-gill.com/
Author: "Christopher Ross-Gill"
Owner: "Arran Multimedia Studio"
Rights: "Copyright ©2001 Arran Multimedia Studio"
Purpose: "To Utilise the Google Search Engine"
Usage: {
target-url: google-search "Apples Oranges"
}
]
;o) Encodes message to CGI notation
encode-cgi: func [
{Converts string to a CGI argument string.}
args [any-string!] "Starts at first argument word"
][
space-to-plus: func [arg /local seek chr] [
if any [none? arg empty? arg] [return ""]
seek: arg
while [seek: find seek #" "] [
change seek #"+"
seek: next seek
]
head arg
]
to-url space-to-plus copy args
]
;o) Get a Google response...
google-search: func [
{Returns top-ranking site from a Google Search}
search-string [any-string!] {Google search string}
][
trys: 0
while [
and trys < 3 error: error? try [
google-response: copy {}
google-port: open tcp://www.google.com:80
insert google-port rejoin [
{GET /search?q=} encode-cgi lowercase copy search-string
{&btnI=I'm+Feeling+Lucky HTTP/1.1} newline
{host: www.google.com} newline
{connection: close} newline newline
]
while [
google-wire: copy google-port
][
append google-response google-wire
]
close google-port
parse/all google-response [
thru {Location: }
copy google-result to newline
to end
]
google-result: to-url google-result
]
][
trys: trys + 1
wait 1
]
if error [google-result: 'error]
return google-result
]
;o) View the google
x-google: [
style field field edge [size: 2x2 color: black effect: none]
space 10
backdrop http://www.ross-gill.com/r/green.png effect [fit]
banner "Google Search"
text bold "Returns top Google match from search string"
across
i-search: field 230 "rebol"
btn 60 "Lookup" [o-url/text: google-search i-search/text show o-url]
return
o-url: field 230 "http://www.rebol.com/"
btn 60 "Browse" [browse to-url o-url/text]
btn 60 "Copy" [write clipboard:// o-url/text]
]
if not system/script/args [
view/title center-face layout x-google "Google Search"
]