Class: Blekko

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

Constant Summary collapse

API_PROTOCOL_HTTPS =

API for Blekko search engine

Example:

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

Arguments:

referer: (String)
num_results: (Integer+)
'https://'
API_PROTOCOL_HTTP =
'http://'
API_PATH =
'www.blekko.com/ws/?q='
CHUNK_SIZE =
10
MAX_TTL =
2
MIN_SECS_BTWN_REQS =
1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key = '', referer = '', num_results = 100, secure = true) ⇒ Blekko

Returns a new instance of Blekko.



32
33
34
35
36
37
38
# File 'lib/blekko.rb', line 32

def initialize(api_key='', referer='', num_results=100, secure=true)
  @api_protocol = secure ? API_PROTOCOL_HTTPS : API_PROTOCOL_HTTP
  @api_key = api_key
  @referer = referer
  @num_results = num_results
  @last_request = nil
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.



30
31
32
# File 'lib/blekko.rb', line 30

def api_key
  @api_key
end

#last_requestObject

Returns the value of attribute last_request.



30
31
32
# File 'lib/blekko.rb', line 30

def last_request
  @last_request
end

#num_resultsObject

Returns the value of attribute num_results.



30
31
32
# File 'lib/blekko.rb', line 30

def num_results
  @num_results
end

#refererObject

Returns the value of attribute referer.



30
31
32
# File 'lib/blekko.rb', line 30

def referer
  @referer
end

Instance Method Details

#search(query, page = 1) ⇒ Object



40
41
42
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
# File 'lib/blekko.rb', line 40

def search(query, page=1)
  # API Parameters
  # auth=api key
  # q=query
  # p=page
  # ps=num results

  params = "#{CGI.escape(query)}+/json+/ps=#{@num_results}&auth=#{@api_key}"

  url = "#{@api_protocol}#{API_PATH}#{params}&p=#{page}"

  # enforce rate limit
  sleep_for_rate_limit

  response = open(url, { 'Referer' => @referer })
  unless response.class.superclass == Net::HTTPServerError
    doc = JSON.load(response)
    @json = doc

    # if total_num is defined, then RESULTS is
    return [] unless doc['total_num']
    doc['RESULT'].map do |result|
      BlekkoResult.new(
        result['url_title'],
        result['snippet'],
        result['url'],
        result['display_url'],
        result['short_host'],
        result['short_host_url'],
        result['rss'],
        result['main_slashtag_boosted'],
        Time.now
      )
    end
  end
end