Class: Faroo

Inherits:
Object
  • Object
show all
Defined in:
lib/faroo.rb

Constant Summary collapse

API_PATH =

API for Faroo search engine

Example:

>> Faroo.new('[Referer]', ['Num results']).search('nano fibers')
=> [ #<ClioResult:...>, ... ]

Arguments:

referer: (String)
num_results: (Integer+)
'http://www.faroo.com/instant.json?'
CHUNK_SIZE =
10
MAX_TTL =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(referer = '', num_results = 100) ⇒ Faroo

Returns a new instance of Faroo.



29
30
31
32
33
# File 'lib/faroo.rb', line 29

def initialize(referer='', num_results=100)
  @referer = referer
  @num_results = num_results
  @chunk_size = 10
end

Instance Attribute Details

#num_resultsObject

Returns the value of attribute num_results.



27
28
29
# File 'lib/faroo.rb', line 27

def num_results
  @num_results
end

#refererObject

Returns the value of attribute referer.



27
28
29
# File 'lib/faroo.rb', line 27

def referer
  @referer
end

Instance Method Details

#news(query, start = 1, language = 'en') ⇒ Object



39
40
41
# File 'lib/faroo.rb', line 39

def news(query, start=1, language='en')
  search(query, 'news', start, language)
end

#search(query, src, start, language) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/faroo.rb', line 43

def search(query, src, start, language)
  # API Parameters
  # q=query
  # start=start
  # length=length
  # l=language (en, de, zh)
  # src=source (web, news)

  # faster with 10
  params = "length=#{CHUNK_SIZE}&q=#{CGI.escape(query)}&src=#{src}&l=#{language}"
  results = []
  threads = []

  # Faroo API significantly faster when results are of size 10
  1.upto(@num_results / 10) do |start|
    threads << Thread.new(start) do |_start|
      url = "#{API_PATH}#{params}&start=#{(_start - 1) * CHUNK_SIZE + 1}"
      response = open(url, { 'Referer' => @referer })
      unless response.class.superclass == Net::HTTPServerError
        doc = JSON.load(response)
        results += doc['results']
      end
    end
  end

  threads.each { |thread| thread.join(MAX_TTL) }

  results.map do |result|
    FarooResult.new(
      result['title'],
      result['kwic'],
      result['url'],
      result['iurl'],
      result['domain'],
      result['author'],
      result['news'],
      result['votes'],
#        result['date'],
      Time.now,
      result['related']
    )
  end
end

#web(query, start = 1, language = 'en') ⇒ Object



35
36
37
# File 'lib/faroo.rb', line 35

def web(query, start=1, language='en')
  search(query, 'web', start, language)
end