statwhore 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ * 0.0.4 - Added new #pageviews_by_day and #visits_by_day methods which return collection of days and values
1
2
  * 0.0.3 - updated to new google api and switched to rspec
2
3
  * 0.0.2 - switched to googlebase for google auth and requests
3
4
  * 0.0.1 - initial relase
@@ -5,6 +5,7 @@ README.txt
5
5
  Rakefile
6
6
  config/hoe.rb
7
7
  config/requirements.rb
8
+ examples/profiles.rb
8
9
  lib/statwhore.rb
9
10
  lib/statwhore/connection.rb
10
11
  lib/statwhore/google.rb
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../lib/statwhore'
2
+ require 'ostruct'
3
+ require 'yaml'
4
+
5
+ include Statwhore::Google::Analytics
6
+
7
+ logger = Logger.new('../log/debug.log')
8
+ config = YAML::load(open(ENV["HOME"] + '/.statwhore'))
9
+ Google::Base.establish_connection(config[:username], config[:password])
10
+
11
+ class Site < OpenStruct; end
12
+
13
+ live = [
14
+ Site.new(:account => 344381, :profile => 3939049, :name => 'ace'),
15
+ Site.new(:account => 344381, :profile => 4804412, :name => 'admissions'),
16
+ Site.new(:account => 344381, :profile => 6345870, :name => 'building_communities'),
17
+ Site.new(:account => 344381, :profile => 8071820, :name => 'campus_ministry'),
18
+ Site.new(:account => 344381, :profile => 4505702, :name => 'career'),
19
+ Site.new(:account => 344381, :profile => 5190819, :name => 'committees'),
20
+ Site.new(:account => 344381, :profile => 3090719, :name => 'conductor'),
21
+ Site.new(:account => 344381, :profile => 4900769, :name => 'enlighten'),
22
+ Site.new(:account => 344381, :profile => 5190683, :name => 'green'),
23
+ Site.new(:account => 344381, :profile => 5309061, :name => 'issa'),
24
+ Site.new(:account => 344381, :profile => 1027308, :name => 'law'),
25
+ Site.new(:account => 344381, :profile => 8220615, :name => 'old2gold'),
26
+ Site.new(:account => 1254221, :profile => 2420755, :name => 'pray'),
27
+ Site.new(:account => 344381, :profile => 6085464, :name => 'summer_scholars'),
28
+ Site.new(:account => 344381, :profile => 4263845, :name => 'vocation'),
29
+ Site.new(:account => 344381, :profile => 543890, :name => 'webgroup')
30
+ ]
31
+
32
+ # dates = {:from => Time.mktime(2007, 10, 1), :to => Time.now}
33
+ # dates = {:from => Time.mktime(2008, 1, 1), :to => Time.now}
34
+ dates = {:from => Time.mktime(2008, 4, 1), :to => Time.now}
35
+ puts live.inject(0) { |total, site|
36
+ views = Profile.find(site.account, site.profile).pageviews(dates)
37
+ puts "#{views} - #{site.name}"
38
+ total += views
39
+ total
40
+ }
@@ -50,17 +50,19 @@ module Statwhore
50
50
  end
51
51
 
52
52
  def pageviews(options={})
53
- response = report(options.merge({:report => 'Dashboard'}))
54
- doc = Hpricot::XML(response)
55
- pageviews = (doc/:ItemSummary).detect { |summary| summary.at('Message').inner_html == 'Pageviews' }
56
- pageviews && pageviews.at('SummaryValue') ? pageviews.at('SummaryValue').inner_html.gsub(/\D/, '').to_i : 0
53
+ get_item_summary_by_message(options.merge(:message => 'pageviews'))
54
+ end
55
+
56
+ def pageviews_by_day(options={})
57
+ get_serie_by_label(options.merge({:label => 'pageviews'}))
57
58
  end
58
59
 
59
60
  def visits(options={})
60
- response = report(options.merge({:report => 'Dashboard'}))
61
- doc = Hpricot::XML(response)
62
- pageviews = (doc/:ItemSummary).detect { |summary| summary.at('Message').inner_html == 'Visits' }
63
- pageviews && pageviews.at('SummaryValue') ? pageviews.at('SummaryValue').inner_html.gsub(/\D/, '').to_i : 0
61
+ get_item_summary_by_message(options.merge(:message => 'visits'))
62
+ end
63
+
64
+ def visits_by_day(options={})
65
+ get_serie_by_label(options.merge({:label => 'visits'}))
64
66
  end
