Class: Funky::Video
- Inherits:
-
Object
- Object
- Funky::Video
- Defined in:
- lib/funky/video.rb
Constant Summary collapse
- @@html_page =
HTML::Page.new
- @@html_parser =
HTML::Parser.new
Instance Attribute Summary collapse
-
#counters ⇒ Object
Returns the value of attribute counters.
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Class Method Summary collapse
- .fetch_and_parse_data(ids) ⇒ Object
- .fields ⇒ Object
-
.find(video_id) ⇒ Funky::Video
Fetches the data from Facebook's HTML and instantiates the data into a single Funky::Video object.
-
.find_by_url!(url) ⇒ Funky::Video
Similar to #find, but it finds the video by url instead of video id.
- .instantiate_collection(items) ⇒ Object
- .parse(response) ⇒ Object
-
.where(id:) ⇒ Array<Funky::Video>
Fetches the data from Facebook's APIs and instantiates the data into an Array of Funky::Video objects.
Instance Method Summary collapse
-
#comment_count ⇒ Integer
The total number of comments for the video.
-
#created_time ⇒ DateTime
The created time of the video.
-
#description ⇒ String
The description of the video.
-
#id ⇒ String
The video ID.
-
#initialize(data) ⇒ Video
constructor
A new instance of Video.
-
#length ⇒ Float
The length (duration) of the video.
-
#like_count ⇒ Integer
The total number of likes for the video.
-
#picture ⇒ String
The picture URL of the video.
-
#share_count ⇒ Integer
The total number of shares for the video.
-
#view_count ⇒ Integer
The total number of views for the video.
Constructor Details
#initialize(data) ⇒ Video
Returns a new instance of Video.
13 14 15 |
# File 'lib/funky/video.rb', line 13 def initialize(data) @data = data end |
Instance Attribute Details
#counters ⇒ Object
Returns the value of attribute counters.
8 9 10 |
# File 'lib/funky/video.rb', line 8 def counters @counters end |
#data ⇒ Object (readonly)
Returns the value of attribute data.
7 8 9 |
# File 'lib/funky/video.rb', line 7 def data @data end |
Class Method Details
.fetch_and_parse_data(ids) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/funky/video.rb', line 111 def self.fetch_and_parse_data(ids) if ids.is_a?(Array) && ids.size > 1 response = Connection::API.batch_request(ids: ids, fields: fields) else id = ids.is_a?(Array) ? ids.first : ids response = Connection::API.request(id: id, fields: fields) end parse response rescue ContentNotFound [] end |
.fields ⇒ Object
142 143 144 145 146 147 148 149 |
# File 'lib/funky/video.rb', line 142 def self.fields [ 'created_time', 'description', 'length', 'picture' ] end |
.find(video_id) ⇒ Funky::Video
Fetches the data from Facebook's HTML and instantiates the data into a single Funky::Video object. It can accept one only video ID.
89 90 91 92 |
# File 'lib/funky/video.rb', line 89 def self.find(video_id) counters = @@html_parser.parse html: @@html_page.get(video_id: video_id) new counters.merge(id: video_id) end |
.find_by_url!(url) ⇒ Funky::Video
Similar to #find, but it finds the video by url instead of video id. Fetches the data from Facebook's HTML and instantiates the data into a single Funky::Video object. It can accept one only video url.
104 105 106 107 |
# File 'lib/funky/video.rb', line 104 def self.find_by_url!(url) url = URL.new(url) find(url.video_id) end |
.instantiate_collection(items) ⇒ Object
138 139 140 |
# File 'lib/funky/video.rb', line 138 def self.instantiate_collection(items) items.collect { |item| new item } end |
.parse(response) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/funky/video.rb', line 123 def self.parse(response) if response.code == '200' body = JSON.parse response.body, symbolize_names: true if body.is_a? Array body.select{|item| item[:code] == 200}.collect do |item| JSON.parse(item[:body], symbolize_names: true) end.compact else [body] end else raise ContentNotFound, "Error #{response.code}: #{response.body}" end end |
.where(id:) ⇒ Array<Funky::Video>
Fetches the data from Facebook's APIs and instantiates the data into an Array of Funky::Video objects. It can accept one video ID or an array of multiple video IDs.
76 77 78 79 |
# File 'lib/funky/video.rb', line 76 def self.where(id:) return nil unless id instantiate_collection(fetch_and_parse_data Array(id)) end |
Instance Method Details
#comment_count ⇒ Integer
Returns the total number of comments for the video.
49 50 51 |
# File 'lib/funky/video.rb', line 49 def comment_count data[:comment_count] end |
#created_time ⇒ DateTime
Returns the created time of the video.
23 24 25 26 |
# File 'lib/funky/video.rb', line 23 def created_time datetime = data[:created_time] DateTime.parse datetime if datetime end |
#description ⇒ String
Returns the description of the video.
29 30 31 |
# File 'lib/funky/video.rb', line 29 def description data[:description] end |
#id ⇒ String
Returns the video ID.
18 19 20 |
# File 'lib/funky/video.rb', line 18 def id data[:id] end |
#length ⇒ Float
Returns the length (duration) of the video.
34 35 36 |
# File 'lib/funky/video.rb', line 34 def length data[:length] end |
#like_count ⇒ Integer
Returns the total number of likes for the video.
44 45 46 |
# File 'lib/funky/video.rb', line 44 def like_count data[:like_count] end |
#picture ⇒ String
Returns the picture URL of the video.
39 40 41 |
# File 'lib/funky/video.rb', line 39 def picture data[:picture] end |
#share_count ⇒ Integer
Returns the total number of shares for the video.
54 55 56 |
# File 'lib/funky/video.rb', line 54 def share_count data[:share_count] end |
#view_count ⇒ Integer
Returns the total number of views for the video.
59 60 61 |
# File 'lib/funky/video.rb', line 59 def view_count data[:view_count] end |