Class: Report::Zeitgest

Inherits:
BaseReport show all
Defined in:
lib/mc/report.rb

Instance Method Summary collapse

Constructor Details

#initialize(api, list_id, year) ⇒ Zeitgest

Returns a new instance of Zeitgest.



96
97
98
99
100
# File 'lib/mc/report.rb', line 96

def initialize(api, list_id, year)
  super(api)
  @list_id = list_id
  @year    = year
end

Instance Method Details

#load_campaignsObject



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/mc/report.rb', line 107

def load_campaigns
  campaigns = []

  @api.campaigns_list(:filters => {:list_id => @list_id}, :limit => 100)['data'].each do |campaign|
    if campaign['send_time'] != nil && campaign['send_time'].match(/#{@year.to_s}/)
      campaigns << campaign
    end
  end

  return campaigns
end

#runObject



102
103
104
105
# File 'lib/mc/report.rb', line 102

def run
  @campaigns = load_campaigns
  yearly_most_popular
end


119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/mc/report.rb', line 119

def yearly_most_popular
  stats = {}
  max_rate = 0

  @campaigns.each do |campaign|
    @api.campaignClickStats(:cid => campaign['id']).each do |item|
      url, stat = item
      click_rate = (stat["clicks"] / campaign['emails_sent'].to_f) * 100
      max_rate = click_rate if click_rate > max_rate
      stats[url] = [click_rate, campaign['send_time'][5..6]]
    end
  end

  normalize = 100 / max_rate

  stats.sort_by { |url, clicks| clicks[0] }.reverse[0..100].each_with_index do |(url, data), index|
    click_rate, month = data
    puts "#{index}. #{url} - #{click_rate * normalize} in #{month}"
  end
end