fb-core 1.0.0.alpha2 → 1.0.0.alpha4
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 +3 -0
- data/README.md +48 -1
- data/fb-core.gemspec +2 -1
- data/lib/fb/core.rb +3 -1
- data/lib/fb/core/version.rb +1 -1
- data/lib/fb/page.rb +41 -1
- data/lib/fb/paginated_request.rb +22 -0
- data/lib/fb/post.rb +31 -0
- data/lib/fb/resource.rb +11 -0
- data/lib/fb/user.rb +2 -10
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95ee401be1930e9abee5c75dd16756a55d88b8c0
|
4
|
+
data.tar.gz: 3f8eb395c5ddb81ecbe32e5350e27d301793dc11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78d6a2ca60bfb77814197651fb078481e07ad9cf3164d5489b2880cce292db930dcae9c9843d21b12bc7a673f31c029355f1c480b3730046fc37f33e5851af7a
|
7
|
+
data.tar.gz: 86a411fe281ec2210fd5617b8edbb753287baa407ac69b0e256c46d8d804cb4bdccdafef27041ea8212e815d32e1a93b471a02cce209014e8c23719370b4e6de
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -33,7 +33,7 @@ user.email # => 'john.smith@example.com'
|
|
33
33
|
Fb::User#pages
|
34
34
|
--------------
|
35
35
|
|
36
|
-
Given an user access token with the `
|
36
|
+
Given an user access token with the `pages_show_list` scope, you can get the list of Facebook pages managed by the user by calling:
|
37
37
|
|
38
38
|
```ruby
|
39
39
|
user = Fb::User.new access_token: '--valid-access-token--'
|
@@ -41,6 +41,53 @@ user.pages
|
|
41
41
|
# => [#<Fb::Page: id="1234", name="sample1">, #<Fb::Page: id="5678", name="sample2">]
|
42
42
|
```
|
43
43
|
|
44
|
+
Fb::Page#posts
|
45
|
+
--------------
|
46
|
+
|
47
|
+
Given a page with posts, you can get the posts on the page since creation by calling:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
page = Fb::Page.new access_token: '--valid-access-token--', id: '--valid-id--'
|
51
|
+
page.posts
|
52
|
+
# => [#<Fb::Post: id="1234", type="video">, #<Fb::Post: id="5678", type="video">]
|
53
|
+
```
|
54
|
+
|
55
|
+
Fb::Page#like_count
|
56
|
+
--------------
|
57
|
+
|
58
|
+
Given a page, you can get the the number of likes for the page.
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
page = Fb::Page.new access_token: '--valid-access-token--', id: '--valid-id--'
|
62
|
+
page.like_count
|
63
|
+
# => 15000
|
64
|
+
```
|
65
|
+
|
66
|
+
Pass an `until` option to get the count at a certain date.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
page.like_count until: Date.today - 7
|
70
|
+
# => 10000
|
71
|
+
```
|
72
|
+
|
73
|
+
Fb::Page#view_count
|
74
|
+
--------------
|
75
|
+
|
76
|
+
You can also get the the number of views for the page.
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
page = Fb::Page.new access_token: '--valid-access-token--', id: '--valid-id--'
|
80
|
+
page.view_count
|
81
|
+
# => 12345
|
82
|
+
```
|
83
|
+
|
84
|
+
Pass an `until` option to get the count at a certain date.
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
page.view_count until: Date.today - 7
|
88
|
+
# => 10000
|
89
|
+
```
|
90
|
+
|
44
91
|
## Development
|
45
92
|
|
46
93
|
To run tests, obtain a long-term access token for a Facebook user who manages
|
data/fb-core.gemspec
CHANGED
@@ -15,6 +15,8 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.homepage = 'https://github.com/Fullscreen/fb-core'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
18
|
+
spec.required_ruby_version = '>= 2.4'
|
19
|
+
|
18
20
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
21
|
f.match(%r{^(test|spec|features)/})
|
20
22
|
end
|
@@ -23,7 +25,6 @@ Gem::Specification.new do |spec|
|
|
23
25
|
spec.require_paths = ['lib']
|
24
26
|
|
25
27
|
spec.add_dependency 'fb-support', '~> 1.0.0.alpha1'
|
26
|
-
|
27
28
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
28
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
29
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
data/lib/fb/core.rb
CHANGED
data/lib/fb/core/version.rb
CHANGED
data/lib/fb/page.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Fb
|
2
2
|
# Provides methods to interact with Facebook pages through the Graph API.
|
3
3
|
# @see https://developers.facebook.com/docs/graph-api/reference/page/
|
4
|
-
class Page
|
4
|
+
class Page < Resource
|
5
5
|
# @option [String] the page’s unique ID.
|
6
6
|
attr_reader :id
|
7
7
|
|
@@ -15,15 +15,55 @@ module Fb
|
|
15
15
|
# @option [String] :id The page’s unique ID.
|
16
16
|
# @option [String] :name The page’s name.
|
17
17
|
# @option [String] :category The page’s category.
|
18
|
+
# @option [String] :access_token an access token for the page.
|
18
19
|
def initialize(options = {})
|
19
20
|
@id = options[:id]
|
20
21
|
@name = options[:name]
|
21
22
|
@category = options[:category]
|
23
|
+
@access_token = options[:access_token]
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Integer] the number of views of the page.
|
27
|
+
# @param [Hash] options the options
|
28
|
+
# @option [Date] :until only count the views until this day.
|
29
|
+
def view_count(options = {})
|
30
|
+
views = insights 'page_video_views', period: :day, since: '1652 days ago'
|
31
|
+
views.select!{|v| v['end_time'] < options[:until].strftime('%Y-%m-%dT%H:%M:%S+0000')} if options[:until]
|
32
|
+
views.sum{|x| x.fetch('value', 0)} || 0
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Integer] the number of likes of the page.
|
36
|
+
# @param [Hash] options the options
|
37
|
+
# @option [Date] :until only count the likes until this day.
|
38
|
+
def like_count(options = {})
|
39
|
+
since_date = options.fetch :until, Date.today - 1
|
40
|
+
likes = insights('page_fans', since: since_date, until: since_date + 2)
|
41
|
+
likes.last['value'] || 0
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Array<Fb::Post>] the posts published on the page.
|
45
|
+
def posts
|
46
|
+
@posts ||= begin
|
47
|
+
fields = %i(type created_time).join ','
|
48
|
+
params = {access_token: @access_token, limit: 100, fields: fields}
|
49
|
+
request = PaginatedRequest.new path: "/v2.9/#{@id}/posts", params: params
|
50
|
+
request.run.body['data'].map do |post_data|
|
51
|
+
Post.new symbolize_keys post_data
|
52
|
+
end
|
53
|
+
end
|
22
54
|
end
|
23
55
|
|
24
56
|
# @return [String] the representation of the page.
|
25
57
|
def to_s
|
26
58
|
%Q(#<#{self.class.name} #{@id} "#{@name}">)
|
27
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def insights(metric, options = {})
|
64
|
+
params = options.merge metric: metric, access_token: @access_token
|
65
|
+
request = HTTPRequest.new path: "/v2.9/#{@id}/insights", params: params
|
66
|
+
request.run.body['data'].find{|data| data['name'] == metric}['values']
|
67
|
+
end
|
28
68
|
end
|
29
69
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fb
|
2
|
+
# Provides a wrapper for HTTPRequest when the result has pagination links.
|
3
|
+
# @api private
|
4
|
+
class PaginatedRequest < HTTPRequest
|
5
|
+
# Sends the request and returns the response with the body parsed from JSON.
|
6
|
+
# If the response body contains a link to the next page, fetches that page
|
7
|
+
# as well and combines the data with the previous page.
|
8
|
+
# @return [Net::HTTPResponse] if the request succeeds.
|
9
|
+
# @raise [Fb::HTTPError] if the request fails.
|
10
|
+
def run
|
11
|
+
response = super
|
12
|
+
while after = response.body.dig('paging', 'cursors', 'after')
|
13
|
+
next_params = @params.merge after: after, limit: 100
|
14
|
+
next_request = HTTPRequest.new path: @path, params: next_params
|
15
|
+
next_body = next_request.run.body
|
16
|
+
response.body['paging'] = next_body['paging']
|
17
|
+
response.body['data'].concat next_body['data']
|
18
|
+
end
|
19
|
+
response
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/fb/post.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Ruby client to authenticate a Facebook user.
|
2
|
+
# @see http://www.rubydoc.info/gems/Fb/
|
3
|
+
module Fb
|
4
|
+
# Fb::Post reprensents a Facebook post. Post provides getters for:
|
5
|
+
# :id, :title, :url, :created_time, and :type.
|
6
|
+
class Post
|
7
|
+
# @option [String] the post’s unique ID.
|
8
|
+
attr_reader :id
|
9
|
+
|
10
|
+
# @option [String] the post’s type.
|
11
|
+
attr_reader :type
|
12
|
+
|
13
|
+
# @option [Time] the post’s creation time.
|
14
|
+
attr_reader :created_at
|
15
|
+
|
16
|
+
# @param [Hash] options the options to initialize an instance of Fb::Post.
|
17
|
+
# @option [String] :id the post id.
|
18
|
+
# @option [String] :type the post’s type.
|
19
|
+
# @option [String] :created_time the post’s creation time in iso8601 format.
|
20
|
+
def initialize(options = {})
|
21
|
+
@id = options[:id]
|
22
|
+
@type = options[:type]
|
23
|
+
@created_at = Time.parse(options[:created_time]) if options[:created_time]
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [String] the representation of the post.
|
27
|
+
def to_s
|
28
|
+
%Q(#<#{self.class.name} #{@id} "#{@type}">)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/fb/resource.rb
ADDED
data/lib/fb/user.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Fb
|
2
2
|
# Provides methods to interact with Facebook users through the Graph API.
|
3
3
|
# @see https://developers.facebook.com/docs/graph-api/reference/user/
|
4
|
-
class User
|
4
|
+
class User < Resource
|
5
5
|
# @param [Hash] options to initialize a User object.
|
6
6
|
# @option [String] :access_token an access token for the user.
|
7
7
|
def initialize(options = {})
|
@@ -23,17 +23,9 @@ module Fb
|
|
23
23
|
params = {access_token: @access_token}
|
24
24
|
request = HTTPRequest.new path: '/me/accounts', params: params
|
25
25
|
request.run.body['data'].map do |page_data|
|
26
|
-
Page.new symbolize_keys(page_data)
|
26
|
+
Page.new symbolize_keys(page_data.merge access_token: @access_token)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def symbolize_keys(hash)
|
34
|
-
{}.tap do |new_hash|
|
35
|
-
hash.each_key{|key| new_hash[key.to_sym] = hash[key]}
|
36
|
-
end
|
37
|
-
end
|
38
30
|
end
|
39
31
|
end
|
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.alpha4
|
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-
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fb-support
|
@@ -118,6 +118,9 @@ files:
|
|
118
118
|
- lib/fb/core.rb
|
119
119
|
- lib/fb/core/version.rb
|
120
120
|
- lib/fb/page.rb
|
121
|
+
- lib/fb/paginated_request.rb
|
122
|
+
- lib/fb/post.rb
|
123
|
+
- lib/fb/resource.rb
|
121
124
|
- lib/fb/user.rb
|
122
125
|
homepage: https://github.com/Fullscreen/fb-core
|
123
126
|
licenses:
|
@@ -131,7 +134,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
134
|
requirements:
|
132
135
|
- - ">="
|
133
136
|
- !ruby/object:Gem::Version
|
134
|
-
version: '
|
137
|
+
version: '2.4'
|
135
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
139
|
requirements:
|
137
140
|
- - ">"
|