class AdtekioAdnetworks::Cost::Nanigans

Constants

APPLE_SHARE
REVENUE_UPDATE_DATE

Public Instance Methods

booking_days(date) click to toggle source
# File lib/adtekio_adnetworks/importers/cost/nanigans.rb, line 21
def booking_days(date)
  max_days = (Date.today - date).to_i
  [1, 2, 3, 7, 14, 30, 60, 90, 120].select do |day|
    day <= max_days
  end
end
campaign_costs(from, till) click to toggle source
# File lib/adtekio_adnetworks/importers/cost/nanigans.rb, line 84
def campaign_costs(from, till)
  [:mobile, :flash].map do |game_type|
    campaign_data(from, till, game_type).map do |campaign|
      next if campaign[:budget_pool] =~ /rtb/i
      next if campaign[:fb_spend_wfees].to_f == 0.0

      date = Date.parse(campaign[:date])
      [:impressions, :clicks, :a1, :purchase_users, :purchase_value].each do |key|
        campaign[key] = nil if campaign[key].to_f == 0.0
      end

      campaign_name = game_type == :flash ? campaign[:placement_id] : campaign[:ad_plan]
      country = campaign[:countries].try(:downcase).try(:split, /_|,/).try(:last)
      device = campaign[:user_device].try(:downcase).try(:split, /_|,/).try(:last)

      {
        :date           => date,
        :campaign       => campaign_name,
        :adgroup        => country,
        :ad             => device,
        :impressions    => campaign[:impressions].try(:to_i),
        :clicks         => campaign[:clicks].try(:to_i),
        :conversions    => campaign[:a1].try(:to_i),
        :amount         => campaign[:fb_spend_wfees].try(:to_f),
        :target_country => country,
        :target_device  => device,
      }
    end.compact
  end.flatten
end
campaign_data(from, till, game_type) click to toggle source
# File lib/adtekio_adnetworks/importers/cost/nanigans.rb, line 44
def campaign_data(from, till, game_type)
  time_gmt = Time.now().getgm.strftime("%Y%m%d%H%M%S")
  sig_string = "#{credentials.partner_id}&#{time_gmt}&#{credentials.secret}"
  sig = Digest::SHA1.base64digest(sig_string)
  sig = sig.gsub('+','.').gsub('/', '_')

  uri = Addressable::URI.parse("https://wwwapi.nanigans.com/reporting/api/wooga/generateAdLevelReport")
  http = Net::HTTP.new(uri.hostname, 443)
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.use_ssl = true
  http.ssl_timeout = 900
  http.read_timeout = 900

  from.upto(till).map do |date|
    booking_fields = booking_days(date).map {|day| day_to_nanigans_field(day)}
    fields = [:site, :budget_pool, :ad_plan, :countries, :user_device]
    fields = fields.push(:placement_id) if game_type == :flash
    data = {
      :method => :generateAdLevelReport,
      :params => {
        :partner_id   => credentials.partner_id,
        :tms          => time_gmt,
        :sig          => sig,
        :date         => date.to_s,
        :attribution  => :click,
        :fields       => fields,
        :metrics      => [:impressions, :clicks, :a1, :fb_spend_wfees, :purchase_value, :purchase_users, :a5val] + booking_fields
      }
    }

    request = Net::HTTP::Post.new(uri.request_uri,
                                  {"Content-Type" => "application/json"})
    request.basic_auth credentials.username, credentials.password
    request.body = data.to_json

    res = http.request(request)
    JSON.parse(res.body, :symbolize_names => true)[:_data][:data]
  end.flatten
end
day_to_nanigans_field(day) click to toggle source
# File lib/adtekio_adnetworks/importers/cost/nanigans.rb, line 28
def day_to_nanigans_field(day)
  case day.to_i
  when 1 then :a8val
  when 2 then :a9val
  when 3 then :a10val
  when 7 then :a5val
  when 14 then :a11val
  when 30 then :a12val
  when 60 then :a13val
  when 90 then :a14val
  when 120 then :a15val
  else
    raise "invalid day"
  end
end