funky 0.2.13 → 0.2.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 542904cd43b9e75e88011affb0c5a11b5c8a90c5
4
- data.tar.gz: 4a473d2052b7004b63b179c59fc7ddb0ee0052a3
3
+ metadata.gz: 0ee32f9048854c9fb49890992ea93946e409f1ee
4
+ data.tar.gz: 737ab7795b544735f2d992adacdc5ca1241ab6f7
5
5
  SHA512:
6
- metadata.gz: bc3738d9fc5dfdf001a039dd419fb9b70231a7d4940a9320fc9f035202c89686f313265a2826df0fd13e42db60f2a1069444ec1ab7ba1e18fb1500402350e472
7
- data.tar.gz: 07d3db9a3a46123dab571a28bfa444b2425fc5451db1ab9f202901ec19d9d585fdfc49ea8c9b774b0a23fa4ea8cb47ad2380e9afd61623ec5a410e14d21b070d
6
+ metadata.gz: e44f6f848b9beff059e7fb522a98fd42878e6b5c18389bd827481054428e492d537ee0cc60fce4571e7a5d78a30330ef1c2de7223b7da28be7a91e4fa9ffdb88
7
+ data.tar.gz: 58fd2f90d6e025818ed09f39d47062ce4011e72b7a131bd787041f4ccb66fd2fccca7c5bbabaf15aaacd3e8c0561aefc99f91828ac5e8faa7c44354a2bd4bf90
@@ -6,17 +6,17 @@ 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
- ## 0.2.13 - 2017/01/25
10
-
11
- * [BUGFIX] When Facebook responds with a 302 redirect, sometimes an URL
12
- with a space is returned (e.g., "https://www.facebook.com/KinoToPrzygoda /videos/322742591438587/") that is not URI encoded. This causes URI#parse to raise an InvalidURIError unless the URL is URL encoded.
9
+ ## 0.2.14 - 2017/02/06
13
10
 
11
+ * [ENHANCEMENT] Add the Funky::Page API to fetch name, username,
12
+ location, city, state, zip, street, country, longitude,
13
+ and latitude fields from the Facebook Graph API given a page ID.
14
14
 
15
- ## 2017/01/24
15
+ ## 0.2.13 - 2017/01/25
16
16
 
17
+ * [BUGFIX] Correctly fetch data for videos that belong to a Facebook page with a username that contains URL-unsafe characters. For instance "https://www.facebook.com/KinoToPrzygoda /" (with a space) is a valid Facebook page URL.
17
18
  * [ENHANCEMENT] Use 2.8 of Facebook Graph API (upgrade from 2.6).
