class PPC::API::Baidu::Report

Constants

Device_map
Level_map
Service
Type_map

需要用到的映射集合

Unit_map

Public Class Methods

get_id( auth, params ) click to toggle source

API wraping function #

# File lib/ppc/api/baidu/report.rb, line 23
def self.get_id( auth, params  )
  request = make_reportrequest( params )
  body =  { reportRequestType:  request }
  response = request( auth, Service, 'getProfessionalReportId' ,body) 
  process( response, 'reportId' ){ |x| x[0]["reportId"] }
end
get_state( auth, id ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 30
def self.get_state( auth, id )
  '''
  input id should be string
  '''
  status = {1=>'Waiting' ,2=>'Opearting' ,3=>'Finished'}
  body = { reportId:  id }
  response = request( auth, Service, 'getReportState' ,body)
  process( response, 'isGenerated' ){ |x| status[x[0]["isGenerated"]] }
end
get_url( auth, id ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 40
def self.get_url( auth, id  )
  body = { reportId:  id }
  response = request( auth, Service, 'getReportFileUrl' ,body)
  process( response, 'reportFilePath' ){ |x| x[0]["reportFilePath"] }       
end

Private Class Methods

account_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 101
def self.account_report( auth, param = {} )
  param[:type]   ||= 'account'
  param[:fields] ||=  %w(impression click cpc cost ctr cpm conversion)
  param[:level]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
creative_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 83
def self.creative_report( auth, param = {} )
  param[:type]   ||= 'creative'
  param[:fields] ||=  %w(impression click cpc cost ctr cpm position conversion)
  param[:level]  ||= 'creative'
  param[:range]  ||= 'creative'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
download_report( auth, param ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 125
def self.download_report( auth, param )
  p param
  response = get_id( auth, param )
  if response[:succ]
    id = response[:result]
    p "Got report id:" + id.to_s if ENV["DEBUG"] 
    loop do
      sleep 2 
      break if get_state( auth, id )[:result].to_s[/(Finished|3)/]
      p "Report is not generated, waiting..." if ENV["DEBUG"] 
    end

    url = get_url( auth, id )[:result]
    return open(url).read.force_encoding('gb18030').encode('utf-8')
  else
    raise response[:failure][0]["message"]
  end
end
group_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 117
def self.group_report( auth, param = {} )
  param[:type]   ||= 'group'
  param[:fields] ||=  %w(impression click cpc cost ctr cpm conversion)
  param[:level]  ||= 'group'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
keyword_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 92
def self.keyword_report( auth, param = {} )
  param[:type]   ||= 'keyword'
  param[:fields] ||=  %w(impression click cpc cost ctr cpm position conversion)
  param[:level]  ||= 'keywordid'
  param[:range]  ||= 'keywordid'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
make_reportrequest( param ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 47
def self.make_reportrequest( param )
  """
  make RepoerRequestType
  ==============
  @Input : :fields,:type,:level,:range,:unit,:device,:id_only,:startDate:endDate
  ==============
  Note:
    We cast [ type, level, range, unit,device ] from int to string.
  For more information please see those map at the begining of the file
  """
  requesttype = {}
  requesttype[:performanceData]   =     param[:fields]  || %w(click impression)
  requesttype[:reportType]        =     Type_map[ param[:type] ]      if  param[:type]
  requesttype[:levelOfDetails]    =     Level_map[  param[:level] ]   if param[:level]
  requesttype[:statRange]         =     Level_map[ param[:range] ]    if param[:range]
  requesttype[:unitOfTime]        =     Unit_map[ param[:unit] ]      if param[:unit]
  requesttype[:device]            =     Device_map[ param[:device] ]  if param[:device]
  requesttype[:idOnly]            =     param[:id_only] || false
  requesttype[:startDate]         =     Time.parse( param[:startDate] ) rescue Time.now - 86400
  requesttype[:endDate]           =     Time.parse( param[:endDate] )   rescue Time.now - 86400
  requesttype[:statIds]           =     param[:statIds]               if param[:statIds]
  requesttype
end
plan_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/baidu/report.rb, line 109
def self.plan_report( auth, param = {} )
  param[:type]   ||= 'plan'
  param[:fields] ||=  %w(impression click cpc cost ctr cpm conversion)
  param[:level]  ||= 'plan'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
query_report( auth, param = {} ) click to toggle source

useful function for operation #

# File lib/ppc/api/baidu/report.rb, line 74
def self.query_report( auth, param = {} )
  param[:type]   ||= 'query'
  param[:fields] ||=  %w(click impression)
  param[:level]  ||= 'pair'
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end