fb-core 1.0.0.beta10 → 1.0.0.beta11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +21 -0
- data/lib/fb/core.rb +1 -0
- data/lib/fb/core/version.rb +1 -1
- data/lib/fb/page.rb +13 -6
- data/lib/fb/post.rb +20 -10
- data/lib/fb/video.rb +4 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3d5d9595ad06f96e9cd804a1795e01798482dbf95a6cad93731de6074bbdee36
|
4
|
+
data.tar.gz: c37aab3d7991f3eb33300871007a54751b31bd2c21ba38d69a354ca03a795a56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5e271e36f438510e4f3fef268fb5b1c2f57359763192980fa6c39412a5e1618d799eb75275e79d9aea7f41831dec619fe166b9ea2bed8ddcd186780a7de65d0
|
7
|
+
data.tar.gz: e4fd05041ec08593d03e03e3d1d6e05c11702f2218a1b02efc86d94ba99f6f334076fe14dc05f60de86e108419c2e3d681e473427abdb16dbfca3c7b7ed9a088
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,27 @@ For more information about changelogs, check
|
|
6
6
|
[Keep a Changelog](http://keepachangelog.com) and
|
7
7
|
[Vandamme](http://tech-angels.github.io/vandamme).
|
8
8
|
|
9
|
+
|
10
|
+
## 1.0.0.beta11
|
11
|
+
|
12
|
+
* [IMPROVEMENT] Return UTC time for String value of `created_time`, `backdated_time`,
|
13
|
+
`end_time`, etc from Facebook to have exact time.
|
14
|
+
* [FEATURE] Add `Fb::Post#lifetime_insights` method to get metrics of each post.
|
15
|
+
* [BUGFIX] Return empty hash instead of nil when a metric returns empty array.
|
16
|
+
|
17
|
+
**How to upgrade**
|
18
|
+
|
19
|
+
If your code calls `.consumptions` then you must replace that code with `.clicks`
|
20
|
+
since those metrics will no longer be supported by Facebook API as of
|
21
|
+
[August 1, 2018](https://developers.facebook.com/docs/graph-api/reference/v2.9/insights#newnames).
|
22
|
+
If your code calls `fan_reach` from a Fb::Post then you must remove that code
|
23
|
+
because Facebook removed that metric from [version 3.0](https://developers.facebook.com/docs/graph-api/changelog/version3.0) and they already applied the change to v2.9 the version currently
|
24
|
+
fb-core uses.
|
25
|
+
|
26
|
+
* [REMOVAL] Remove `#consumptions` method for posts
|
27
|
+
* [REMOVAL] Remove `#fan_reach` method for posts
|
28
|
+
* [FEATURE] Add `#clicks` method for posts
|
29
|
+
|
9
30
|
## 1.0.0.beta10 - 2018/05/01
|
10
31
|
|
11
32
|
* [FEATURE] Add `:since` and `:until` option to `Page#videos` method.
|
data/lib/fb/core.rb
CHANGED
data/lib/fb/core/version.rb
CHANGED
data/lib/fb/page.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
module Fb
|
2
4
|
# Provides methods to interact with Facebook pages through the Graph API.
|
3
5
|
# @see https://developers.facebook.com/docs/graph-api/reference/page/
|
@@ -11,6 +13,8 @@ module Fb
|
|
11
13
|
# @option [String] the page’s category.
|
12
14
|
attr_reader :category
|
13
15
|
|
16
|
+
attr_reader :access_token
|
17
|
+
|
14
18
|
# @param [Hash] options to initialize a Page object.
|
15
19
|
# @option [String] :id The page’s unique ID.
|
16
20
|
# @option [String] :name The page’s name.
|
@@ -30,9 +34,10 @@ module Fb
|
|
30
34
|
# @option [Date] :until only return dates previous to this day (upper bound).
|
31
35
|
def metric_insights(metric, period, options = {})
|
32
36
|
insights = page_insights Array(metric), options.merge(period: period)
|
33
|
-
|
37
|
+
return {} if insights.empty?
|
38
|
+
values = insights.find(->{{}}){|data| data['name'] == metric}['values']
|
34
39
|
values.map do |v|
|
35
|
-
[Date.
|
40
|
+
[Date.parse(v['end_time']), v.fetch('value', 0)]
|
36
41
|
end.to_h
|
37
42
|
end
|
38
43
|
|
@@ -70,10 +75,11 @@ module Fb
|
|
70
75
|
# @option [Boolean] :with_metrics whether to include insights for the posts.
|
71
76
|
def posts(options = {})
|
72
77
|
@posts ||= begin
|
78
|
+
with_metrics = options.delete :with_metrics
|
73
79
|
params = posts_params.merge options
|
74
80
|
request = PaginatedRequest.new path: "/v2.9/#{@id}/posts", params: params
|
75
81
|
data = request.run.body['data']
|
76
|
-
|
82
|
+
with_metrics ? posts_with_metrics_from(data) : posts_from(data)
|
77
83
|
end
|
78
84
|
end
|
79
85
|
|
@@ -95,10 +101,11 @@ module Fb
|
|
95
101
|
# @option [Boolean] :without_lifetime_metrics whether to include insights for the videos.
|
96
102
|
def videos(options = {})
|
97
103
|
@videos ||= begin
|
104
|
+
without_lifetime_metrics = options.delete :without_lifetime_metrics
|
98
105
|
params = video_params.merge options
|
99
106
|
request = PaginatedRequest.new path: "/v2.9/#{@id}/videos", params: params
|
100
107
|
data = request.run.body['data']
|
101
|
-
|
108
|
+
without_lifetime_metrics ? videos_from(data) : videos_with_metrics_from(data)
|
102
109
|
end
|
103
110
|
end
|
104
111
|
|
@@ -164,8 +171,8 @@ module Fb
|
|
164
171
|
post_impressions_paid post_impressions_paid_unique post_impressions_fan
|
165
172
|
post_impressions_fan_unique post_impressions_fan_paid post_impressions_fan_paid_unique
|
166
173
|
post_impressions_organic post_impressions_organic_unique post_impressions_viral
|
167
|
-
|
168
|
-
|
174
|
+
post_clicks post_engaged_users post_negative_feedback post_engaged_fan
|
175
|
+
post_reactions_like_total post_reactions_love_total
|
169
176
|
post_reactions_wow_total post_reactions_haha_total post_reactions_sorry_total
|
170
177
|
post_reactions_anger_total post_video_avg_time_watched post_video_complete_views_organic
|
171
178
|
post_video_complete_views_organic_unique post_video_complete_views_paid
|
data/lib/fb/post.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'time'
|
2
|
+
|
3
3
|
module Fb
|
4
4
|
# Fb::Post reprensents a Facebook post. Post provides getters for:
|
5
5
|
# :id, :url, :created_at, :type, :message, :length, engaged_users,
|
6
6
|
# video_views, video_views_organic, video_views_paid, and so on.
|
7
7
|
# @see https://developers.facebook.com/docs/graph-api/reference/v2.10/post
|
8
|
-
class Post
|
8
|
+
class Post < Resource
|
9
9
|
attr_accessor :custom_labels
|
10
10
|
|
11
11
|
# @option [String] the post’s unique ID.
|
@@ -100,7 +100,7 @@ module Fb
|
|
100
100
|
|
101
101
|
# @option [Integer] the number of times people clicked on anywhere
|
102
102
|
# in your posts without generating a story.
|
103
|
-
attr_reader :
|
103
|
+
attr_reader :clicks
|
104
104
|
|
105
105
|
# @option [Integer] the number of people who clicked anywhere on the post.
|
106
106
|
attr_reader :engaged_users
|
@@ -111,9 +111,6 @@ module Fb
|
|
111
111
|
# @option [Integer] people who have liked your page and engaged with your post.
|
112
112
|
attr_reader :engaged_fan
|
113
113
|
|
114
|
-
# @option [Integer] post reach by people who like your page.
|
115
|
-
attr_reader :fan_reach
|
116
|
-
|
117
114
|
# @option [Integer] total "like" reactions of a post.
|
118
115
|
attr_reader :reactions_like_total
|
119
116
|
|
@@ -236,7 +233,7 @@ module Fb
|
|
236
233
|
def initialize(options = {})
|
237
234
|
@id = options[:id]
|
238
235
|
@url = options[:permalink_url]
|
239
|
-
@created_at = Time.
|
236
|
+
@created_at = Time.parse(options[:created_time]) if options[:created_time]
|
240
237
|
@type = options[:type]
|
241
238
|
@message = options[:message]
|
242
239
|
@length = options.fetch(:properties, []).find(-> { {'text' => 'n/a'} }) do |property|
|
@@ -263,11 +260,10 @@ module Fb
|
|
263
260
|
@impressions_organic = options[:post_impressions_organic]
|
264
261
|
@impressions_organic_unique = options[:post_impressions_organic_unique]
|
265
262
|
@impressions_viral = options[:post_impressions_viral]
|
266
|
-
@
|
263
|
+
@clicks = options[:post_clicks]
|
267
264
|
@engaged_users = options[:post_engaged_users]
|
268
265
|
@negative_feedback = options[:post_negative_feedback]
|
269
266
|
@engaged_fan = options[:post_engaged_fan]
|
270
|
-
@fan_reach = options[:post_fan_reach]
|
271
267
|
@reactions_like_total = options[:post_reactions_like_total]
|
272
268
|
@reactions_love_total = options[:post_reactions_love_total]
|
273
269
|
@reactions_wow_total = options[:post_reactions_wow_total]
|
@@ -300,6 +296,20 @@ module Fb
|
|
300
296
|
@video_view_time_organic = options[:post_video_view_time_organic]
|
301
297
|
end
|
302
298
|
|
299
|
+
# @return [Hash] a hash of metrics mapped to their values.
|
300
|
+
# @param [Array<String, Symbol>] :metrics the metrics to fetch.
|
301
|
+
# @param [String] :page_access_token page access token of its page.
|
302
|
+
def lifetime_insights(metrics, page_access_token)
|
303
|
+
params = { metric: Array(metrics).join(","), access_token: page_access_token, period: "lifetime", ids: id }
|
304
|
+
request = HTTPRequest.new path: "/v2.9/insights", params: params
|
305
|
+
insights = request.run.body
|
306
|
+
|
307
|
+
data = insights[id]['data'].map do |metric|
|
308
|
+
[metric['name'], metric['values'].last.fetch('value', 0)]
|
309
|
+
end.to_h
|
310
|
+
symbolize_keys data
|
311
|
+
end
|
312
|
+
|
303
313
|
# @return [String] the representation of the post.
|
304
314
|
def to_s
|
305
315
|
%Q(#<#{self.class.name} #{@id} "#{@type}">)
|
data/lib/fb/video.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
1
3
|
module Fb
|
2
4
|
# Fb::Video represents a Facebook video. Fb::Video provides getter methods.
|
3
5
|
# @see https://developers.facebook.com/docs/graph-api/reference/video/
|
@@ -97,8 +99,8 @@ module Fb
|
|
97
99
|
@content_tags = options[:content_tags] ? Array(options[:content_tags]) : []
|
98
100
|
@ad_breaks = options[:ad_breaks] ? Array(options[:ad_breaks]) : []
|
99
101
|
@length = options[:length]
|
100
|
-
@created_at = Time.
|
101
|
-
@backdated_time = Time.
|
102
|
+
@created_at = Time.parse(options[:created_time]) if options[:created_time]
|
103
|
+
@backdated_time = Time.parse(options[:backdated_time]) if options[:backdated_time]
|
102
104
|
|
103
105
|
@total_views = options[:total_video_views]
|
104
106
|
@total_views_unique = options[:total_video_views_unique]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.beta11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claudio Baccigalupo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-08-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fb-support
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: 1.3.1
|
146
146
|
requirements: []
|
147
147
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.6
|
148
|
+
rubygems_version: 2.7.6
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: Ruby client to interact with Facebook Graph API.
|