class PPC::API::Sogou::Report

Constants

Device_map
Range_map
Service
Type_map

需要用到的映射集合

Unit_map

Public Class Methods

get_id( auth, params ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 19
def self.get_id( auth, params )
  request = make_reportrequest( params )
  body =  { reportRequestType: request }
  response = request( auth, Service, 'getReportId' ,body) 
  process( response, 'reportId' ){ |x| x }
end
get_state( auth, id ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 26
def self.get_state( auth, id )
  '''
  input id should be string
  '''
  status = {'-1'=>'Waiting' ,'0'=>'Opearting' ,'1'=>'Finished'}
  body = { reportId:  id }
  response = request( auth, Service, 'getReportState' ,body)
  process( response, 'isGenerated' ){ |x| status[x] }
end
get_url( auth, id ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 36
def self.get_url( auth, id )
  body = { reportId:  id }
  response = request( auth, Service, 'getReportPath' ,body)
  process( response, 'reportFilePath' ){ |x| x }       
end

Private Class Methods

account_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 108
def self.account_report( auth, param = {} )
  param[:type]   ||= 'account'
  param[:fields] ||=  %w( cost cpc click impression ctr )
  param[:range]  ||= 'account'
  download_report( auth, param )
end
creative_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 94
def self.creative_report( auth, param = {} )
  param[:type]   ||= 'creative'
  param[:fields] ||=  %w( cost cpc click impression ctr )
  param[:range]  ||= 'account'
  download_report( auth, param )
end
download_report( auth, param ) click to toggle source

intreface for Operation #

# File lib/ppc/api/sogou/report.rb, line 66
def self.download_report( auth, param )
  response = get_id( auth, param )
  if response[:succ]
    id = response[:result]
    p "Got report id:" + id.to_s if ENV["DEBUG"] 
    times = 0
    loop do
      raise "The speed of get_status is too slow." if (times += 1) > 10
      break if get_state( auth, id )[:result] == 'Finished'
      p "Report is not generated, waiting..." if ENV["DEBUG"] 
      sleep 5
    end

    url = get_url( auth, id )[:result]
    ActiveSupport::Gzip.decompress( open(url).read ).force_encoding('gb18030').encode('utf-8')
  else
    raise response[:failure][:message]
  end
end
group_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 122
def self.group_report( auth, param = {} )
  param[:type]   ||= 'group'
  param[:fields] ||=  %w( cost cpc click impression ctr)
  param[:range]  ||= 'group'
  download_report( auth, param )
end
keyword_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 101
def self.keyword_report( auth, param = {} )
  param[:type]   ||= 'keyword'
  param[:fields] ||=  %w( cost cpc click impression ctr )
  param[:range]  ||= 'account'
  download_report( auth, param )
end
make_reportrequest( param ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 43
def self.make_reportrequest( param )
  '''
  make RepoerRequestType
  ======================
  For more docs please have a look at
  ::PPC::API::Baidu::Report:make_reportrequest()
  '''
  requesttype = {}
  requesttype[:performanceData]    =     param[:fields] || %w(click)
  requesttype[:reportType]         =     Type_map[ param[:type] ]        if  param[:type] 
  requesttype[:statRange]          =     Range_map[ param[:range] ]      if param[:range]
  requesttype[:unitOfTime]         =     Unit_map[ param[:unit] ]        if param[:unit] 
  requesttype[:platform]           =     Device_map[ param[:device] ]    if param[:device]
  requesttype[:idOnly]             =     param[:id_only]                 if param[:id_only]!=nil
  requesttype[:startDate]          =     (Time.parse( param[:startDate] ) rescue Time.now - 86400).utc.iso8601
  requesttype[:endDate]            =     (Time.parse( param[:endDate] ) rescue Time.now - 86400).utc.iso8601
  requesttype[:statIds]            =     param[:statIds]                 if param[:statIds]
  return requesttype
end
plan_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 115
def self.plan_report( auth, param = {} )
  param[:type]   ||= 'plan'
  param[:fields] ||=  %w( cost cpc click impression ctr )
  param[:range]  ||= 'plan'
  download_report( auth, param )
end
query_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sogou/report.rb, line 86
def self.query_report( auth, param = {} )
  param[:type]   ||= 'query'
  param[:fields] ||=  %w(click)
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end