class AdtekioAdnetworks::Revenue::Lifestreet

Public Instance Methods

add_global_stats(from, to) click to toggle source
# File lib/adtekio_adnetworks/importers/revenue/lifestreet.rb, line 22
def add_global_stats(from, to)
  # report comes split by country without a summary entry
  # over all countries, so add this summary.
  Hash[report(from,to)["data"].
       group_by { |a| [a["Date"], a["AdSlot.name"]] }.
       map do |(date, appname), values|
         [ [date,appname], values +
           [{ "Date"         => date,
              "AdSlot.name"  => appname,
              "Country.name" => nil,
              "adImps"       => values.map{ |a| a["adImps"] }.sum,
              "adCost"       => values.map{ |a| a["adCost"] }.sum }]]
       end]
end
report(from, to) click to toggle source
# File lib/adtekio_adnetworks/importers/revenue/lifestreet.rb, line 37
def report(from, to)
  uri = Addressable::URI.
    parse("https://my.lifestreetmedia.com/reporting/run/")
  request = Net::HTTP::Post.new uri.request_uri
  request.basic_auth credentials.username, credentials.password
  # body is cgi encoded parameter with json values.
  request.body = "data=" + ({
                              "measurements" => ["adImps", "adCost"],
                              "dimensions"   => ["Date", "AdSlot.name",
                                                 "Country.name"],
                              "start_date" => from.to_s,
                              "end_date"   => to.to_s,
                              "mobile"     => true
                            }.to_json)

  http = Net::HTTP.new(uri.hostname, 443)
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.use_ssl = true

  response = http.request(request)
  JSON.parse(response.body)
end
revenues(from, to) click to toggle source
# File lib/adtekio_adnetworks/importers/revenue/lifestreet.rb, line 8
def revenues(from, to)
  add_global_stats(from, to).map do |(date, appname), values|
    values.map do |dpt|
      {
        :appname     => appname,
        :date        => Date.strptime(date, "%Y-%m-%d"),
        :country     => dpt["Country.name"],
        :impressions => dpt["adImps"].to_i,
        :amount      => dpt["adCost"].to_f
      }
    end
  end.flatten
end