Skip to content

Instantly share code, notes, and snippets.

@saschagehlich
Created May 1, 2019 05:52
Show Gist options
  • Save saschagehlich/36d3584ea3812e59abdb9a2de05b9be0 to your computer and use it in GitHub Desktop.
Save saschagehlich/36d3584ea3812e59abdb9a2de05b9be0 to your computer and use it in GitHub Desktop.
require 'faraday_middleware'
ACCOUNT_BASE_URL = 'https://account.niu.com'
API_BASE_URL = 'https://app-api.niu.com'
class NiuApiService
def initialize(token = nil)
@token = token
@account_connection = Faraday.new(url: ACCOUNT_BASE_URL) do |faraday|
faraday.request :json
faraday.response :json, content_type: /\bjson$/
faraday.adapter Faraday.default_adapter
end
@account_connection.headers['Accept-Language'] = 'en-US'
@api_connection = Faraday.new(url: API_BASE_URL) do |faraday|
faraday.request :json
faraday.response :json, content_type: /\bjson$/
faraday.adapter Faraday.default_adapter
end
@api_connection.headers['Accept-Language'] = 'en-US'
unless @token.nil?
@api_connection.headers['token'] = @token
end
end
def login(params)
post_data = params.slice(:account, :countryCode, :password)
.to_unsafe_h
.map {|k, v| [k, v.to_s]}.to_h
response = @account_connection.post('/appv2/login', post_data)
raise ApplicationController::NotAuthorized unless response.status == 200
raise ApiAuthenticationError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_vehicles
response = @api_connection.post('/motoinfo/list', {})
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_motor_info(serial_number)
response = @api_connection.get('/v3/motor_data/index_info?sn=' + serial_number)
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_overall_tally(serial_number)
response = @api_connection.post('/motoinfo/overallTally', { sn: serial_number })
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_battery_info(serial_number)
response = @api_connection.get('/v3/motor_data/battery_info?sn=' + serial_number)
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_tracks(serial_number, index, limit)
response = @api_connection.post('/v3/motor_data/track', {
sn: serial_number,
index: index,
pagesize: limit.to_s
})
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
def get_track_details(serial_number, track_id, track_date)
response = @api_connection.post('/motoinfo/track/detail', {
date: track_date,
sn: serial_number,
trackId: track_id
})
raise ApiError.new(response.body['desc']) unless response.body['status'] == 0
return response.body['data']
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment