class PPC::API::Sm::Report

Constants

Device_map
Level_map
Service
Type_map

需要用到的映射集合

Unit_map

Public Class Methods

get_file( auth, id ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 40
def self.get_file( auth,  id  )
  request( auth, 'file' , 'download' , {fileId: id} )
end
get_fileId( auth, id ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 35
def self.get_fileId( auth,  id  )
  response = request( auth, 'task' , 'getTaskState' , {taskId: id} )
  process( response, 'fileId' ){ |x| x }
end
get_id( auth, params ) click to toggle source

API wraping function #

# File lib/ppc/api/sm/report.rb, line 24
def self.get_id( auth, params  )
  body = make_reportrequest( params )
  response = request( auth, 'report' , 'getReport' ,body)
  process( response, 'taskId' ){ |x| x }
end
get_state( auth, id ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 30
def self.get_state( auth, id )
  response = request( auth, 'task' , 'getTaskState' , {taskId: id} )
  process( response, 'status' ){ |x| x }
end

Private Class Methods

account_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 96
def self.account_report( auth, param = {} )
  param[:type]   ||= 'account'
  param[:fields] ||=  %w(click impression cost cpc ctr)
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
creative_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 80
def self.creative_report( auth, param = {} )
  param[:type]   ||= 'creative'
  param[:fields] ||=  %w(click impression)
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
download_report( auth, param ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 120
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"]
    loop do
      sleep 2
      break if get_state( auth, id )[:result] == 'FINISHED'
      p "Report is not generated, waiting..." if ENV["DEBUG"]
    end
    fileId = get_fileId(auth, id)[:result]
    return get_file(auth, fileId).force_encoding("utf-8")
  else
    raise response[:failure][0]["message"]
  end
end
group_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 112
def self.group_report( auth, param = {} )
  param[:type]   ||= 'group'
  param[:fields] ||=  %w(click impression cost cpc ctr)
  param[:range]  ||= 'group'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
keyword_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 88
def self.keyword_report( auth, param = {} )
  param[:type]   ||= 'keyword'
  param[:fields] ||=  %w(click impression cost cpc ctr)
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end
make_reportrequest( param ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 45
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 cost cpc ctr)
  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]         =     Date.parse( param[:startDate] ) rescue Date.today
  requesttype[:endDate]           =     Date.parse( param[:endDate] ) rescue Date.today
  requesttype[:statIds]           =     param[:statIds] if param[:type] == "keyword" && param[:range] != "account"
  return requesttype
end
plan_report( auth, param = {} ) click to toggle source
# File lib/ppc/api/sm/report.rb, line 104
def self.plan_report( auth, param = {} )
  param[:type]   ||= 'plan'
  param[:fields] ||=  %w(click impression cost cpc ctr)
  param[:range]  ||= '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/sm/report.rb, line 72
def self.query_report( auth, param = {} )
  param[:type]   ||= 'query'
  param[:fields] ||=  %w(click impression)
  param[:range]  ||= 'account'
  param[:unit]   ||= 'day'
  download_report( auth, param )
end