class AdtekioAdnetworks::Cost::Appia

Public Instance Methods

campaign_costs(from, till) click to toggle source
# File lib/adtekio_adnetworks/importers/cost/appia.rb, line 8
def campaign_costs(from, till)
  uri = Addressable::URI.
    parse("https://via.appia.com/pss/api/report/advertiser/performance.json")

  uri.query_values = {
    :startDate => from.strftime("%Y-%m-%d"),
    :endDate   => till.strftime("%Y-%m-%d"),
  }

  req = Net::HTTP::Get.new(uri.request_uri)
  req.basic_auth credentials.username, credentials.password

  res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true,
                        :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
    http.request(req)
  end

  results = JSON.parse(res.body, :symbolize_names => true)
  results[:performance][:campaigns].map do |campaign|
    campaign[:days].map do |metrics|

      clicks =
        metrics[:tiers].map {|tier| tier[:clickCount].to_i}.inject(:+)
      installs =
        metrics[:tiers].map {|tier| tier[:installCount].to_i}.inject(:+)
      spends = metrics[:tiers].map {|tier| tier[:spend].to_f}.inject(:+)

      next if spends.to_f == 0

      {
        :date        => Date.parse(metrics[:date]),
        :campaign    => campaign[:campaignName],
        :clicks      => clicks,
        :conversions => installs,
        :amount      => spends,
      }
    end.compact
  end.flatten
end