--- title: "Yt::Video" h2: "Videos" ---

Yt::Video represents a YouTube video. Initialize using its YouTube ID:

{% include doc.html instance="Video#initialize" %}{% include example.html object='video = Yt::Video' method='new' params=' id: "gknzFj_0vvY"' %}
{% include example.html result='#<Yt::Video @id=gknzFj_0vvY>' %}
{% include doc.html instance="Video#canonical_url" %}{% include example.html object='video' method='canonical_url' %}
{% include example.html result='"https://www.youtube.com/watch?v=gknzFj_0vvY"' %}

Authentication

Most methods of Yt::Video retrieve public data from YouTube (e.g.: fetch a video’s title).
To use these methods (marked with   below), you only need to generate an API key and configure:

{% highlight ruby %} Yt.configuration.api_key = "" ## use your API key video = Yt::Video.new id: 'gknzFj_0vvY' ## use any video ID video.title # => "First public video" {% endhighlight %}

List of Yt::Video data methods

{% include dt.html title="Video’s snippet" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#id" %}{% include example.html object='video' method='id' result='"gknzFj_0vvY"' %}
{% include doc.html instance="Video#title" %}{% include example.html object='video' method='title' result='"First public video"' %}
{% include doc.html instance="Video#description" %}{% include example.html object='video' method='description' result='"A YouTube video to test the yt gem."' %}
{% include doc.html instance="Video#published_at" %}{% include example.html object='video' method='published_at' result='2016-10-20 02:19:05 UTC' %}
{% include doc.html instance="Video#thumbnail_url" %}{% include example.html object='video' method='thumbnail_url' result='"https://i.ytimg.com/vi/gknzFj_0vvY/default.jpg"' %}
{% include doc.html instance="Video#channel_id" %}{% include example.html object='video' method='channel_id' result='"UCwCnUcLcb9-eSrHa_RQGkQQ"' %}
{% include doc.html instance="Video#channel_title" %}{% include example.html object='video' method='channel_title' result='"Yt Test"' %}
{% include doc.html instance="Video#tags" %}{% include example.html object='video' method='tags' result='["yt", "test", "tag"]' %}
{% include doc.html instance="Video#category_id" %}{% include example.html object='video' method='category_id' result='22' %}
{% include doc.html instance="Video#category_title" %}{% include example.html object='video' method='category_title' result='"People & Blogs"' %}
{% include doc.html instance="Video#live_broadcast_content" %}{% include example.html object='video' method='live_broadcast_content' result='"none"' %}
{% include dt.html title="Video’s status" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#privacy_status" %}{% include example.html object='video' method='privacy_status' result='"public"' %}
{% include doc.html instance="Video#upload_status" %}{% include example.html object='video' method='upload_status' result='"processed"' %}
{% include doc.html instance="Video#license" %}{% include example.html object='video' method='license' result='"creative_common"' %}
{% include doc.html instance="Video#embeddable" %}{% include example.html object='video' method='embeddable' result='true' %}
{% include doc.html instance="Video#public_stats_viewable" %}{% include example.html object='video' method='public_stats_viewable' result='false' %}
{% include dt.html title="Video’s statistics" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#view_count" %}{% include example.html object='video' method='view_count' result='123' %}
{% include doc.html instance="Video#like_count" %}{% include example.html object='video' method='like_count' result='93' %}
{% include doc.html instance="Video#dislike_count" %}{% include example.html object='video' method='dislike_count' result='42' %}
{% include doc.html instance="Video#comment_count" %}{% include example.html object='video' method='comment_count' result='62' %}
{% include dt.html title="Video’s content details" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#duration" %}{% include example.html object='video' method='duration' result='"PT2S"' %}
{% include doc.html instance="Video#seconds" %}{% include example.html object='video' method='seconds' result='2' %}
{% include doc.html instance="Video#length" %}{% include example.html object='video' method='length' result='"00:00:02"' %}
{% include doc.html instance="Video#dimension" %}{% include example.html object='video' method='dimension' result='"2d"' %}
{% include doc.html instance="Video#definition" %}{% include example.html object='video' method='definition' result='"sd"' %}
{% include doc.html instance="Video#caption" %}{% include example.html object='video' method='caption' result='false' %}
{% include doc.html instance="Video#licensed_content" %}{% include example.html object='video' method='licensed_content' result='false' %}
{% include doc.html instance="Video#projection" %}{% include example.html object='video' method='projection' result='"rectangular"' %}

To limit the number of HTTP requests, use select to specify which parts of the video’s data to load:

{% include example.html object='slow = video' result='without select: 2 HTTP requests' %}
{% include example.html object='slow' method='title' result='one HTTP request to fetch the video’s snippet' %}
{% include example.html object='slow' method='privacy_status' result='=> another HTTP request to fetch the video’s status' %}

{% include doc.html instance="Video#select" %}{% include example.html object='fast = video' method='select' params=' :snippet, :status' result='with select: 1 HTTP request' %}
{% include example.html object='fast' method='title' result='one HTTP request to fetch both the video’s snippet and status' %}
{% include example.html object='fast' method='privacy_status' result='=> no extra HTTP requests' %}
{% include dt.html title="Video’s channel" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#channel" %}{% include example.html object='video' method='channel' %}
{% include example.html result='#<Yt::Channel @id=UCwCnUcLcb9-eSrHa_RQGkQQ>' %}
{% include dt.html title="Video’s comment threads" label="success" auth="any authentication works" %}
{% include doc.html instance="Video#threads" %}{% include example.html object='video' method='threads' %}
{% include example.html result='#<Yt::Relation [#<Yt::Thread @id=z119d45>, #<Yt::Thread @id=z120d734>, ...]>' %}

Before iterating through threads, use select to specify which parts to load:

{% include doc.html instance="Relation#select" %}{% include example.html object='threads = video.threads' method='select' params=' :id, :snippet' %}
{% include example.html object='threads' method='map &:id' result='["z119d45", ...]' %}
{% include example.html object='threads' method='map &:top_level_comment' result='[#<Yt::Comment @id=z119d45>, ...]' %}

You can also use limit to only fetch a certain number of threads:

{% include doc.html instance="Relation#limit" %}{% include example.html object='threads = video.threads' method='limit' params=' 2' %}
{% include example.html object='threads' method='map &:id' result='["z119d45", "z120d734"]' %}

You can also use size to quickly obtain the estimated number of threads:

{% include doc.html instance="Relation#size" %}{% include example.html object='video.threads' method='size' result='63' %}