class Baidu::Request

百度云推送API封装类

@attr_reader apisecret [String] 应用的secret @attr_reader options [Hash] 配置参数

Constants

API_URL

@private

REQUEST_GET

@private

Attributes

apisecret[R]
options[R]

Public Class Methods

new(apisecret,options = {}) click to toggle source
# File lib/baidu/request.rb, line 25
def initialize(apisecret,options = {})
        @apisecret = apisecret
        @options = {use_ssl: false}.merge(options)
        @sysinfo = SysInfo.new
end

Public Instance Methods

start(resource,method,params={}) click to toggle source
# File lib/baidu/request.rb, line 31
def start(resource,method,params={})
        uri = get_uri(resource,method)
        type = get_type(resource,method)
        send_request(uri,type,params)
end

Private Instance Methods

gen_sign(apisecret,requet_method,url,params) click to toggle source
# File lib/baidu/request.rb, line 76
def gen_sign(apisecret,requet_method,url,params)
        parameter = requet_method+url
        params.sort.each{|p|
                parameter = parameter + "#{p[0]}=#{p[1]}"
        }
        parameter = parameter + apisecret
        Digest::MD5.hexdigest(URI.encode_www_form_component(parameter))
end
get_type(resource,method) click to toggle source
# File lib/baidu/request.rb, line 59
def get_type(resource,method)
        if REQUEST_GET.has_key?(resource.to_sym) && REQUEST_GET[resource.to_sym].include?(method)
                'GET'
        else
                'POST'
        end
end
get_uri(resource,method) click to toggle source
# File lib/baidu/request.rb, line 55
def get_uri(resource,method)
        URI(get_url(resource,method))
end
get_url(resource,method) click to toggle source
# File lib/baidu/request.rb, line 67
def get_url(resource,method)
        http = @options[:use_ssl] ? 'https' : 'http'
        "#{http+API_URL}/#{resource}/#{method}"
end
http_response_to_baidu_response(response) click to toggle source
# File lib/baidu/request.rb, line 72
def http_response_to_baidu_response(response)
        Baidu::Response.new(response)
end
send_request(uri,type,params) click to toggle source
# File lib/baidu/request.rb, line 38
def send_request(uri,type,params)
        params = params.merge({sign:gen_sign(@apisecret,type,uri.to_s,params)})
        req = nil
        case type
        when 'GET'
                uri.query = URI.encode_www_form(params)
                req = Net::HTTP::Get.new(uri)
        when 'POST'
                req = Net::HTTP::Post.new(uri)
                req.set_form_data(params)
        end
        req['Content-Type'] = "application/x-www-form-urlencoded;charset=utf-8"
        req['User-Agent'] = "BCCS_SDK/3.0 (#{@sysinfo.os},#{@sysinfo.arch},#{@sysinfo.impl}) Ruby/#{RUBY_VERSION} (Baidu Push Server SDK V3.0.0)"
        response = Net::HTTP.start(uri.host,uri.port,use_ssl: @options[:use_ssl]){|http| http.request(req)}
        http_response_to_baidu_response(response)
end