Module: Request

Included in:
Basuco, Basuco::Api, Basuco::Search, Basuco::Trans
Defined in:
lib/basuco/request.rb

Defined Under Namespace

Classes: AttributeNotFound, PropertyNotFound, ReadError, ResourceNotFound, TopicNotFound, ViewNotFound

Constant Summary collapse

SERVICES =
{
  :mqlread => '/api/service/mqlread',
  :mqlwrite => '/api/service/mqlwrite',
  :blurb => '/api/trans/blurb/guid/',
  :raw => '/api/trans/raw/guid/',
  :login => '/api/account/login', #not done
  :logout => '/api/account/logout', #not done
  :upload => '/api/service/upload',
  :topic => '/experimental/topic',
  :search => '/api/service/search',
  :status => '/api/status', #not done
  :thumb => 'api/trans/image_thumb'

}

Instance Method Summary collapse

Instance Method Details

#get_query_response(query, cursor = nil) ⇒ Object

returns parsed json response from freebase mqlread service



57
58
59
60
61
62
63
64
65
66
# File 'lib/basuco/request.rb', line 57

def get_query_response(query, cursor=nil)
  envelope = { :qname => {:query => query, :escape => false }}
  envelope[:qname][:cursor] = cursor if cursor
  
  response = http_request mqlread_service_url, :queries => envelope.to_json
  result = JSON.parse response
  inner = result['qname']
  handle_read_error(inner)
  inner
end

#handle_read_error(inner) ⇒ Object

raise an error if the inner response envelope is encoded as an error



49
50
51
52
53
54
# File 'lib/basuco/request.rb', line 49

def handle_read_error(inner)
  unless inner['code'][0, '/api/status/ok'.length] == '/api/status/ok'
    error = inner['messages'][0]
    raise ReadError.new(error['code'], error['message'])
  end
end

#http_request(url, parameters = {}) ⇒ Object

does the dirty work



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

def http_request(url, parameters = {})
  params = params_to_string(parameters)
  url << '?'+params unless params !~ /\S/
        
  return Net::HTTP.get_response(::URI.parse(url)).body
  
  fname = "#{MD5.md5(params)}.mql"
  open(fname,"w") do |f|
    f << response
  end
end

#params_to_string(parameters) ⇒ Object

encode parameters



69
70
71
# File 'lib/basuco/request.rb', line 69

def params_to_string(parameters)
  parameters.keys.map {|k| "#{URI.encode(k.to_s)}=#{URI.encode(parameters[k].to_s)}" }.join('&')
end

#service_url(svc) ⇒ Object



18
19
20
# File 'lib/basuco/request.rb', line 18

def service_url(svc)
  "#{@host}#{SERVICES[svc]}"
end