]> gitweb.factorcode.org Git - factor.git/blob - extra/yahoo/yahoo.factor
calendar.format: make duration>human-readable more human readable
[factor.git] / extra / yahoo / yahoo.factor
1 ! Copyright (C) 2006 Daniel Ehrenberg, Walton Chan
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: http.client xml xml.traversal kernel sequences
4 math.parser urls accessors ;
5 IN: yahoo
6
7 TUPLE: result title url summary ;
8
9 C: <result> result
10
11 TUPLE: search query results adult-ok start appid region type
12 format similar-ok language country site subscription license ;
13
14 : parse-yahoo ( xml -- seq )
15     "Result" deep-tags-named [
16         { "Title" "Url" "Summary" }
17         [ tag-named children>string ] with map
18         first3 <result>
19     ] map ;
20
21 CONSTANT: yahoo-url URL" http://search.yahooapis.com/WebSearchService/V1/webSearch"
22
23 :: param ( search url name quot -- search url )
24     search url search quot call
25     [ name set-query-param ] when* ; inline
26
27 : num-param ( search str quot -- search )
28     [ dup [ number>string ] when ] compose param ; inline
29
30 : bool-param ( search str quot -- search )
31     [ "1" and ] compose param ; inline
32
33 : query ( search -- url )
34     yahoo-url clone
35     "appid" [ appid>> ] param
36     "query" [ query>> ] param
37     "region" [ region>> ] param
38     "type" [ type>> ] param
39     "format" [ format>> ] param
40     "language" [ language>> ] param
41     "country" [ country>> ] param
42     "site" [ site>> ] param
43     "subscription" [ subscription>> ] param
44     "license" [ license>> ] param
45     "results" [ results>> ] num-param
46     "start" [ start>> ] num-param
47     "adult_ok" [ adult-ok>> ] bool-param
48     "similar_ok" [ similar-ok>> ] bool-param
49     nip ;
50
51 CONSTANT: factor-id "fRrVAKzV34GDyeRw6bUHDhEWHRedwfOC7e61wwXZLgGF80E67spxdQXuugBe2pgIevMmKwA-"
52
53 : <search> ( query -- search )
54     search new
55         factor-id >>appid
56         10 >>results
57         swap >>query ;
58
59 : yahoo-search ( search -- seq )
60     query http-get nip string>xml parse-yahoo ;