Question

LocationLabs et Loc -aid sont des services d'agrégation de localisation qui exposent les API REST. Ils offrent actuellement Java, .NET et PHP SDKs. L'API est pas complexe mais, encore, comme un outil d'apprentissage, il serait agréable d'avoir un tutoriel Ruby ou par exemple pour jouer, mesure, etc.

Était-ce utile?

La solution

Après analyse, j'ai construit ma demande sur Loc-Aid infrastructure de . Comme il n'y avait pas beaucoup d'exemples Ruby je pouvais trouver, je partage un extrait de mon application.

  # 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top