ranalytics 0.1.071029125738

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.
Files changed (3) hide show
  1. data/README +69 -0
  2. data/lib/ranalytics.rb +165 -0
  3. metadata +47 -0
data/README ADDED
@@ -0,0 +1,69 @@
1
+ = ranalytics -- Ruby Google Analytics interface, inspired by Burnalytics
2
+
3
+ Author:: Mirek Rusin
4
+
5
+ Copyright (c) 2007 Mirek Rusin, parts of code stolen from Burnalitics
6
+
7
+ You can redistribute it and/or modify it under the same terms as Ruby.
8
+
9
+ = ranalytics -- Ruby Google Analytics interface, inspired by Burnalytics
10
+
11
+ == Examples
12
+
13
+ To iterate all profiles (websites) inside your google analytics account
14
+
15
+ require 'ranalytics'
16
+ analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
17
+ analytics.profiles.each do |profile|
18
+ puts profile.name
19
+ end
20
+
21
+ To retrieve hits from the first profile
22
+
23
+ require 'ranalytics'
24
+ analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
25
+ profile = analytics.profiles.first
26
+ puts profile.visits(Date.today) # prints visits for specific day (Date instance)
27
+ puts profile.visits('20070101-20070131) # prints visits for the range (String)
28
+ Or you can use predefined Symbols:
29
+ puts profile.visits(:yesterday)
30
+ puts profile.visits(:last_7_days)
31
+ puts profile.visits(:last_week)
32
+
33
+ To get stats for each day, you can:
34
+
35
+ require 'ranalytics'
36
+ analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
37
+ profile = analytics.profiles.first
38
+ for date in Date.parse('2007-01-01')..Date.today
39
+ puts profile.visits(date)
40
+ end
41
+
42
+ == Download
43
+
44
+ The latest version of ranalytics can be found at
45
+
46
+ * http://mirekrusin.com/ruby/ranalytics
47
+
48
+ Documentation can be found at
49
+
50
+ * http://mirekrusin.com/ruby/ranalytics
51
+
52
+ == Installation
53
+
54
+ The preferred method of installing ranalytics is through its GEM file. You'll need to have
55
+ RubyGems[http://rubygems.rubyforge.org/wiki/wiki.pl] installed for that, though. If you have it,
56
+ then use:
57
+
58
+ % [sudo] gem install ranalytics.gem
59
+
60
+ == License
61
+
62
+ ranalytics is released under the LGPL license.
63
+
64
+ == Support
65
+
66
+ The ranalytics homepage is http://mirekrusin.com/ruby/ranalytics
67
+
68
+ For other information, feel free to ask on the ruby-talk mailing list
69
+ (which is mirrored to comp.lang.ruby) or contact mailto:ruby@mirekrusin.com
data/lib/ranalytics.rb ADDED
@@ -0,0 +1,165 @@
1
+ # = ranalytics -- Ruby Google Analytics interface, inspired by Burnalytics
2
+ #
3
+ # Author:: Mirek Rusin
4
+ #
5
+ # Copyright (c) 2007 Mirek Rusin, parts of code stolen from Burnalitics
6
+ #
7
+ # You can redistribute it and/or modify it under the same terms as Ruby.
8
+
9
+ # = ranalytics -- Ruby Google Analytics interface, inspired by Burnalytics
10
+ #
11
+ # == Examples
12
+ #
13
+ # To iterate all profiles (websites) inside your google analytics account
14
+ #
15
+ # require 'ranalytics'
16
+ # analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
17
+ # analytics.profiles.each do |profile|
18
+ # puts profile.name
19
+ # end
20
+ #
21
+ # To retrieve hits from the first profile
22
+ #
23
+ # require 'ranalytics'
24
+ # analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
25
+ # profile = analytics.profiles.first
26
+ # puts profile.visits(Date.today) # prints visits for specific day (Date instance)
27
+ # puts profile.visits('20070101-20070131) # prints visits for the range (String)
28
+ # # Or you can use predefined Symbols:
29
+ # puts profile.visits(:yesterday)
30
+ # puts profile.visits(:last_7_days)
31
+ # puts profile.visits(:last_week)
32
+ #
33
+ # To get stats for each day, you can:
34
+ #
35
+ # require 'ranalytics'
36
+ # analytics = Analytics.new 'YOURLOGIN@gmail.com', 'YOURPASSWORD'
37
+ # profile = analytics.profiles.first
38
+ # for date in Date.parse('2007-01-01')..Date.today
39
+ # puts profile.visits(date)
40
+ # end
41
+
42
+ require 'net/http'
43
+ require 'net/https'
44
+ require 'uri'
45
+ require 'rubygems'
46
+ require 'hpricot'
47
+ require 'pp'
48
+ require 'time'
49
+ require 'date'
50
+
51
+ class RAnalytics
52
+
53
+ def initialize(email, password)
54
+ @email = email
55
+ @password = password
56
+ @profiles = []
57
+ @cookies = ''
58
+ login
59
+ end
60
+
61
+ def login
62
+ data = {
63
+ 'continue' => 'https://www.google.com/analytics/home/?et=reset&hl=en-GB',
64
+ 'service' => 'analytics',
65
+ 'nui' => 'hidden',
66
+ 'hl' => 'en-GB',
67
+ 'GA3T' => 'ouVrvynQwUs',
68
+ 'Email' => @email,
69
+ 'PersistentCookie' => 'yes',
70
+ 'Passwd' => @password }
71
+ request('/accounts/ServiceLoginBoxAuth', data).code.to_i == 200
72
+ end
73
+
74
+ def request(address, data=nil)
75
+ raise ScriptError, "Not logged in" unless @cookies
76
+ headers = {
77
+ 'Cookie' => @cookies,
78
+ 'User-Agent' => 'Ruby, RAnalytics, Mirek Rusin'
79
+ #'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1'
80
+ }
81
+ response = nil
82
+ http = Net::HTTP.new("www.google.com", 443)
83
+ http.use_ssl = true
84
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
85
+ http.start do |http|
86
+ if data
87
+ req = Net::HTTP::Post.new(address, headers)
88
+ req.set_form_data(data)
89
+ else
90
+ req = Net::HTTP::Get.new(address, headers)
91
+ end
92
+ response = http.request(req)
93
+ # cookies are set only once on login
94
+ @cookies = response.response['set-cookie'].split('; ')[0] if response.response['set-cookie'] && @cookies == ''
95
+ end
96
+ response
97
+ end
98
+
99
+ def profiles
100
+ return @profiles unless @profiles.size == 0
101
+ hpricot = Hpricot(request('/analytics/home/?et=reset&hl=em-GB').body)
102
+ @profiles = hpricot.search("select[@name='profile_list']/option").reject { |e| e['value'] == "0" }.map do |e|
103
+ RAnalyticsProfile.new(self, e['value'], e.inner_html)
104
+ end
105
+ end
106
+
107
+ def self.to_daterange(args)
108
+ a, b = Time.now, Time.now
109
+ case args.class.to_s
110
+ when 'String' # && args =~ /\d{8}-\d{8}/
111
+ return args # XXX
112
+
113
+ when 'Date'
114
+ a = b = args
115
+
116
+ when 'Symbol'
117
+ case args
118
+ when :yesterday then a = Time.now - 60*60*24
119
+ when :last_7_days then a = Time.now - 60*60*24*7; b = Time.now - 60*60*24
120
+ when :last_week
121
+ a = Time.now - 60*60*24 * (7 + (Time.now - 60*60*24).strftime('%w').to_i)
122
+ b = a + 60*60*24*6
123
+ end
124
+
125
+ end
126
+ "#{a.strftime('%Y%m%d')}-#{b.strftime('%Y%m%d')}"
127
+ end
128
+
129
+ end
130
+
131
+ class RAnalyticsProfile
132
+
133
+ attr_accessor :id, :name, :reports, :ranalytics
134
+
135
+ def initialize(ranalytics, profile_id, profile_name=nil)
136
+ @ranalytics = ranalytics
137
+ @id = profile_id
138
+ @name = profile_name
139
+ @reports = {}
140
+ end
141
+
142
+ # name - ie. DashboardReport
143
+ # range - ie. 20070510-20070609
144
+ def report(name, daterange)
145
+ daterange = RAnalytics.to_daterange(daterange)
146
+ unless defined?(@reports[daterange][name])
147
+ r = @ranalytics.request("/analytics/reporting/export?fmt=1&id=#{@id}&pdr=#{daterange}&cmp=average&rpt=#{name}")
148
+ if r.code.to_i == 302
149
+ r = request( Hpricot(r.body).at('html/body/a')['href'] ) # The document has moved [here]
150
+ end
151
+ @reports[daterange] = {}
152
+ @reports[daterange][name] = r.body
153
+ end
154
+ @reports[daterange][name]
155
+ end
156
+
157
+ def visits(daterange)
158
+ Hpricot(report('DashboardReport', daterange)).at('#VisitsSummary/SummaryValue').inner_html.to_i
159
+ end
160
+
161
+ def to_s
162
+ "RAnalyticsProfile #{@id} #{@name||'Untitled'}"
163
+ end
164
+
165
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: ranalytics
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.071029125738
7
+ date: 2007-10-29 00:00:00 +00:00
8
+ summary: Ruby Google Analytics interface
9
+ require_paths:
10
+ - lib
11
+ email: ruby@mirekrusin.com
12
+ homepage: http://mirekrusin.com/ruby/ranalytics
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: ranalytics
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Mirek Rusin
31
+ files:
32
+ - lib/ranalytics.rb
33
+ - README
34
+ test_files: []
35
+
36
+ rdoc_options: []
37
+
38
+ extra_rdoc_files:
39
+ - README
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ requirements: []
45
+
46
+ dependencies: []
47
+