fb-core 1.0.0.alpha11 → 1.0.0.alpha12
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/CHANGELOG.md +6 -0
- data/lib/fb/core.rb +1 -0
- data/lib/fb/core/version.rb +1 -1
- data/lib/fb/page.rb +39 -0
- data/lib/fb/paginated_request.rb +1 -1
- data/lib/fb/video.rb +103 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd59a79b809b6f4ecd3306cb4513115e5e4f25df
|
4
|
+
data.tar.gz: c167e50a5222e725f62b675734e7ffe3aa02424d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0194add029d28a6a4c452370f6fce79b45ad81fb16f0b10ed52af5c211cc7a4865171f700c944b8a6b90287eb5a30d26ebd51e9603ebebf94ae42663fd1cdcb6'
|
7
|
+
data.tar.gz: 792587046f24310265871bbad3e5d6714b358361ed2a9668f8cd85a88974c1fdd8afbb1fa1a6be0de88ebbb310da18b1407631bc4318dd9c0d9c3987630e13ad
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,12 @@ 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
|
+
## 1.0.0.alpha12 - 2017/12/08
|
10
|
+
|
11
|
+
* [FEATURE] Add `Fb::Video` and `Fb::Page#videos`
|
12
|
+
* [FEATURE] Add fields of "/videos" endpoint such as `comment_count`, `length` etc to `Fb::Video`
|
13
|
+
* [FEATURE] Add metrics from "/video_insights" endpoint such as `total_views` to `Fb::Video`
|
14
|
+
|
9
15
|
## 1.0.0.alpha11 - 2017/12/01
|
10
16
|
|
11
17
|
* [FEATURE] Add `share_count` to `Fb::Post` for number of shares of a post.
|
data/lib/fb/core.rb
CHANGED
data/lib/fb/core/version.rb
CHANGED
data/lib/fb/page.rb
CHANGED
@@ -77,6 +77,15 @@ module Fb
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
# @return [Array<Fb::Video>] the uploaded videos for the page.
|
81
|
+
def videos
|
82
|
+
@videos ||= begin
|
83
|
+
request = PaginatedRequest.new path: "/v2.9/#{@id}/videos", params: video_params
|
84
|
+
data = request.run.body['data']
|
85
|
+
videos_with_metrics_from(data)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
80
89
|
# @return [String] the representation of the page.
|
81
90
|
def to_s
|
82
91
|
%Q(#<#{self.class.name} #{@id} "#{@name}">)
|
@@ -125,5 +134,35 @@ module Fb
|
|
125
134
|
def post_metrics
|
126
135
|
%i(post_engaged_users post_video_views_organic post_video_views_paid post_video_views post_video_view_time)
|
127
136
|
end
|
137
|
+
|
138
|
+
def videos_with_metrics_from(data)
|
139
|
+
data.each_slice(25).flat_map do |video_slice|
|
140
|
+
video_ids = video_slice.map {|video| video['id']}.join(',')
|
141
|
+
metrics = video_insights(ids: video_ids)
|
142
|
+
video_slice.map do |video_data|
|
143
|
+
insights_data = metrics[video_data['id']]['data'].map do |metric|
|
144
|
+
[metric['name'], metric['values'].last.fetch('value', 0)]
|
145
|
+
end.to_h
|
146
|
+
Video.new symbolize_keys video_data.merge(insights_data)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def video_insights(options = {})
|
152
|
+
params = options.merge access_token: @access_token
|
153
|
+
request = HTTPRequest.new path: "/v2.9/video_insights", params: params
|
154
|
+
request.run.body
|
155
|
+
end
|
156
|
+
|
157
|
+
def video_params
|
158
|
+
{}.tap do |params|
|
159
|
+
params[:access_token] = @access_token
|
160
|
+
params[:limit] = 25
|
161
|
+
params[:fields] = ['id', 'permalink_url', 'custom_labels', 'title',
|
162
|
+
'length', 'content_tags', 'likes.limit(0).summary(true)', 'comments.limit(0).summary(true)',
|
163
|
+
'created_time', 'ad_breaks', 'description', 'reactions.limit(0).summary(true)'
|
164
|
+
].join(',')
|
165
|
+
end
|
166
|
+
end
|
128
167
|
end
|
129
168
|
end
|
data/lib/fb/paginated_request.rb
CHANGED
@@ -11,7 +11,7 @@ module Fb
|
|
11
11
|
response = super
|
12
12
|
while response.body.dig 'paging', 'next'
|
13
13
|
after = response.body.dig 'paging', 'cursors', 'after'
|
14
|
-
next_params = @params.merge after: after
|
14
|
+
next_params = @params.merge after: after
|
15
15
|
next_request = HTTPRequest.new path: @path, params: next_params
|
16
16
|
next_body = next_request.run.body
|
17
17
|
response.body['paging'] = next_body['paging']
|
data/lib/fb/video.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
module Fb
|
2
|
+
# Fb::Video represents a Facebook video. Fb::Video provides getter methods.
|
3
|
+
# @see https://developers.facebook.com/docs/graph-api/reference/video/
|
4
|
+
class Video
|
5
|
+
|
6
|
+
# @option [String] the video’s unique ID.
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
# @option [String] the video’s permanent URL.
|
10
|
+
attr_reader :url
|
11
|
+
|
12
|
+
# @option [String] the video’s title or caption.
|
13
|
+
attr_reader :title
|
14
|
+
|
15
|
+
# @option [String] the video’s description or caption.
|
16
|
+
attr_reader :description
|
17
|
+
|
18
|
+
# @option [Array<String>] the video’s custom labels.
|
19
|
+
attr_reader :custom_labels
|
20
|
+
|
21
|
+
# @return [Integer] the number of comments on the video.
|
22
|
+
attr_reader :comment_count
|
23
|
+
|
24
|
+
# @return [Integer] the number of likes on the video.
|
25
|
+
attr_reader :like_count
|
26
|
+
|
27
|
+
# @return [Integer] the number of reactions on the video.
|
28
|
+
attr_reader :reaction_count
|
29
|
+
|
30
|
+
# @option [Array<String>] the video’s content tags.
|
31
|
+
attr_reader :content_tags
|
32
|
+
|
33
|
+
# @option [Array<Integer>] the video’s ad breaks in milliseconds.
|
34
|
+
attr_reader :ad_breaks
|
35
|
+
|
36
|
+
# @option [Float] the video’s length.
|
37
|
+
attr_reader :length
|
38
|
+
|
39
|
+
# @option [Time] The time the video was initially published.
|
40
|
+
attr_reader :created_at
|
41
|
+
|
42
|
+
# @option [Integer] Total number of times the video was viewed for 3 seconds
|
43
|
+
# or viewed to the end, whichever happened first. total_video_views.
|
44
|
+
# @see https://developers.facebook.com/docs/graph-api/reference/video/video_insights/
|
45
|
+
attr_reader :total_views
|
46
|
+
|
47
|
+
# @option [Integer] The total_video_views_unique of the video.
|
48
|
+
attr_reader :total_views_unique
|
49
|
+
|
50
|
+
# @option [Integer] The total_video_avg_time_watched of the video.
|
51
|
+
attr_reader :total_avg_time_watched
|
52
|
+
|
53
|
+
# @option [Integer] The total_video_views_autoplayed of the video.
|
54
|
+
attr_reader :total_views_autoplayed
|
55
|
+
|
56
|
+
# @option [Integer] The total_video_views_clicked_to_play of the video.
|
57
|
+
attr_reader :total_views_clicked_to_play
|
58
|
+
|
59
|
+
# @option [Integer] The total_video_complete_views_auto_played of the video.
|
60
|
+
attr_reader :total_complete_views_auto_played
|
61
|
+
|
62
|
+
# @option [Integer] The total_video_complete_views_clicked_to_play of the video.
|
63
|
+
attr_reader :total_complete_views_clicked_to_play
|
64
|
+
|
65
|
+
# @option [Integer] The total_video_views_sound_on of the video.
|
66
|
+
attr_reader :total_views_sound_on
|
67
|
+
|
68
|
+
# @option [Integer] The total_video_10s_views_auto_played of the video.
|
69
|
+
attr_reader :total_10s_views_sound_on
|
70
|
+
|
71
|
+
# @param [Hash] options the options to initialize an instance of Fb::Video.
|
72
|
+
def initialize(options = {})
|
73
|
+
@id = options[:id]
|
74
|
+
@url = options[:permalink_url]
|
75
|
+
@title = options[:title]
|
76
|
+
@description = options[:description]
|
77
|
+
@custom_labels = options[:custom_labels] ? Array(options[:custom_labels]) : Array.new
|
78
|
+
|
79
|
+
@comment_count = options[:comments]['summary']['total_count'] if options[:comments]
|
80
|
+
@like_count = options[:likes]['summary']['total_count'] if options[:likes]
|
81
|
+
@reaction_count = options[:reactions]['summary']['total_count'] if options[:reactions]
|
82
|
+
@content_tags = options[:content_tags] ? Array(options[:content_tags]) : Array.new
|
83
|
+
@ad_breaks = options[:ad_breaks] ? Array(options[:ad_breaks]) : Array.new
|
84
|
+
@length = options[:length]
|
85
|
+
@created_at = Time.strptime(options[:created_time], '%Y-%m-%dT%H:%M:%S+0000')
|
86
|
+
|
87
|
+
@total_views = options[:total_video_views] if options[:total_video_views]
|
88
|
+
@total_views_unique = options[:total_video_views_unique] if options[:total_video_views_unique]
|
89
|
+
@total_avg_time_watched = options[:total_video_avg_time_watched] if options[:total_video_avg_time_watched]
|
90
|
+
@total_views_autoplayed = options[:total_video_views_autoplayed] if options[:total_video_views_autoplayed]
|
91
|
+
@total_views_clicked_to_play = options[:total_video_views_clicked_to_play] if options[:total_video_views_clicked_to_play]
|
92
|
+
@total_complete_views_auto_played = options[:total_video_complete_views_auto_played] if options[:total_video_complete_views_auto_played]
|
93
|
+
@total_complete_views_clicked_to_play = options[:total_video_complete_views_clicked_to_play] if options[:total_video_complete_views_clicked_to_play]
|
94
|
+
@total_views_sound_on = options[:total_video_views_sound_on] if options[:total_video_views_sound_on]
|
95
|
+
@total_10s_views_sound_on = options[:total_video_10s_views_sound_on] if options[:total_video_10s_views_sound_on]
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [String] the representation of the post.
|
99
|
+
def to_s
|
100
|
+
%Q(#<#{self.class.name} #{@id} "#{@length}">)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
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.alpha12
|
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: 2017-12-
|
12
|
+
date: 2017-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fb-support
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- lib/fb/post.rb
|
125
125
|
- lib/fb/resource.rb
|
126
126
|
- lib/fb/user.rb
|
127
|
+
- lib/fb/video.rb
|
127
128
|
homepage: https://github.com/Fullscreen/fb-core
|
128
129
|
licenses:
|
129
130
|
- MIT
|