Videos
Yt::Video
represents a YouTube video.
You can initialize one using either the YouTube ID or URL:
Some methods from other classes also return a Yt::Video
object
(e.g.: Yt::Account#upload_video
) or a collection of Yt::Video
objects (e.g.: #videos
from Yt::Account
,
Yt::Channel
and Yt::Playlist
).
Authentication
Most methods of Yt::Video
retrieve public data from YouTube (e.g.: fetch a video’s title and description).
To use these methods (marked with below), you only need to get a Server API key from Google and configure:
Other methods acts on behalf of YouTube accounts (e.g.: like a video, mark a video as private).
To use these methods (marked with below), you need to get an API Client ID/Secret from Google, obtain an access or refresh token from the account you want to act as, and pass the account as the :auth
parameter:
Lastly, some methods acts on behalf of YouTube content owners (e.g.: fetch the earnings of a video).
To use these methods (marked with below), you need to get an API Client ID/Secret from Google, obtain an access or refresh token from the content owner, and pass the content owner as the :auth
parameter:
List of Yt::Video
methods
- any authentication works Video’s Snippet
→ Yt docs
video.id # => "BPNYv0vd78A"
→ Yt docsvideo.title # => "Yt info"
→ Yt docsvideo.description # => "A test video for the Yt gem"
→ Yt docsvideo.published_at # => 2015-03-31 06:46:46 UTC
→ Yt docsvideo.thumbnail_url # => "https://i.ytimg.com/vi/BPNYv0vd78A/default.jpg"
→ Yt docsvideo.channel_id # => "UCwCnUcLcb9-eSrHa_RQGkQQ"
→ Yt docsvideo.channel_title # => "Yt test Channel"
→ Yt docsvideo.category_id # => "22"
→ Yt docsvideo.category_title # => "People & Blogs"
- must authenticate as the video’s account Video’s Tags
→ Yt docs
video.tags # => ["test", "video"]
- any authentication works Video’s Statistics
- any authentication works (for public videos) Video’s Privacy Status
- must authenticate as a YouTube account Video’s Rating
- must authenticate as the video’s account or content owner Video’s Updates
- any authentication works Video’s License
- any authentication works Video’s Content Details
- must authenticate as the video’s account Video’s File Details
- any authentication works Video’s Player
→ Yt docs
video.embed_html # => "<iframe type='text/html' src='https://www.youtube…>"
- any authentication works Video’s Live Broadcast Details
→ Yt docs
video.live_broadcast_content # => "live"
→ Yt docsvideo.scheduled_start_time # => 2015-03-31 06:16:46 UTC
→ Yt docsvideo.scheduled_end_time # => 2015-03-31 07:16:46 UTC
→ Yt docsvideo.actual_start_time # => 2015-03-31 06:16:48 UTC
→ Yt docsvideo.actual_end_time # => nil
→ Yt docsvideo.concurrent_viewers # => 12
- any authentication works Video’s Upload Details
- any authentication works Video’s Failure Reasons
- any authentication works Video’s Rejection Reasons
→ Yt docs
video.claimed? # => false
→ Yt docsvideo.infringes_copyright? # => false
→ Yt docsvideo.duplicate? # => false
→ Yt docsvideo.too_long? # => false
→ Yt docsvideo.violates_terms_of_use? # => false
→ Yt docsvideo.inappropriate? # => false
→ Yt docsvideo.infringes_trademark? # => false
→ Yt docsvideo.belongs_to_closed_account? # => false
→ Yt docsvideo.belongs_to_suspended_account? # => false
- any authentication works Video’s Visibility Status
- any authentication works Video’s Associations
→ Yt docs
video.annotations # => #<Yt::Collections::Annotations …>
- must authenticate as the video’s content owner Video’s Monetization
→ Yt docs
video.ad_formats # => ["standard_instream", "trueview_instream"]
→ Yt docsvideo.estimated_revenue # => {Fri, 14 Oct 2016 => 455.1, …}
→ Yt docsvideo.ad_impressions # => {Fri, 14 Oct 2016 => 84734, …}
→ Yt docsvideo.playback_based_cpm # => {Wed, 8 May 2014 => 1.24, Thu, 9 May 2014 => …}
→ Yt docsvideo.monetized_playbacks # => {Wed, 8 May 2014 => 53345, …}
Notes about Yt::Video
analytics methods
By default, analytics methods return the total value for the lifetime of a video.
To set specific starting and ending dates, pass the :since
and :until
options (either as Date or String).
To obtain one value per each day or month of the range you specify (rather than the total), use the :by
option.
To limit the results to a specific country or US state, use the :in
option.
Note that only some methods can be limited by US state; check the docs for details.
For brevity, the options above are omitted in the examples below.
- must authenticate as the video’s account or content owner Video’s Analytics
-
→ Yt docs
video.views # => {total: 3453}
→ Yt docsvideo.comments # => {total: 304}
→ Yt docsvideo.likes # => {total: 459}
→ Yt docsvideo.dislikes # => {total: 923}
→ Yt docsvideo.shares # => {total: 223}
→ Yt docsvideo.subscribers_gained # => {total: 232}
→ Yt docsvideo.subscribers_lost # => {total: 904}
→ Yt docsvideo.videos_added_to_playlists # => {total: 224}
→ Yt docsvideo.videos_removed_from_playlists # => {total: 322}
→ Yt docsvideo.average_view_duration # => {total: 23}
→ Yt docsvideo.average_view_percentage # => {total: 2.45}
→ Yt docsvideo.annotation_clicks # => {total: 723}
→ Yt docsvideo.annotation_click_through_rate # => {total: 8.34}
→ Yt docsvideo.annotation_close_rate # => {total: 0.34}
→ Yt docsvideo.estimated_minutes_watched # => {total: 4}
→ Yt docsvideo.card_impressions # => {total: 3}
→ Yt docsvideo.card_clicks # => {total: 3}
→ Yt docsvideo.card_click_rate # => {total: 0.65}
→ Yt docsvideo.card_teaser_impressions # => {total: 3}
→ Yt docsvideo.card_teaser_clicks # => {total: 3}
→ Yt docsvideo.card_teaser_click_rate # => {total: 0.65}
→ Yt docsvideo.views by: :country # => {"US" => 12, "IT" => 9, …}
→ Yt docsvideo.comments by: :country # => {"US" => 7, "IT" => 5, …}
→ Yt docsvideo.likes by: :country # => {"US" => 32, "IT" => 8, …}
→ Yt docsvideo.dislikes by: :country # => {"US" => 87, "IT" => 6, …}
→ Yt docsvideo.shares by: :country # => {"US" => 44, "IT" => 3, …}
→ Yt docsvideo.subscribers_gained by: :country # => {"US" => 32, …}
→ Yt docsvideo.subscribers_lost by: :country # => {"US" => 1, …}
→ Yt docsvideo.favorites_added by: :country # => {"US" => 181, …}
→ Yt docsvideo.favorites_removed by: :country # => {"US" => 0, …}
→ Yt docsvideo.videos_added_to_playlists by: :country # => {"US" => 181, …}
→ Yt docsvideo.videos_removed_from_playlists by: :country # => {"US" => 0, …}
→ Yt docsvideo.average_view_duration by: :country # => {"US" => 456, …}
→ Yt docsvideo.average_view_percentage by: :country # => {"US" => 38.85, …}
→ Yt docsvideo.annotation_clicks by: :country # => {"US" => 329, …}
→ Yt docsvideo.annotation_click_through_rate by: :country # => {"US" => 0.3, …}
→ Yt docsvideo.annotation_close_rate by: :country # => {"US" => 0.1, …}
→ Yt docsvideo.estimated_minutes_watched by: :country # => {"US" => 124, …}
→ Yt docsvideo.views by: :state # => {"TX" => 12, "ND" => 9, …}
→ Yt docsvideo.average_view_duration by: :state # => {"TX" => 456, …}
→ Yt docsvideo.average_view_percentage by: :state # => {"TX" => 38.85, …}
→ Yt docsvideo.annotation_clicks by: :state # => {"TX" => 329, …}
→ Yt docsvideo.annotation_click_through_rate by: :state # => {"TX" => 0.3, …}
→ Yt docsvideo.annotation_close_rate by: :state # => {"TX" => 0.1, …}
→ Yt docsvideo.estimated_minutes_watched by: :state # => {"TX" => 124, …}
→ Yt docsvideo.views by: :playback_location # => {watch: 467, embedded: 53, …}
→ Yt docsvideo.views by: :embedded_player_location # => {"fullscreen.net" => 92, …}
→ Yt docsvideo.views by: :related_video, includes: [:status] # => {#<Yt::Video> => …}
→ Yt docsvideo.views by: :device_type # => {mobile: 457, tv: 954, …}
→ Yt docsvideo.views by: :subscribed_status # => {subscribed: 57, unsubscribed: 54}
→ Yt docsvideo.views by: :traffic_source # => {advertising: 53, channel: 7, …}
→ Yt docsvideo.views by: :search_term # => {"fullscreen" => 7, "music" => 3, …}
→ Yt docsvideo.views by: :referrer # => {"Google Search" => 7, "ytimg.com" => 3, …}
→ Yt docsvideo.estimated_minutes_watched by: :playback_location # => {watch: 17, …}
→ Yt docsvideo.estimated_minutes_watched by: :embedded_player_location # => {"t.co"…}
→ Yt docsvideo.estimated_minutes_watched by: :related_video # => {#<Yt::Video>…}
→ Yt docsvideo.estimated_minutes_watched by: :device_type # => {mobile: 57, …}
→ Yt docsvideo.estimated_minutes_watched by: :traffic_source # => {search: 3, …}
→ Yt docsvideo.estimated_minutes_watched by: :search_term # => {"music" => 7, …}
→ Yt docsvideo.estimated_minutes_watched by: :referrer # => {"Facebook" => 7, …}
→ Yt docsvideo.viewer_percentage # => {female: {'18-24' => 4.12, '25-34' => …}, …}
→ Yt docsvideo.viewer_percentage by: :gender # => {female: 12.3, male: 87.7}
→ Yt docsvideo.viewer_percentage by: :age_group # => {'18-24' => 4.1, '25-34' => …}
→ Yt docsvideo.reports only: [:views, :shares] # => {views: {…}, shares: {…}}