trackablaze 0.1.0 → 0.1.1
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.
- 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
|