18
- - There were deprecations in v2.8 of the Facebook Graph API as well as
19
- additions documented in [the changelog](https://developers.facebook.com/docs/apps/changelog).
19
+ - There were deprecations in v2.8 of the Facebook Graph API as well as additions documented in [the changelog](https://developers.facebook.com/docs/apps/changelog).
20
20
  - The current API of Funky is not affected.
21
21
 
22
22
  ## 0.2.12 - 2017/01/19
data/README.md CHANGED
@@ -47,6 +47,26 @@ There are two ways to configure Funky with your App ID and App Secret:
47
47
  end
48
48
  ```
49
49
 
50
+ ##API Overview
51
+
52
+ Funky consists of 2 different surface APIs - one to fetch video data
53
+ from Facebook and one to fetch page data from Facebook.
54
+
55
+ ##Pages API
56
+
57
+ ### Use #where clause to get an array of videos
58
+
59
+ ```ruby
60
+ ids = ['1487249874853741', '526533744142224']
61
+ pages = Funky::Page.where(id: ids)
62
+ pages.first.id # => '1487249874853741'
63
+ pages.first.name # => 'Sony Pictures'
64
+ pages.first.username # => 'SonyPicturesGlobal'
65
+
66
+ ```
67
+
68
+ ##Videos API
69
+
50
70
  ### Use #where clause to get an array of videos
51
71
 
52
72
  ```ruby
@@ -4,7 +4,9 @@ require 'funky/errors'
4
4
  require 'net/http'
5
5
  require 'funky/connections/api'
6
6
  require 'funky/configuration'
7
+ require "funky/graph_root_node"
7
8
  require "funky/video"
9
+ require "funky/page"
8
10
 
9
11
  module Funky
10
12
  def self.configuration
@@ -0,0 +1,47 @@
1
+ module Funky
2
+ class GraphRootNode
3
+ attr_reader :data
4
+
5
+ def initialize(data)
6
+ @data = data
7
+ end
8
+
9
+ # @return [String] the object ID.
10
+ def id
11
+ data[:id]
12
+ end
13
+
14
+ private
15
+
16
+ def self.fetch_and_parse_data(ids)
17
+ if ids.is_a?(Array) && ids.size > 1
18
+ response = Connection::API.batch_request(ids: ids, fields: fields)
19
+ else
20
+ id = ids.is_a?(Array) ? ids.first : ids
21
+ response = Connection::API.request(id: id, fields: fields)
22
+ end
23
+ parse response
24
+ rescue ContentNotFound
25
+ []
26
+ end
27
+
28
+ def self.parse(response)
29
+ if response.code == '200'
30
+ body = JSON.parse response.body, symbolize_names: true
31
+ if body.is_a? Array
32
+ body.select{|item| item[:code] == 200}.collect do |item|
33
+ JSON.parse(item[:body], symbolize_names: true)
34
+ end.compact
35
+ else
36
+ [body]
37
+ end
38
+ else
39
+ raise ContentNotFound, "Error #{response.code}: #{response.body}"
40
+ end
41
+ end
42
+
43
+ def self.instantiate_collection(items)
44
+ items.collect { |item| new item }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,100 @@
1
+ module Funky
2
+ class Page < GraphRootNode
3
+
4
+ # @note
5
+ # For example, for www.facebook.com/platform the username is 'platform'.
6
+ # @see https://developers.facebook.com/docs/graph-api/reference/page/
7
+ # @return [String] the alias of the Facebook Page.
8
+ def username
9
+ data[:username]
10
+ end
11
+
12
+ # @note
13
+ # For example, for www.facebook.com/platform the name is
14
+ # 'Facebook For Developers'.
15
+ # @see https://developers.facebook.com/docs/graph-api/reference/page/
16
+ # @return [String] the name of the Facebook Page.
17
+ def name
18
+ data[:name]
19
+ end
20
+
21
+ # @note
22
+ # location is a Hash that contains more specific properties such as city,
23
+ # state, zip, etc.
24
+ # @see https://developers.facebook.com/docs/graph-api/reference/page/
25
+ # @return [Hash] the location of the Facebook Page if it is present
26
+ def location
27
+ data.fetch(:location, {})
28
+ end
29
+
30
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
31
+ # @return [String, nil] the city of the Facebook Page if it is present
32
+ def city
33
+ location[:city]
34
+ end
35
+
36
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
37
+ # @return [String, nil] the street of the Facebook Page if it is present
38
+ def street
39
+ location[:street]
40
+ end
41
+
42
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
43
+ # @return [String, nil] the state of the Facebook Page if it is present
44
+ def state
45
+ location[:state]
46
+ end
47
+
48
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
49
+ # @return [String, nil] the country of the Facebook Page if it is present
50
+ def country
51
+ location[:country]
52
+ end
53
+
54
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
55
+ # @return [String] the zip code of the Facebook Page if it is present
56
+ def zip
57
+ location[:zip]
58
+ end
59
+
60
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
61
+ # @return [Fixnum, nil] the latitude of the Facebook Page if it is present
62
+ def latitude
63
+ location[:latitude]
64
+ end
65
+
66
+ # @see https://developers.facebook.com/docs/graph-api/reference/location/
67
+ # @return [Fixnum, nil] the longitude of the Facebook Page if it is present
68
+ def longitude
69
+ location[:longitude]
70
+ end
71
+
72
+ # Fetches the data from Facebook's APIs and instantiates the data
73
+ # into an Array of Funky::Page objects. It can accept one page ID or an
74
+ # array of multiple page IDs.
75
+ #
76
+ # @example Getting one page
77
+ # id = '10153834590672139'
78
+ # Funky::Page.where(id: id) # => [#<Funky::Page>]
79
+ # @example Getting multiple videos
80
+ # ids = ['10154439119663508', '10153834590672139']
81
+ # Funky::Page.where(id: ids) # => [#<Funky::Page>, #<Funky::Page>]
82
+ #
83
+ # @return [Array<Funky::Page>] multiple instances of Funky::Page objects
84
+ # containing data obtained by Facebook's APIs.
85
+ def self.where(id:)
86
+ return nil unless id
87
+ instantiate_collection(fetch_and_parse_data Array(id))
88
+ end
89
+
90
+ private
91
+
92
+ def self.fields
93
+ [
94
+ 'name',
95
+ 'username',
96
+ 'location'
97
+ ]
98
+ end
99
+ end
100
+ end
@@ -1,3 +1,3 @@
1
1
  module Funky
2
- VERSION = "0.2.13"
2
+ VERSION = "0.2.14"
3
3
  end
@@ -3,22 +3,13 @@ require 'funky/html/parser'
3
3
  require 'funky/url'
4
4
 
5
5
  module Funky
6
- class Video
7
- attr_reader :data
6
+ class Video < GraphRootNode
7
+
8
8
  attr_accessor :counters
9
9
 
10
10
  @@html_page = HTML::Page.new
11
11
  @@html_parser = HTML::Parser.new
12
12
 
13
- def initialize(data)
14
- @data = data
15
- end
16
-
17
- # @return [String] the video ID.
18
- def id
19
- data[:id]
20
- end
21
-
22
13
  # @return [DateTime] the created time of the video.
23
14
  def created_time
24
15
  datetime = data[:created_time]
@@ -50,6 +41,7 @@ module Funky
50
41
  data.fetch(:from)[:id]
51
42
  end
52
43
 
44
+ # @return [String] the url of Facebook page for the video.
53
45
  def page_url
54
46
  "https://www.facebook.com/#{page_id}"
55
47
  end
@@ -122,37 +114,6 @@ module Funky
122
114
 
123
115
  private
124
116
 
125
- def self.fetch_and_parse_data(ids)
126
- if ids.is_a?(Array) && ids.size > 1
127
- response = Connection::API.batch_request(ids: ids, fields: fields)
128
- else
129
- id = ids.is_a?(Array) ? ids.first : ids
130
- response = Connection::API.request(id: id, fields: fields)
131
- end
132
- parse response
133
- rescue ContentNotFound
134
- []
135
- end
136
-
137
- def self.parse(response)
138
- if response.code == '200'
139
- body = JSON.parse response.body, symbolize_names: true
140
- if body.is_a? Array
141
- body.select{|item| item[:code] == 200}.collect do |item|
142
- JSON.parse(item[:body], symbolize_names: true)
143
- end.compact
144
- else
145
- [body]
146
- end
147
- else
148
- raise ContentNotFound, "Error #{response.code}: #{response.body}"
149
- end
150
- end
151
-
152
- def self.instantiate_collection(items)
153
- items.collect { |item| new item }
154
- end
155
-
156
117
  def self.fields
157
118
  [
158
119
  'created_time',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: funky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.13
4
+ version: 0.2.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-25 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -121,8 +121,10 @@ files:
121
121
  - lib/funky/connections/api.rb
122
122
  - lib/funky/connections/base.rb
123
123
  - lib/funky/errors.rb
124
+ - lib/funky/graph_root_node.rb
124
125
  - lib/funky/html/page.rb
125
126
  - lib/funky/html/parser.rb
127
+ - lib/funky/page.rb
126
128
  - lib/funky/url.rb
127
129
  - lib/funky/version.rb
128
130
  - lib/funky/video.rb