Class: Funky::Video

Inherits:
GraphRootNode show all
Defined in:
lib/funky/video.rb

Constant Summary collapse

@@html_page =
HTML::Page.new
@@html_parser =
HTML::Parser.new

Instance Attribute Summary collapse

Attributes inherited from GraphRootNode

#data

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from GraphRootNode

#id, #initialize

Constructor Details

This class inherits a constructor from Funky::GraphRootNode

Instance Attribute Details

#countersObject

Returns the value of attribute counters.



8
9
10
# File 'lib/funky/video.rb', line 8

def counters
  @counters
end

Class Method Details

.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.

Examples:

Getting a video

Funky::Video.find('10153834590672139') # => #<Funky::Video>

Returns:

  • (Funky::Video)

    the data scraped from Facebook’s HTML and encapsulated into a Funky::Video object.



95
96
97
98
# File 'lib/funky/video.rb', line 95

def self.find(video_id)
  counters = @@html_parser.parse html: @@html_page.get(video_id: video_id), 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.

Examples:

Getting a video by url

url = 'https://www.facebook.com/video.php?v=203203106739575'
Funky::Video.find_by_url!(url) # => #<Funky::Video>

Returns:

  • (Funky::Video)

    the data scraped from Facebook’s HTML and encapsulated into a Funky::Video object.



110
111
112
113
# File 'lib/funky/video.rb', line 110

def self.find_by_url!(url)
  url = URL.new(url)
  find(url.video_id)
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.

Examples:

Getting one video

id = '10153834590672139'
Funky::Video.where(id: id) # => [#<Funky::Video>]

Getting multiple videos

ids = ['10154439119663508', '10153834590672139']
Funky::Video.where(id: ids) # => [#<Funky::Video>, #<Funky::Video>]

Returns:

  • (Array<Funky::Video>)

    multiple instances of Funky::Video objects containing data obtained by Facebook’s APIs.



82
83
84
85
# File 'lib/funky/video.rb', line 82

def self.where(id:)
  return nil unless id
  instantiate_collection(fetch_and_parse_data Array(id))
end

Instance Method Details

#comment_countInteger

Returns the total number of comments for the video.

Returns:

  • (Integer)

    the total number of comments for the video.



55
56
57
# File 'lib/funky/video.rb', line 55

def comment_count
  data[:comment_count]
end

#created_timeDateTime

Returns the created time of the video.

Returns:

  • (DateTime)

    the created time of the video.



14
15
16
17
# File 'lib/funky/video.rb', line 14

def created_time
  datetime = data[:created_time]
  DateTime.parse datetime if datetime
end

#descriptionString

Returns the description of the video.

Returns:

  • (String)

    the description of the video.



20
21
22
# File 'lib/funky/video.rb', line 20

def description
  data[:description]
end

#lengthFloat

Returns the length (duration) of the video.

Returns:

  • (Float)

    the length (duration) of the video.



25
26
27
# File 'lib/funky/video.rb', line 25

def length
  data[:length]
end

#like_countInteger

Returns the total number of likes for the video.

Returns:

  • (Integer)

    the total number of likes for the video.



50
51
52
# File 'lib/funky/video.rb', line 50

def like_count
  data[:like_count]
end

#page_idString

Returns the id of Facebook page for the video.

Returns:

  • (String)

    the id of Facebook page for the video.



40
41
42
# File 'lib/funky/video.rb', line 40

def page_id
  data.fetch(:from)[:id]
end

#page_nameString

Returns the name of Facebook page for the video.

Returns:

  • (String)

    the name of Facebook page for the video.



35
36
37
# File 'lib/funky/video.rb', line 35

def page_name
  data.fetch(:from)[:name]
end

#page_urlString

Returns the url of Facebook page for the video.

Returns:

  • (String)

    the url of Facebook page for the video.



45
46
47
# File 'lib/funky/video.rb', line 45

def page_url
  "https://www.facebook.com/#{page_id}"
end

#pictureString

Returns the picture URL of the video.

Returns:

  • (String)

    the picture URL of the video.



30
31
32
# File 'lib/funky/video.rb', line 30

def picture
  data[:picture]
end

#share_countInteger

Returns the total number of shares for the video.

Returns:

  • (Integer)

    the total number of shares for the video.



60
61
62
# File 'lib/funky/video.rb', line 60

def share_count
  data[:share_count]
end

#view_countInteger

Returns the total number of views for the video.

Returns:

  • (Integer)

    the total number of views for the video.



65
66
67
# File 'lib/funky/video.rb', line 65

def view_count
  data[:view_count]
end