¿Hay algún ejemplo de código abierto del uso de LocationLabs o Loc-Aid a través de Ruby?
-
27-10-2019 - |
Pregunta
LocationLabs y Aidio local son servicios de agregación de ubicación que exponen las API REST. Actualmente ofrecen SDK de Java, .NET y PHP. La API no es compleja pero, aún así, como herramienta de aprendizaje, sería bueno tener un tutorial o ejemplo de Ruby para jugar, extensión, etc.
Solución
Después de un análisis posterior, construí mi aplicación en Aidio localInfraestructura. Como no había muchos ejemplos de rubí que pudiera encontrar, estoy compartiendo un fragmento de mi aplicación.
# Get SAVON soap client locaid location services
# Parameters:
# - none
# Returns: SOAP client for locaid location services
def get_location_client
Savon::Client.new do
wsdl.document = LOCAID_CONFIG['use_local_wsdl'] ?
File.expand_path(LOCAID_CONFIG['get_location_wsdl'].to_s, ::Rails.root.to_s) :
LOCAID_CONFIG['get_location_wsdl'].to_s
wsdl.endpoint = LOCAID_CONFIG['get_location_endpoint'].to_s
end
end
# Strip the return result from locaid response as a hash
# Parameters:
# - raw_response: Raw response XMLfrom locaid services
# - response_name: Response name which wrap the response return result in locaid response XML
# Returns: Hash corresponding to the key "return" in locaid soap response hash.
# Sample Raw Response:
# {:subscribe_phone_response=>{:return=>{:error=>{:error_code=>"00001", :error_message=>"Invalid or inactive user"}, :transaction_id=>"14028251"},
# :"@xmlns:ns2"=>"http://webservice.portico.locaid.net/"}}
def strip_locaid_return(raw_response, response_name)
unless raw_response.to_hash.has_key?(response_name)
raise TropoExceptions::ExternalError
end
raw_response[response_name][:return]
end
# Get location from locaid by the caller id
# Parameters:
# - @caller_id: Caller id get from scope value
# Returns: none
def location_from_locaid
client = get_location_client
client.http.read_timeout = LOCAID_CONFIG['get_location_timeout'].to_i
# Call locaider service to get location
response = client.request :wsdl, :get_locations_x do |soap|
soap.body = {
:login => LOCAID_CONFIG['login'],
:password => LOCAID_CONFIG['password'],
:class_id => LOCAID_CONFIG['class_id'],
:msisdn_list => ["1#{@caller_id}"],
:coor_type => "DECIMAL",
:location_method => LOCAID_CONFIG['location_method'],
:sync_type => "SYN",
:overage => "1"
}
end
result_hash = strip_locaid_return(response, :get_locations_x_response)
if result_hash.has_key?(:error)
raise TropoExceptions::ExternalError
end
yield result_hash[:location_response].is_a?(Array) ?
result_hash[:location_response][0] :
result_hash[:location_response]
rescue Savon::Error, Timeout::Error => e
logger.error e
yield nil
end
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow