Class: PatientZero::Analytics::Facebook

Inherits:
Base
  • Object
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

Constructor Details

This class inherits a constructor from PatientZero::Analytics::Base

Instance Method Details

#engagementsObject



4
5
6
# File 'lib/patient_zero/analytics/facebook.rb', line 4

def engagements
  @engagements ||= messages.reduce(0) { |sum, message| sum + message.engagements }
end

#followersObject



70
71
72
# File 'lib/patient_zero/analytics/facebook.rb', line 70

def followers
  nil
end

#impressionsObject



8
9
10
# File 'lib/patient_zero/analytics/facebook.rb', line 8

def impressions
  @impressions ||= total_page_impressions + message_impressions
end

#impressions_by_ageObject



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_cityObject



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_genderObject



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

#likesObject



62
63
64
# File 'lib/patient_zero/analytics/facebook.rb', line 62

def likes
  analytical_data['total_likes'].to_i
end

#organic_impressionsObject



54
55
56
# File 'lib/patient_zero/analytics/facebook.rb', line 54

def organic_impressions
  find_impressions 'Organic'
end

#page_likes_by_age_and_genderObject



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_genderObject



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

#reachObject



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

#total_commentsObject



66
67
68
# File 'lib/patient_zero/analytics/facebook.rb', line 66

def total_comments
  messages.sum { |message| message.data['comments'] }
end

#total_page_likesObject



50
51
52
# File 'lib/patient_zero/analytics/facebook.rb', line 50

def total_page_likes
  page_likes_by_gender.values.reduce(:+)
end