! Copyright (C) 2011 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
-USING: accessors arrays assocs assocs.extras classes.tuple
-colors.constants combinators formatting fry http.client io
-io.styles json.reader kernel sequences urls wrap.strings ;
+USING: accessors assocs.extras classes.tuple colors combinators
+formatting http.client io io.styles json.reader kernel sequences
+urls wrap.strings ;
IN: google.search
<PRIVATE
: search-url ( query -- url )
- URL" http://ajax.googleapis.com/ajax/services/search/web"
+ URL" http://ajax.googleapis.com/ajax/services/search/web" clone
"1.0" "v" set-query-param
swap "q" set-query-param
"8" "rsz" set-query-param
"0" "start" set-query-param ;
-: set-slots ( assoc obj -- )
- '[ swap _ set-slot-named ] assoc-each ;
-
-: from-slots ( assoc class -- obj )
- new [ set-slots ] keep ;
-
TUPLE: search-result cacheUrl GsearchResultClass visibleUrl
title content unescapedUrl url titleNoFormatting fileFormat ;
: google-search ( query -- results )
search-url http-get nip json>
- { "responseData" "results" } deep-at
+ { "responseData" "results" } deep-of
[ \ search-result from-slots ] map ;
<PRIVATE