Class: PatientZero::Analytics::Facebook
- Inherits:
-
Base
- Object
- Base
- PatientZero::Analytics::Facebook
show all
- Defined in:
- lib/patient_zero/analytics/facebook.rb
Instance Attribute Summary
Attributes inherited from Base
#end_date, #source_id, #start_date, #token
Instance Method Summary
collapse
Methods inherited from Base
#initialize, #messages, #name, #platform, #total_posts
Methods included from Client
#connection, #get, included, #parse, #post, #put
Instance Method Details
#engagements ⇒ Object
4
5
6
|
# File 'lib/patient_zero/analytics/facebook.rb', line 4
def engagements
@engagements ||= messages.reduce(0) { |sum, message| sum + message.engagements }
end
|
#followers ⇒ Object
70
71
72
|
# File 'lib/patient_zero/analytics/facebook.rb', line 70
def followers
nil
end
|
#impressions ⇒ Object
8
9
10
|
# File 'lib/patient_zero/analytics/facebook.rb', line 8
def impressions
@impressions ||= total_page_impressions + message_impressions
end
|
#impressions_by_age ⇒ Object
24
25
26
|
# File 'lib/patient_zero/analytics/facebook.rb', line 24
def impressions_by_age
analytical_data.fetch('impressions_by_ages',[]).first.to_h.fetch('values',{})
end
|
#impressions_by_city ⇒ Object
18
19
20
21
22
|
# File 'lib/patient_zero/analytics/facebook.rb', line 18
def impressions_by_city
analytical_data.fetch("impressions_by_cities").each_with_object({}) do |city, cities|
cities[city['title']] = city['count']
end
end
|
#impressions_by_gender ⇒ Object
28
29
30
31
32
33
|
# File 'lib/patient_zero/analytics/facebook.rb', line 28
def impressions_by_gender
gender_stats = analytical_data['impressions_by_genders']
{ female: gender_stats.fetch('F', 0),
male: gender_stats.fetch('M', 0),
unknown: gender_stats.fetch('U', 0) }
end
|
#likes ⇒ Object
62
63
64
|
# File 'lib/patient_zero/analytics/facebook.rb', line 62
def likes
analytical_data['total_likes'].to_i
end
|
#organic_impressions ⇒ Object
54
55
56
|
# File 'lib/patient_zero/analytics/facebook.rb', line 54
def organic_impressions
find_impressions 'Organic'
end
|
#page_likes_by_age_and_gender ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/patient_zero/analytics/facebook.rb', line 35
def page_likes_by_age_and_gender
data = analytical_data.fetch('likes_by_age_group',[])
female = data.find { |datum| datum.values.include? 'Females Users' }
male = data.find { |datum| datum.values.include? 'Males Users' }
{ female: female.to_h.fetch('values',{}),
male: male.to_h.fetch('values',{}) }
end
|
#page_likes_by_gender ⇒ Object
43
44
45
46
47
48
|
# File 'lib/patient_zero/analytics/facebook.rb', line 43
def page_likes_by_gender
gender_stats = analytical_data['likes_by_gender']
{ female: gender_stats.fetch('F', 0),
male: gender_stats.fetch('M', 0),
unknown: gender_stats.fetch('U', 0) }
end
|
58
59
60
|
# File 'lib/patient_zero/analytics/facebook.rb', line 58
def promoted_impressions
find_impressions 'Paid'
end
|
#reach ⇒ Object
12
13
14
15
16
|
# File 'lib/patient_zero/analytics/facebook.rb', line 12
def reach
@reach ||= analytical_data['total_reach'].find do |reach_hash|
reach_hash['key'] == 'Total Reach'
end['values'].each_value.reduce(:+)
end
|
66
67
68
|
# File 'lib/patient_zero/analytics/facebook.rb', line 66
def
messages.sum { |message| message.data['comments'] }
end
|
#total_page_likes ⇒ Object
50
51
52
|
# File 'lib/patient_zero/analytics/facebook.rb', line 50
def total_page_likes
page_likes_by_gender.values.reduce(:+)
end
|