class Nutritionix::Api_1_1

Reference: github.com/mftaher/nutritionix-api-ruby-library/blob/master/lib/nutritionix.rb

Attributes

app_id[RW]
app_key[RW]
app_url[RW]
logger[RW]

Public Class Methods

new(id, key, url="https://api.nutritionix.com/v1_1", logger=APILogger.default_logger) click to toggle source

Create the Nutritionix API client.

@param id Nutritionix application ID @param key Nutritionix API key @param url (Optional) Nutritionix API url

# File lib/nutritionix/api_1_1.rb, line 19
def initialize(id, key, url="https://api.nutritionix.com/v1_1", logger=APILogger.default_logger)
  @app_id = id
  @app_key = key
  @app_url = url
  @logger = logger
end

Public Instance Methods

get_item(id) click to toggle source

This operation returns an item object that contains data on all its nutritional content

@param id string The id of the food item whose details are needed

@return the item details as json string

# File lib/nutritionix/api_1_1.rb, line 153
def get_item(id)
  get_request(id, 'item', {})
end
get_request(query, endpoint, params={}) click to toggle source

Sends a GET request to the Nutritionix API Server

@param query string Query or search term / phrase @param endpoint The endpoint to send the request to.Current valid type is: search, item, brand

@param params a hash containing required query, filters, etc options as defined by developer.nutritionix.com/docs/v1_1 Nutritionix Querying Language (NXQL) convertible to a valid JSON.

@return The request result or error as json string

# File lib/nutritionix/api_1_1.rb, line 70
def get_request(query, endpoint, params={})
  query = ::CGI::escape(query)
  params = sanitize_params(params)
  add_creds_to_params(params)

  serialized_params = serialize_params(params)

  url_components = [@app_url, endpoint]
  if 'item' == endpoint
    # Heroku using older version of Ruby prepend method on String is
    # not available.Thus using String's insert method
    serialized_params.insert(0, "id=#{query}&")
  else
    url_components << query
  end

  url =  "#{url_components.join('/')}?#{serialized_params}"
  logger.debug "GET request URL: #{url}"
  header = {}
  begin
    response = RestClient.get url, header
  rescue Exception => e
    logger.error "==================================================="
    logger.debug "An exception occured while processing GET request to url: #{url}"
    logger.error e.to_s
    logger.error "==================================================="
    response = { error: e.message}.to_json
  end

  response
end
post_request(endpoint, params={}) click to toggle source

Sends a POST request to the Nutritionix API Server

@param endpoint The endpoint to send the request to.Current valid type is: search

@param params a hash containing required query, filters, etc options as defined by developer.nutritionix.com/docs/v1_1 Nutritionix Querying Language (NXQL) convertible to a valid JSON.

@return The request result or error as json string

# File lib/nutritionix/api_1_1.rb, line 36
def post_request(endpoint, params={})
  params = sanitize_params(params)
  add_creds_to_params(params)

  params_json = params.to_json
  logger.debug "======POST Request Params Json: #{params_json}"

  url = [@app_url, endpoint].join('/')
  logger.debug "POST request URL: #{url}"
  begin
    # Reference: http://rubydoc.info/gems/rest-client/1.6.7/RestClient.post
    response = RestClient.post(url, params_json, content_type: 'application/json')
  rescue Exception => e
    logger.error "==================================================="
    logger.debug "An exception occured while processing POST request to url: #{url}"
    logger.error e.to_s
    logger.error "==================================================="
    response = { error: e.message}.to_json
  end

  response
end

Private Instance Methods

add_creds_to_params(params) click to toggle source
# File lib/nutritionix/api_1_1.rb, line 159
def add_creds_to_params(params)
  params[:appId] = @app_id
  params[:appKey] = @app_key
end
sanitize_params(params) click to toggle source
# File lib/nutritionix/api_1_1.rb, line 164
def sanitize_params(params)
  params = {} unless params.is_a? Hash
  params
end
serialize_params(params) click to toggle source
# File lib/nutritionix/api_1_1.rb, line 169
def serialize_params(params)
  request_params = []
  params.each do |key, value|
     request_params << "#{key}=#{::CGI::escape(value)}" unless value.nil?
  end
  request_params.join('&')
end