trackablaze 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/trackablaze/command.rb +11 -7
- data/lib/trackablaze/tracker.rb +14 -33
- data/lib/trackablaze/tracker_item.rb +54 -0
- data/lib/trackablaze.rb +1 -0
- data/trackers/facebook_page.rb +7 -10
- data/trackers/twitter.rb +7 -11
- data/version.rb +1 -1
- metadata +3 -2
data/lib/trackablaze/command.rb
CHANGED
@@ -11,14 +11,18 @@ module Trackablaze
|
|
11
11
|
Trackablaze::Tracker.load_trackers
|
12
12
|
config = YAML::load( File.open( file ) )
|
13
13
|
|
14
|
-
|
14
|
+
tracker_items = []
|
15
|
+
config.each do |c|
|
16
|
+
tracker_items << Trackablaze::TrackerItem.new(c)
|
17
|
+
end
|
18
|
+
|
19
|
+
results = Trackablaze::TrackerItem.run(tracker_items)
|
15
20
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
puts "
|
20
|
-
puts "
|
21
|
-
puts "results: #{results[n]}"
|
21
|
+
tracker_items.each do |tracker_item|
|
22
|
+
puts "[ #{tracker_item.title} ]".center(75,'-')
|
23
|
+
puts "Key: #{tracker_item.key}"
|
24
|
+
puts "params: #{tracker_item.params}"
|
25
|
+
puts "results: #{results[tracker_item.key]}"
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
data/lib/trackablaze/tracker.rb
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
module Trackablaze
|
2
2
|
class Tracker
|
3
3
|
|
4
|
+
# A string that uniquely identifies this instance of the tracker
|
5
|
+
# This is to optimize multiple instances that are exactly the same
|
6
|
+
# e.g. if 100 people want to track amolk's twitter account, the tracker can
|
7
|
+
# be run only once, optimizing calls to Twitter API.
|
8
|
+
def self.key(config)
|
9
|
+
# By default we use all params and metrics
|
10
|
+
sb = []
|
11
|
+
sb.push(self.handle)
|
12
|
+
sb.push(config['params'].flatten) if config['params']
|
13
|
+
sb.push((config['metrics'] || default_metrics).flatten)
|
14
|
+
sb.flatten.join('_')
|
15
|
+
end
|
16
|
+
|
4
17
|
class << self
|
5
18
|
attr_accessor :trackers
|
6
19
|
|
@@ -9,36 +22,7 @@ module Trackablaze
|
|
9
22
|
Trackablaze::Tracker.subclasses.each do |t|
|
10
23
|
@trackers[t.handle] = t
|
11
24
|
end
|
12
|
-
end
|
13
|
-
|
14
|
-
# This function takes config object, similar in structure to a loaded yml config file
|
15
|
-
def run_trackers(config)
|
16
|
-
results = []
|
17
|
-
trackers = {}
|
18
|
-
index = 0
|
19
|
-
config.each do |tracker_node|
|
20
|
-
tracker_name = tracker_node.keys.first
|
21
|
-
trackers[tracker_name] ||= []
|
22
|
-
tracker_config = tracker_node.values.first
|
23
|
-
tracker_config['index'] = index
|
24
|
-
trackers[tracker_name] << tracker_config
|
25
|
-
index += 1
|
26
|
-
end
|
27
|
-
|
28
|
-
trackers.each do |tracker_name, tracker_configs|
|
29
|
-
tracker = Trackablaze::Tracker.trackers[tracker_name].new
|
30
|
-
|
31
|
-
tracker_config_index = 0
|
32
|
-
tracker.get_metrics(tracker_configs).each do |tracker_result|
|
33
|
-
index = tracker_configs[tracker_config_index]['index']
|
34
|
-
results[index] = tracker_result
|
35
|
-
tracker_config_index += 1
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
return results
|
40
|
-
end
|
41
|
-
|
25
|
+
end
|
42
26
|
end
|
43
27
|
|
44
28
|
def self.handle
|
@@ -62,11 +46,8 @@ module Trackablaze
|
|
62
46
|
end
|
63
47
|
|
64
48
|
def add_error(metrics, error, field = nil)
|
65
|
-
puts "ADDING ERROR #{error} on #{field}"
|
66
49
|
metrics['errors'] ||= []
|
67
50
|
metrics['errors'].push({:error => error, :field => field})
|
68
|
-
|
69
|
-
puts "ADDED ERROR #{metrics.inspect}"
|
70
51
|
end
|
71
52
|
|
72
53
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Trackablaze
|
2
|
+
class TrackerItem
|
3
|
+
attr_accessor :name, :config, :params, :metrics, :tracker_class
|
4
|
+
def initialize(config)
|
5
|
+
@name = config.keys[0]
|
6
|
+
@tracker_class = Trackablaze::Tracker.trackers[self.name]
|
7
|
+
@config = config[self.name]
|
8
|
+
@params = self.config['params']
|
9
|
+
@metrics = self.config['metrics'] || @tracker_class.default_metrics
|
10
|
+
end
|
11
|
+
|
12
|
+
def key()
|
13
|
+
@key ||= tracker_class.key(config)
|
14
|
+
end
|
15
|
+
|
16
|
+
def title
|
17
|
+
@tracker_class.title
|
18
|
+
end
|
19
|
+
|
20
|
+
# This function takes config object, similar in structure to a loaded yml config file
|
21
|
+
def self.run(tracker_items)
|
22
|
+
Trackablaze::Tracker.load_trackers
|
23
|
+
|
24
|
+
results = {}
|
25
|
+
|
26
|
+
# Dedup tracker items using unique key
|
27
|
+
unique_tracker_items = tracker_items.uniq {|ti| ti.key}
|
28
|
+
|
29
|
+
# Gather up all unique tracker_items for a given tracker
|
30
|
+
tracker_items_by_tracker = {}
|
31
|
+
unique_tracker_items.each do |tracker_item|
|
32
|
+
tracker_name = tracker_item.name
|
33
|
+
|
34
|
+
tracker_items_by_tracker[tracker_name] ||= []
|
35
|
+
tracker_items_by_tracker[tracker_name] << tracker_item
|
36
|
+
end
|
37
|
+
|
38
|
+
# Run one tracker at a time
|
39
|
+
tracker_items_by_tracker.each do |tracker_name, items|
|
40
|
+
tracker = items.first.tracker_class.new
|
41
|
+
tracker_results = tracker.get_metrics(items)
|
42
|
+
|
43
|
+
# Store results by tracker item key
|
44
|
+
(0..items.length-1).each do |index|
|
45
|
+
item = items[index]
|
46
|
+
results[item.key] = tracker_results[index]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# All keys should have results now, return results
|
51
|
+
return results
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/trackablaze.rb
CHANGED
data/trackers/facebook_page.rb
CHANGED
@@ -2,21 +2,20 @@ require 'mini_fb'
|
|
2
2
|
|
3
3
|
module Trackablaze
|
4
4
|
class FacebookPage < Tracker
|
5
|
-
def get_metrics(
|
6
|
-
|
5
|
+
def get_metrics(tracker_items)
|
6
|
+
tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
|
7
7
|
end
|
8
8
|
|
9
|
-
def get_metrics_single(
|
10
|
-
params, metrics_keys = config['params'], config['metrics']
|
9
|
+
def get_metrics_single(tracker_item)
|
11
10
|
metrics = {}
|
12
11
|
|
13
|
-
if (params["page_id"].nil?)
|
12
|
+
if (tracker_item.params["page_id"].nil?)
|
14
13
|
add_error(metrics, "No Facebook page ID supplied", "page_id")
|
15
14
|
return metrics
|
16
15
|
end
|
17
16
|
|
18
17
|
begin
|
19
|
-
page_info = MiniFB.get(nil, params["page_id"])
|
18
|
+
page_info = MiniFB.get(nil, tracker_item.params["page_id"])
|
20
19
|
rescue
|
21
20
|
page_info = {}
|
22
21
|
end
|
@@ -25,11 +24,9 @@ module Trackablaze
|
|
25
24
|
add_error(metrics, "Invalid Facebook page ID supplied", "page_id")
|
26
25
|
return metrics
|
27
26
|
end
|
28
|
-
|
29
|
-
metrics_keys ||= FacebookPage.default_metrics
|
30
27
|
|
31
|
-
|
32
|
-
metrics[
|
28
|
+
tracker_item.metrics.each do |metric|
|
29
|
+
metrics[metric] = page_info[metric]
|
33
30
|
end
|
34
31
|
|
35
32
|
metrics
|
data/trackers/twitter.rb
CHANGED
@@ -2,22 +2,21 @@ require 'twitter'
|
|
2
2
|
|
3
3
|
module Trackablaze
|
4
4
|
class Twitter < Tracker
|
5
|
-
def get_metrics(
|
6
|
-
|
5
|
+
def get_metrics(tracker_items)
|
6
|
+
tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
|
7
7
|
end
|
8
8
|
|
9
|
-
def get_metrics_single(
|
10
|
-
params, metrics_keys = config['params'], config['metrics']
|
9
|
+
def get_metrics_single(tracker_item)
|
11
10
|
metrics = {}
|
12
11
|
|
13
|
-
if (params["handle"].nil? || params["handle"].empty?)
|
12
|
+
if (tracker_item.params["handle"].nil? || tracker_item.params["handle"].empty?)
|
14
13
|
add_error(metrics, "No handle supplied", "handle")
|
15
14
|
return metrics
|
16
15
|
end
|
17
16
|
|
18
17
|
user = nil
|
19
18
|
begin
|
20
|
-
user = ::Twitter.user(params["handle"])
|
19
|
+
user = ::Twitter.user(tracker_item.params["handle"])
|
21
20
|
rescue
|
22
21
|
end
|
23
22
|
|
@@ -25,12 +24,9 @@ module Trackablaze
|
|
25
24
|
add_error(metrics, "Invalid handle supplied", "handle")
|
26
25
|
return metrics
|
27
26
|
end
|
28
|
-
|
29
|
-
metrics_keys ||= Twitter.default_metrics
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
metrics[metrics_key] = value
|
28
|
+
tracker_item.metrics.each do |metric|
|
29
|
+
metrics[metric] = user[metric]
|
34
30
|
end
|
35
31
|
|
36
32
|
metrics
|
data/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: trackablaze
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Amol Kelkar
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-15 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -113,6 +113,7 @@ extra_rdoc_files: []
|
|
113
113
|
files:
|
114
114
|
- lib/trackablaze/command.rb
|
115
115
|
- lib/trackablaze/tracker.rb
|
116
|
+
- lib/trackablaze/tracker_item.rb
|
116
117
|
- lib/trackablaze/utils.rb
|
117
118
|
- lib/trackablaze.rb
|
118
119
|
- trackers/facebook_page.rb
|