Class: Basuco::Search

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

Overview

partially taken from chris eppstein’s freebase api github.com/chriseppstein/freebase/tree

Instance Method Summary collapse

Constructor Details

#initialize(options = {:host => 'http://www.freebase.com', :username => 'un', :password => 'pw'}) ⇒ Search

Returns a new instance of Search.



10
11
12
13
14
15
16
17
# File 'lib/basuco/search.rb', line 10

def initialize(options = {:host => 'http://www.freebase.com', :username => 'un', :password => 'pw'})
  @host = options[:host]
  @username = options[:username]
  @password = options[:password]
  Basuco.search = self

  # TODO: check connection
end

Instance Method Details

#all(options = {}) ⇒ Object

a Collection of Resources.



43
44
45
46
47
48
# File 'lib/basuco/search.rb', line 43

def all(options = {})
  #assert_kind_of 'options', options, Hash
  query = { :name => nil }.merge!(options).merge!(:id => nil)
  result = mqlread([ query ], :cursor => !options[:limit])    
  Basuco::Collection.new(result.map { |r| Basuco::Resource.new(r) })
end

#get(id) ⇒ Object

Executes an Mql Query against the Freebase API and returns the result wrapped in a Resource Object.

Examples

Basuco.get('/en/the_police') => #<Resource id="/en/the_police" name="The Police">


58
59
60
# File 'lib/basuco/search.rb', line 58

def get(id)
  Basuco::Resource.get(id)
end

#mqlread(query, options = {}) ⇒ Object

Perform a mqlread and return the results Specify :cursor => true to batch the results of a query, sending multiple requests if necessary. TODO: should support multiple queries

you should be able to pass an array of queries


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/basuco/search.rb', line 23

def mqlread(query, options = {})
  cursor = options[:cursor]
  if cursor
    query_result = []
    while cursor
      response = get_query_response(query, cursor)
      query_result += response['result']
      cursor = response['cursor']
    end
  else
    response = get_query_response(query, cursor)
    cursor = response['cursor']
    query_result = response['result']
  end
  query_result
end

#search(query, options = {}) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/basuco/search.rb', line 74

def search(query, options = {})
  options.merge!({:query => query})
  
  response = http_request search_service_url, options
  result = JSON.parse response
  
  handle_read_error(result)
  
  result['result']
end

#status?Boolean

yes or no

Returns:

  • (Boolean)


87
88
89
90
91
# File 'lib/basuco/search.rb', line 87

def status?
  response = http_request status_service_url
  result = JSON.parse response
  return result["code"] == "/api/status/ok"
end

#topic(id, options = {}) ⇒ Object



63
64
65
66
67
68
69
70
71
72
# File 'lib/basuco/search.rb', line 63

def topic(id, options = {})
  options.merge!({:id => id})

  response = http_request topic_service_url+"/standard", options
        --debugger
  result = JSON.parse response
  inner = result[id]
  handle_read_error(inner)
  inner['result']
end