USING: accessors arrays assocs hashtables http.client kernel sequences strings urls urls.encoding ; IN: goog-search.search ! USAGE: 1) "search string" search results ! 2) "search string" "faluninfo.net" >>site "num" 25 param search results TUPLE: google-query { url string read-only initial: "http://www.google.com/search" } { search string } { site string } { parameters hashtable } { raw-results } ; : avail-params ( -- hash ) H{ { "client" "opera" } { "rls" "en" } { "as_q" "" } { "filter" 0 } { "oe" "utf-8" } { "ie" "utf-8" } { "num" 100 } { "ft" "i" } { "sourceid" "opera" } { "start" 0 } ! 0-1000 { "safe" "off" } { "hl" "en" } { "as_filetype" f } { "as_occt" "any" } { "as_qdr" f } } clone ; : ( search -- tuple ) [ google-query new ] dip >>search avail-params >>parameters ; : param ( tuple key value -- tuple ) [ dup parameters>> ] 2dip spin ! tuple val key parameters set-at ; ! tuple > dup empty? [ drop f ] [ "site:" prepend ] if ; : (search-string) ( tuple -- str ) [ (site-str/f) ] [ search>> ] bi 2array harvest "+" join ; : (search-string>as_q) ( tuple str -- tuple ) "as_q" swap param ; PRIVATE> : search ( tuple -- tuple' ) dup [ url>> ] [ dup (search-string) (search-string>as_q) parameters>> assoc>query ] bi "?" glue >url http-get nip >>raw-results ;