module FitnessparkApi::HttpClient

Public Instance Methods

api_key() click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 69
def api_key
  return @api_key if @api_key

  html = get_html('https://www.migros-fitness.ch/karte')
  json = Oj.load(html.css('html').first.attribute('data-setup').value.gsub("'", '"'))
  @api_key = json['sessionKey']
end
ensure_successful_response(response) click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 51
def ensure_successful_response(response)
  return if response.code == '200'

  if response.body.to_s.strip.start_with?('{')
    error_json = Oj.load(response.body)
    if error_json.key?('error')
      msg = error_json['error']
      msg << ": #{error_json['message']}" if error_json.key?('message')
    else
      msg = error_json.to_s
    end
  else
    msg = "Unsuccessful response #{response.code}"
  end

  raise ResponseError, msg
end
get(uri, headers: {}, max_redirect_count: 10) click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 28
def get(uri, headers: {}, max_redirect_count: 10)
  uri = URI(uri) if uri.is_a?(String)

  request = Net::HTTP::Get.new(uri)
  headers.merge!('User-Agent' => user_agent, 'Origin' => 'https://www.migros-fitness.ch')
  headers.each { |name, value| request[name] = value }

  http = Net::HTTP.new(uri.hostname, uri.port)
  http.use_ssl = uri.scheme == 'https'
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  response = http.request(request)
  if response.is_a?(Net::HTTPRedirection) && response['location'] && max_redirect_count.positive?
    return get(response['location'], headers: headers, max_redirect_count: max_redirect_count - 1)
  end

  ensure_successful_response(response)
  response
end
get_center_volume_id(url) click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 23
def get_center_volume_id(url)
  html = get_html(url)
  html.css('.centerVolume').first.attribute('centerId').value.to_i
end
get_html(uri, headers: {}) click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 17
def get_html(uri, headers: {})
  response = get(uri, headers: headers)

  Oga.parse_html(response.body.force_encoding('UTF-8'))
end
get_json(uri, headers: {}) click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 11
def get_json(uri, headers: {})
  response = get(uri, headers: headers)

  Oj.load(response.body)
end
user_agent() click to toggle source
# File lib/fitnesspark_api/http_client.rb, line 47
def user_agent
  format(FitnessparkApi.config['user_agent'], version: VERSION)
end