65
67
 
66
68
  # takes a Date, Time or String
@@ -71,6 +73,29 @@ module Statwhore
71
73
  def to_s
72
74
  "#{name} (#{profile_id})"
73
75
  end
76
+
77
+ private
78
+ def get_item_summary_by_message(options={})
79
+ raise ArgumentError unless options.has_key?(:message)
80
+ message = options.delete(:message).to_s.capitalize
81
+ response = report(options.merge({:report => 'Dashboard'}))
82
+ doc = Hpricot::XML(response)
83
+ pageviews = (doc/:ItemSummary).detect { |summary| summary.at('Message').inner_html == message }
84
+ pageviews && pageviews.at('SummaryValue') ? pageviews.at('SummaryValue').inner_html.gsub(/\D/, '').to_i : 0
85
+ end
86
+
87
+ def get_serie_by_label(options={})
88
+ raise ArgumentError unless options.has_key?(:label)
89
+ label = options.delete(:label).to_s.capitalize
90
+ response = report(options.merge({:report => 'Dashboard'}))
91
+ doc = Hpricot::XML(response)
92
+ serie = (doc/:Serie).detect { |serie| serie.at('Label').inner_html == label }
93
+ if serie
94
+ (serie/:Point).inject([]) { |collection, point| collection << [Date.parse(point.at('Label').inner_html), point.at('Value').inner_html.to_i] }
95
+ else
96
+ []
97
+ end
98
+ end
74
99
  end
75
100
  end
76
101
  end
@@ -2,7 +2,7 @@ module Statwhore #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -35,6 +35,16 @@ describe "Statwhore::Google::Analytics::Profile" do
35
35
  profile.pageviews.should == 283
36
36
  end
37
37
 
38
+ it "should be able to get pageviews by day" do
39
+ profile = Statwhore::Google::Analytics::Profile.new(:account_id => 344381, :profile_id => 543890)
40
+ xml = open(File.dirname(__FILE__) + '/fixtures/dashboard_report_webgroup.xml').read
41
+ Statwhore::Google::Analytics::Profile.should_receive(:get).and_return(xml)
42
+ dates = profile.pageviews_by_day
43
+ dates.first.should == [Date.civil(2008, 2, 8), 72]
44
+ dates.last.should == [Date.civil(2008, 3, 9), 0]
45
+ dates.size.should == 31
46
+ end
47
+
38
48
  it "should be able to get visits" do
39
49
  profile = Statwhore::Google::Analytics::Profile.new(:account_id => 344381, :profile_id => 543890)
40
50
  xml = open(File.dirname(__FILE__) + '/fixtures/dashboard_report_webgroup.xml').read
@@ -42,4 +52,14 @@ describe "Statwhore::Google::Analytics::Profile" do
42
52
  profile.visits.should == 228
43
53
  end
44
54
 
55
+ it "should be able to get visits by day" do
56
+ profile = Statwhore::Google::Analytics::Profile.new(:account_id => 344381, :profile_id => 543890)
57
+ xml = open(File.dirname(__FILE__) + '/fixtures/dashboard_report_webgroup.xml').read
58
+ Statwhore::Google::Analytics::Profile.should_receive(:get).and_return(xml)
59
+ dates = profile.visits_by_day
60
+ dates.first.should == [Date.civil(2008, 2, 8), 67]
61
+ dates.last.should == [Date.civil(2008, 3, 9), 0]
62
+ dates.size.should == 31
63
+ end
64
+
45
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statwhore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - FIXME full name
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-12 00:00:00 -04:00
12
+ date: 2008-05-13 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -58,6 +58,7 @@ files:
58
58
  - Rakefile
59
59
  - config/hoe.rb
60
60
  - config/requirements.rb
61
+ - examples/profiles.rb
61
62
  - lib/statwhore.rb
62
63
  - lib/statwhore/connection.rb
63
64
  - lib/statwhore/google.rb