fb-core 1.0.0.alpha7 → 1.0.0.alpha8
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.
- checksums.yaml +4 -4
- data/README.md +17 -1
- data/lib/fb/core/version.rb +1 -1
- data/lib/fb/page.rb +34 -7
- data/lib/fb/post.rb +27 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6cd31e0997675afe22e67ce5d9a413dbd1bb31f
|
4
|
+
data.tar.gz: 12fb33cc93515ef59c82d27b52af8c419821b23b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9729cc3f46d822bf3450efddaf64af4936857895b2181647c6a34706519f8d16c24520751ce7ec32459296cac8334d11a646a99095f8d3ac554a3ef74029775e
|
7
|
+
data.tar.gz: 10cd071faebf75ee7bf69a8e7c9acee0d18afd88cb0b99f3efe2812377ab5957967d8842934d40aeb0d1b028bcdaa916ec361a6d3f698dd2a75f055a73e7b836
|
data/README.md
CHANGED
@@ -56,10 +56,26 @@ Pass `since` (`Time`) and `until` (`Time`) options to get posts in between the t
|
|
56
56
|
|
57
57
|
```ruby
|
58
58
|
options = { since: Time.new(2015, 05, 15), until: Time.now }
|
59
|
-
page.posts
|
59
|
+
page.posts options
|
60
60
|
# => [#<Fb::Post: id="5678", type="video">,..]
|
61
61
|
```
|
62
62
|
|
63
|
+
Pass `with_metrics: true` to include post insights for the following metrics...
|
64
|
+
All post types: `post_engaged_users`
|
65
|
+
Video posts only: `post_video_views_organic`, `post_video_views_paid`, `post_video_views`, and `post_video_view_time`
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
page.posts with_metrics: true
|
69
|
+
# => [#<Fb::Post: id="5678", type="video">,..]
|
70
|
+
```
|
71
|
+
|
72
|
+
You can also combine all three options...
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
options = { since: Time.new(2015, 05, 15), until: Time.now, with_metrics: true }
|
76
|
+
page.posts options
|
77
|
+
```
|
78
|
+
|
63
79
|
Fb::Page#like_count
|
64
80
|
--------------
|
65
81
|
|
data/lib/fb/core/version.rb
CHANGED
data/lib/fb/page.rb
CHANGED
@@ -29,7 +29,7 @@ module Fb
|
|
29
29
|
# @option [Date] :since only return dates ahead to this date (lower bound).
|
30
30
|
# @option [Date] :until only return dates previous to this day (upper bound).
|
31
31
|
def metric_insights(metric, period, options = {})
|
32
|
-
insights =
|
32
|
+
insights = page_insights Array(metric), options.merge(period: period)
|
33
33
|
values = insights.find{|data| data['name'] == metric}['values']
|
34
34
|
values.map do |v|
|
35
35
|
[Date.strptime(v['end_time'], '%Y-%m-%dT%H:%M:%S+0000'), v.fetch('value', 0)]
|
@@ -42,7 +42,7 @@ module Fb
|
|
42
42
|
def weekly_insights(metrics, options = {})
|
43
43
|
since_date = options.fetch :until, Date.today - 1
|
44
44
|
params = {period: :week, since: since_date, until: since_date + 2}
|
45
|
-
metrics =
|
45
|
+
metrics = page_insights Array(metrics), params
|
46
46
|
metrics.map {|m| [m['name'].to_sym, m['values'].last.fetch('value', 0)]}.to_h
|
47
47
|
end
|
48
48
|
|
@@ -67,13 +67,13 @@ module Fb
|
|
67
67
|
# @return [Array<Fb::Post>] the posts published on the page.
|
68
68
|
# @option [Time] :since only return posts ahead of this time.
|
69
69
|
# @option [Time] :until only return posts previous to this time.
|
70
|
+
# @option [Boolean] :with_metrics whether to include insights for the posts.
|
70
71
|
def posts(options = {})
|
71
72
|
@posts ||= begin
|
72
73
|
params = posts_params.merge options
|
73
74
|
request = PaginatedRequest.new path: "/v2.9/#{@id}/posts", params: params
|
74
|
-
request.run.body['data']
|
75
|
-
|
76
|
-
end
|
75
|
+
data = request.run.body['data']
|
76
|
+
options[:with_metrics] ? posts_with_metrics_from(data) : posts_from(data)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -84,10 +84,33 @@ module Fb
|
|
84
84
|
|
85
85
|
private
|
86
86
|
|
87
|
+
def page_insights(metrics, options = {})
|
88
|
+
insights(metrics, options.merge(ids: id))[id]['data']
|
89
|
+
end
|
90
|
+
|
91
|
+
def posts_from(data)
|
92
|
+
data.map do |post_data|
|
93
|
+
Post.new symbolize_keys post_data
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def posts_with_metrics_from(data)
|
98
|
+
data.each_slice(50).flat_map do |post_slice|
|
99
|
+
post_ids = post_slice.map{|post| post['id']}.join ','
|
100
|
+
metrics = insights post_metrics, ids: post_ids, period: :lifetime
|
101
|
+
post_slice.map do |post_data|
|
102
|
+
insights_data = metrics[post_data['id']]['data'].map do |metric|
|
103
|
+
[metric['name'], metric['values'].last.fetch('value', 0)]
|
104
|
+
end.to_h
|
105
|
+
Post.new symbolize_keys post_data.merge(insights_data)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
87
110
|
def insights(metrics, options = {})
|
88
111
|
params = options.merge metric: metrics.join(','), access_token: @access_token
|
89
|
-
request = HTTPRequest.new path: "/v2.9
|
90
|
-
request.run.body
|
112
|
+
request = HTTPRequest.new path: "/v2.9/insights", params: params
|
113
|
+
request.run.body
|
91
114
|
end
|
92
115
|
|
93
116
|
def posts_params
|
@@ -97,5 +120,9 @@ module Fb
|
|
97
120
|
params[:fields]= %i(id message permalink_url created_time type properties).join ','
|
98
121
|
end
|
99
122
|
end
|
123
|
+
|
124
|
+
def post_metrics
|
125
|
+
%i(post_engaged_users post_video_views_organic post_video_views_paid post_video_views post_video_view_time)
|
126
|
+
end
|
100
127
|
end
|
101
128
|
end
|
data/lib/fb/post.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
# @see http://www.rubydoc.info/gems/Fb/
|
3
3
|
module Fb
|
4
4
|
# Fb::Post reprensents a Facebook post. Post provides getters for:
|
5
|
-
# :id, :url, :created_at, :type, :message,
|
5
|
+
# :id, :url, :created_at, :type, :message, :length, engaged_users,
|
6
|
+
# video_views, video_views_organic, video_views_paid, and total_minutes_watched.
|
6
7
|
class Post
|
7
8
|
|
8
9
|
# @option [String] the post’s unique ID.
|
@@ -23,6 +24,21 @@ module Fb
|
|
23
24
|
# @option [String] the attached video's length or n/a.
|
24
25
|
attr_reader :length
|
25
26
|
|
27
|
+
# @option [Integer] the number of people who clicked anywhere on the post.
|
28
|
+
attr_reader :engaged_users
|
29
|
+
|
30
|
+
# @option [Integer] video views of 3 seconds or more.
|
31
|
+
attr_reader :video_views
|
32
|
+
|
33
|
+
# @option [Integer] organic video views of 3 seconds or more.
|
34
|
+
attr_reader :video_views_organic
|
35
|
+
|
36
|
+
# @option [Integer] paid video views of 3 seconds or more.
|
37
|
+
attr_reader :video_views_paid
|
38
|
+
|
39
|
+
# @option [Integer] total minutes watched by all users who viewed the video.
|
40
|
+
attr_reader :total_minutes_watched
|
41
|
+
|
26
42
|
# @param [Hash] options the options to initialize an instance of Fb::Post.
|
27
43
|
# @option [String] :id The post id.
|
28
44
|
# @option [String] :message The status message in the post or post story.
|
@@ -30,6 +46,11 @@ module Fb
|
|
30
46
|
# @option [String] :created_time The time the post was initially published.
|
31
47
|
# @option [String] :type A string indicating the object type of this post.
|
32
48
|
# @option [String] :properties of the post (e.g. length).
|
49
|
+
# @option [Integer] :post_engaged_users The number of people who clicked anywhere on the post.
|
50
|
+
# @option [Integer] :post_video_views Video views of 3 seconds or more.
|
51
|
+
# @option [Integer] :post_video_views_organic Organic video views of 3 seconds or more.
|
52
|
+
# @option [Integer] :post_video_views_paid Paid video views of 3 seconds or more.
|
53
|
+
# @option [Integer] :post_video_view_time Total video view time (miliseconds).
|
33
54
|
def initialize(options = {})
|
34
55
|
@id = options[:id]
|
35
56
|
@url = options[:permalink_url]
|
@@ -39,6 +60,11 @@ module Fb
|
|
39
60
|
@length = options.fetch(:properties, []).find(-> { {'text' => 'n/a'} }) do |property|
|
40
61
|
property['name'] == 'Length'
|
41
62
|
end['text']
|
63
|
+
@engaged_users = options[:post_engaged_users] if options[:post_engaged_users]
|
64
|
+
@video_views = options[:post_video_views] if options[:post_video_views]
|
65
|
+
@video_views_organic = options[:post_video_views_organic] if options[:post_video_views_organic]
|
66
|
+
@video_views_paid = options[:post_video_views_paid] if options[:post_video_views_paid]
|
67
|
+
@total_minutes_watched = (options[:post_video_view_time]/1000) if options[:post_video_view_time]
|
42
68
|
end
|
43
69
|
|
44
70
|
# @return [String] the representation of the post.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fb-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.alpha8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fb-support
|