yt-core 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +14 -22
- data/.rspec +3 -0
- data/.travis.yml +8 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +2 -1
- data/LICENSE.txt +17 -18
- data/README.md +81 -17
- data/Rakefile +8 -1
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/_config.yml +10 -0
- data/docs/_includes/doc.html +1 -0
- data/docs/_includes/dt.html +4 -0
- data/docs/_includes/example.html +1 -0
- data/docs/_includes/footer.html +3 -0
- data/docs/_includes/head.html +21 -0
- data/docs/_includes/header.html +57 -0
- data/docs/_layouts/default.html +58 -0
- data/docs/apple-touch-icon-precomposed.png +0 -0
- data/docs/channels.html +142 -0
- data/docs/css/yt.css +40 -0
- data/docs/errors.html +28 -0
- data/docs/favicon.ico +0 -0
- data/docs/fonts/SecondaRound-Bold.eot +0 -0
- data/docs/fonts/SecondaRound-Bold.svg +2160 -0
- data/docs/fonts/SecondaRound-Bold.ttf +0 -0
- data/docs/fonts/SecondaRound-Bold.woff +0 -0
- data/docs/fonts/SecondaRound-Bold.woff2 +0 -0
- data/docs/fonts/SecondaRound-Regular.eot +0 -0
- data/docs/fonts/SecondaRound-Regular.svg +1873 -0
- data/docs/fonts/SecondaRound-Regular.ttf +0 -0
- data/docs/fonts/SecondaRound-Regular.woff +0 -0
- data/docs/fonts/SecondaRound-Regular.woff2 +0 -0
- data/docs/images/console-01.png +0 -0
- data/docs/images/console-02.png +0 -0
- data/docs/images/console-03.png +0 -0
- data/docs/images/console-04.png +0 -0
- data/docs/images/console-05.png +0 -0
- data/docs/images/console-06.png +0 -0
- data/docs/images/console-07.png +0 -0
- data/docs/images/logo.png +0 -0
- data/docs/images/robot.png +0 -0
- data/docs/images/robots.png +0 -0
- data/docs/index.html +37 -0
- data/docs/playlist_items.html +65 -0
- data/docs/playlists.html +114 -0
- data/docs/urls.html +52 -0
- data/docs/videos.html +104 -0
- data/lib/yt/channel.rb +127 -0
- data/lib/yt/core/version.rb +8 -0
- data/lib/yt/core.rb +18 -0
- data/lib/yt/no_items_error.rb +8 -0
- data/lib/yt/playlist.rb +75 -0
- data/lib/yt/playlist_item.rb +59 -0
- data/lib/yt/relation.rb +100 -0
- data/lib/yt/resource.rb +85 -0
- data/lib/yt/response.rb +91 -0
- data/lib/yt/video.rb +216 -0
- data/yt-core.gemspec +27 -15
- metadata +155 -19
- data/lib/yt-core/version.rb +0 -3
- data/lib/yt-core.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28bc8c7b5dc7f93aba21e4190057758cd3bc63a9
|
4
|
+
data.tar.gz: 0fb9a20cba7679958c00e73bbb96d8dd9b4ba613
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e38e38ea200bda2994b4cb4b2a57d4d6b8dde5c1e8150c275ca8ad4a8410451d06380f47de81583ba3d7a87e7f5ed076dcf94447069ec8a0d0b6bf1717a9429
|
7
|
+
data.tar.gz: f894f69ac4dca2029574d16d8b5fe3fd708cf18a864218bafe08fa7553338ebfc521584664ae3a88d4c363fcc82bf91b4fe6d78bfad054ff02637f73512ff881
|
data/.gitignore
CHANGED
@@ -1,22 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
pkg
|
13
|
-
|
14
|
-
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
*.bundle
|
19
|
-
*.so
|
20
|
-
*.o
|
21
|
-
*.a
|
22
|
-
mkmf.log
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
_site
|
11
|
+
.sass-cache
|
12
|
+
pkg/
|
13
|
+
.jekyll-metadata
|
14
|
+
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
For more information about changelogs, check
|
6
|
+
[Keep a Changelog](http://keepachangelog.com) and
|
7
|
+
[Vandamme](http://tech-angels.github.io/vandamme).
|
8
|
+
|
9
|
+
## 0.1.0 - 2017-04-03
|
10
|
+
|
11
|
+
* [FEATURE] Extracted first classes from Yt
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
@@ -1,22 +1,21 @@
|
|
1
|
-
|
1
|
+
The MIT License (MIT)
|
2
2
|
|
3
|
-
|
3
|
+
Copyright (c) 2014-present Fullscreen, Inc.
|
4
4
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
the following conditions:
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
12
11
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
15
14
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
OF
|
22
|
-
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,29 +1,93 @@
|
|
1
|
-
|
1
|
+
Yt - a Ruby client for the YouTube API
|
2
|
+
======================================
|
2
3
|
|
3
|
-
|
4
|
+
Yt helps you write apps that need to interact with YouTube.
|
4
5
|
|
5
|
-
|
6
|
+
The **source code** is available on [GitHub](https://github.com/fullscreen/yt-core) and the **documentation** on [RubyDoc](http://www.rubydoc.info/gems/yt-core/frames).
|
6
7
|
|
7
|
-
|
8
|
+
[](https://travis-ci.org/Fullscreen/yt-core)
|
9
|
+
[](https://coveralls.io/r/Fullscreen/yt-core)
|
10
|
+
[](https://gemnasium.com/Fullscreen/yt-core)
|
11
|
+
[](https://codeclimate.com/github/Fullscreen/yt-core)
|
12
|
+
[](http://www.rubydoc.info/gems/yt-core/frames)
|
13
|
+
[](http://rubygems.org/gems/yt-core)
|
8
14
|
|
9
|
-
|
15
|
+
After [registering your app](https://fullscreen.github.io/yt-core/), you can run commands like:
|
10
16
|
|
11
|
-
|
17
|
+
```ruby
|
18
|
+
channel = Yt::Channel.new id: 'UCwCnUcLcb9-eSrHa_RQGkQQ'
|
19
|
+
channel.title #=> "Yt Test"
|
20
|
+
```
|
12
21
|
|
13
|
-
|
22
|
+
The **full documentation** is available at [rubydoc.info](http://www.rubydoc.info/gems/yt-core/frames).
|
14
23
|
|
15
|
-
Or install it yourself as:
|
16
24
|
|
17
|
-
|
25
|
+
A comprehensive guide to Yt
|
26
|
+
===========================
|
18
27
|
|
19
|
-
|
28
|
+
All the classes and methods available are detailed on the [Yt homepage](https://fullscreen.github.io/yt-core/):
|
20
29
|
|
21
|
-
|
30
|
+
[](https://fullscreen.github.io/yt-core/)
|
22
31
|
|
23
|
-
|
32
|
+
Please proceed to [https://fullscreen.github.io/yt-core](https://fullscreen.github.io/yt-core/) for more details and examples.
|
24
33
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
34
|
+
|
35
|
+
How to install
|
36
|
+
==============
|
37
|
+
|
38
|
+
To install on your system, run
|
39
|
+
|
40
|
+
gem install yt-core
|
41
|
+
|
42
|
+
To use inside a bundled Ruby project, add this line to the Gemfile:
|
43
|
+
|
44
|
+
gem 'yt-core', '~> 0.1.0'
|
45
|
+
|
46
|
+
Since the gem follows [Semantic Versioning](http://semver.org),
|
47
|
+
indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
|
48
|
+
guarantees that your project won’t occur in any error when you `bundle update`
|
49
|
+
and a new version of Yt is released.
|
50
|
+
|
51
|
+
How to test
|
52
|
+
===========
|
53
|
+
|
54
|
+
To run live-tests against the YouTube API, type:
|
55
|
+
|
56
|
+
```bash
|
57
|
+
rspec
|
58
|
+
```
|
59
|
+
|
60
|
+
This will fail unless you have set up a test YouTube application with access to
|
61
|
+
the YouTube Data API v3 and an environment variable:
|
62
|
+
|
63
|
+
- `YT_SERVER_API_KEY`: API Key of a Google app with access to the YouTube Data API v3 and the YouTube Analytics API
|
64
|
+
|
65
|
+
|
66
|
+
How to release new versions
|
67
|
+
===========================
|
68
|
+
|
69
|
+
If you are a manager of this project, remember to upgrade the [Yt gem](http://rubygems.org/gems/yt)
|
70
|
+
whenever a new feature is added or a bug gets fixed.
|
71
|
+
|
72
|
+
Make sure all the tests are passing on [Travis CI](https://travis-ci.org/Fullscreen/yt-core),
|
73
|
+
document the changes in HISTORY.md and README.md, bump the version, then run
|
74
|
+
|
75
|
+
rake release
|
76
|
+
|
77
|
+
Remember that the yt gem follows [Semantic Versioning](http://semver.org).
|
78
|
+
Any new release that is fully backward-compatible should bump the *patch* version (0.0.x).
|
79
|
+
Any new version that breaks compatibility should bump the *minor* version (0.x.0)
|
80
|
+
|
81
|
+
How to contribute
|
82
|
+
=================
|
83
|
+
|
84
|
+
Contribute to the code by forking the project, adding the missing code,
|
85
|
+
writing the appropriate tests and submitting a pull request.
|
86
|
+
|
87
|
+
In order for a PR to be approved, all the tests need to pass and all the public
|
88
|
+
methods need to be documented and listed in the guides. Remember:
|
89
|
+
|
90
|
+
- to run all tests locally: `bundle exec rspec`
|
91
|
+
- to generate the docs locally: `bundle exec yard`
|
92
|
+
- to list undocumented methods: `bundle exec yard stats --list-undoc`
|
93
|
+
- to launch the guides locally: `bundle exec jekyll s -s docs`
|
data/Rakefile
CHANGED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "yt"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/docs/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<a href="http://www.rubydoc.info/github/claudiob/{% if include.library %}{{ include.library }}{% else %}yt{% endif %}/master/Yt/{% if include.instance %}{{ include.instance }}-instance{% elsif include.class %}{{ include.class }}-class{% endif %}_method" class="pull-right"><strong>→ Yt docs</strong></a>
|
@@ -0,0 +1 @@
|
|
1
|
+
<code class="language-ruby" data-lang="ruby">{% if include.object %}<span class="n">{{ include.object }}</span>{% if include.method %}<span class="o">.</span><span class="n">{{ include.method }}</span>{% endif %}{% endif %}{{ include.params }}{% if include.result %}{% if include.object %} {% endif %}<span class="c1"># => {{ include.result }}</span>{% endif %}</code>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<head>
|
2
|
+
<meta charset="utf-8">
|
3
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
5
|
+
<meta name="description" content="Yt · The reliable YouTube API Ruby client">
|
6
|
+
<meta name="keywords" content="YouTube, Rails, youtube_it, API, V3, Ruby, client, video, channel, OAuth">
|
7
|
+
<meta name="author" content="Claudio B.">
|
8
|
+
<title>Yt · The reliable YouTube API Ruby client{% if page.title %} · {{ page.title }}{% endif %}</title>
|
9
|
+
<link href="//netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" media="screen" rel="stylesheet" type="text/css" />
|
10
|
+
<link rel="stylesheet" href="{{ site.baseurl }}/css/yt.css">
|
11
|
+
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
12
|
+
<!--[if lt IE 9]>
|
13
|
+
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
14
|
+
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
15
|
+
<![endif]-->
|
16
|
+
<link href="{{ site.baseurl }}/apple-touch-icon-precomposed.png" rel="apple-touch-icon-precomposed">
|
17
|
+
<link href="{{ site.baseurl }}/favicon.ico" rel="icon">
|
18
|
+
|
19
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
|
20
|
+
<script src="//netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" type="text/javascript"></script>
|
21
|
+
</head>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
|
2
|
+
<div class="container">
|
3
|
+
<div class="navbar-header">
|
4
|
+
<button class="navbar-toggle" data-target="#navbar-collapse-1" data-toggle="collapse" type="button">
|
5
|
+
<span class="sr-only">Toggle navigation</span>
|
6
|
+
<span class="icon-bar"></span>
|
7
|
+
<span class="icon-bar"></span>
|
8
|
+
<span class="icon-bar"></span>
|
9
|
+
</button>
|
10
|
+
|
11
|
+
<a class="navbar-brand" href="{{ site.baseurl }}/">
|
12
|
+
<img alt="Yt" src="{{ site.baseurl }}/images/robot.png">
|
13
|
+
Yt<span class="hidden-xs"> · The reliable YouTube API Ruby client</span>
|
14
|
+
</a>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="collapse navbar-collapse" id="navbar-collapse-1">
|
18
|
+
<ul class="nav navbar-nav navbar-right visible-xs-block">
|
19
|
+
{% if page.url == '/' %}
|
20
|
+
<li class="active"><a href="{{ site.baseurl }}/">Installing Yt</a></li>
|
21
|
+
{% else %}
|
22
|
+
<li><a href="{{ site.baseurl }}/">Installing Yt</a></li>
|
23
|
+
{% endif %}
|
24
|
+
{% if page.url == '/channels.html' %}
|
25
|
+
<li class="active"><a href="{{ site.baseurl }}/channels.html">Channels</a></li>
|
26
|
+
{% else %}
|
27
|
+
<li><a href="{{ site.baseurl }}/channels.html">Channels</a></li>
|
28
|
+
{% endif %}
|
29
|
+
{% if page.url == '/videos.html' %}
|
30
|
+
<li class="active"><a href="{{ site.baseurl }}/videos.html">Videos</a></li>
|
31
|
+
{% else %}
|
32
|
+
<li><a href="{{ site.baseurl }}/videos.html">Videos</a></li>
|
33
|
+
{% endif %}
|
34
|
+
{% if page.url == '/playlists.html' %}
|
35
|
+
<li class="active"><a href="{{ site.baseurl }}/playlists.html">Playlists</a></li>
|
36
|
+
{% else %}
|
37
|
+
<li><a href="{{ site.baseurl }}/playlists.html">Playlists</a></li>
|
38
|
+
{% endif %}
|
39
|
+
{% if page.url == '/playlist_items.html' %}
|
40
|
+
<li class="active"><a href="{{ site.baseurl }}/playlist_items.html">Playlist Items</a></li>
|
41
|
+
{% else %}
|
42
|
+
<li><a href="{{ site.baseurl }}/playlist_items.html">Playlist Items</a></li>
|
43
|
+
{% endif %}
|
44
|
+
{% if page.url == '/errors.html' %}
|
45
|
+
<li class="active"><a href="{{ site.baseurl }}/errors.html">Errors</a></li>
|
46
|
+
{% else %}
|
47
|
+
<li><a href="{{ site.baseurl }}/errors.html">Errors</a></li>
|
48
|
+
{% endif %}
|
49
|
+
{% if page.url == '/urls.html' %}
|
50
|
+
<li class="active"><a href="{{ site.baseurl }}/urls.html">URLs</a></li>
|
51
|
+
{% else %}
|
52
|
+
<li><a href="{{ site.baseurl }}/urls.html">URLs</a></li>
|
53
|
+
{% endif %}
|
54
|
+
</ul>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</nav>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
{% include head.html %}
|
4
|
+
<body>
|
5
|
+
{% include header.html %}
|
6
|
+
<main>
|
7
|
+
<div class="container">
|
8
|
+
<div class="row">
|
9
|
+
<div class="hidden-xs hidden-print col-sm-3" role="complementary">
|
10
|
+
<ol start="0" class="sidebar" data-spy="affix">
|
11
|
+
{% if page.url == '/' %}
|
12
|
+
<li><a href="{{ site.baseurl }}/" class="active">Installing Yt</a></li>
|
13
|
+
{% else %}
|
14
|
+
<li><a href="{{ site.baseurl }}/">Installing Yt</a></li>
|
15
|
+
{% endif %}
|
16
|
+
{% if page.url == '/channels.html' %}
|
17
|
+
<li><a href="{{ site.baseurl }}/channels.html" class="active">Channels</a></li>
|
18
|
+
{% else %}
|
19
|
+
<li><a href="{{ site.baseurl }}/channels.html">Channels</a></li>
|
20
|
+
{% endif %}
|
21
|
+
{% if page.url == '/videos.html' %}
|
22
|
+
<li><a href="{{ site.baseurl }}/videos.html" class="active">Videos</a></li>
|
23
|
+
{% else %}
|
24
|
+
<li><a href="{{ site.baseurl }}/videos.html">Videos</a></li>
|
25
|
+
{% endif %}
|
26
|
+
{% if page.url == '/playlists.html' %}
|
27
|
+
<li><a href="{{ site.baseurl }}/playlists.html" class="active">Playlists</a></li>
|
28
|
+
{% else %}
|
29
|
+
<li><a href="{{ site.baseurl }}/playlists.html">Playlists</a></li>
|
30
|
+
{% endif %}
|
31
|
+
{% if page.url == '/playlist_items.html' %}
|
32
|
+
<li><a href="{{ site.baseurl }}/playlist_items.html" class="active">Playlist Items</a></li>
|
33
|
+
{% else %}
|
34
|
+
<li><a href="{{ site.baseurl }}/playlist_items.html">Playlist Items</a></li>
|
35
|
+
{% endif %}
|
36
|
+
{% if page.url == '/errors.html' %}
|
37
|
+
<li><a href="{{ site.baseurl }}/errors.html" class="active">Errors</a></li>
|
38
|
+
{% else %}
|
39
|
+
<li><a href="{{ site.baseurl }}/errors.html">Errors</a></li>
|
40
|
+
{% endif %}
|
41
|
+
{% if page.url == '/urls.html' %}
|
42
|
+
<li><a href="{{ site.baseurl }}/urls.html" class="active">URLs</a></li>
|
43
|
+
{% else %}
|
44
|
+
<li><a href="{{ site.baseurl }}/urls.html">URLs</a></li>
|
45
|
+
{% endif %}
|
46
|
+
</ol>
|
47
|
+
|
48
|
+
</div>
|
49
|
+
<div class="col-xs-12 col-sm-9" role="main">
|
50
|
+
<h2>{{ page.h2 }}</h2>
|
51
|
+
{{ content }}
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</main>
|
56
|
+
{% include footer.html %}
|
57
|
+
</body>
|
58
|
+
</html>
|
Binary file
|
data/docs/channels.html
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
---
|
2
|
+
title: "Yt::Channel"
|
3
|
+
h2: "Channels"
|
4
|
+
---
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<code>Yt::Channel</code> represents a <a href="https://developers.google.com/youtube/v3/docs/channels">YouTube channel</a>.
|
8
|
+
Initialize using its YouTube ID:
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<dl>
|
12
|
+
<dd><a class="anchor" id="new"></a><div class="highlight"><pre>
|
13
|
+
{% include doc.html instance="Channel#initialize" %}{% include example.html object='channel = <span class="no">Yt</span><span class="o">::</span><span class="no">Channel</span>' method='new' params=' <span class="ss">id:</span> <span class="s1">"UCwCnUcLcb9-eSrHa_RQGkQQ"</span>' %}
|
14
|
+
{% include example.html result='#<Yt::Channel @id=UCwCnUcLcb9-eSrHa_RQGkQQ>' %}
|
15
|
+
{% include doc.html instance="Channel#canonical_url" %}{% include example.html object='channel' method='canonical_url' %}
|
16
|
+
{% include example.html result='"https://www.youtube.com/channel/UCwCnUcLcb9-eSrHa_RQGkQQ"' %}</pre>
|
17
|
+
</div></dd>
|
18
|
+
</dl>
|
19
|
+
|
20
|
+
<hr />
|
21
|
+
<h4>Authentication</h4>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
Most methods of <code>Yt::Channel</code> <strong>retrieve public data</strong> from YouTube (e.g.: fetch a channel’s title).<br />
|
25
|
+
To use these methods (marked with <span class="label label-success"> </span> below), you only need to <a href="{{ site.baseurl }}/#api_key">generate an API key</a> and configure:
|
26
|
+
</p>
|
27
|
+
|
28
|
+
{% highlight ruby %}
|
29
|
+
Yt.configuration.api_key = "<your api key>" ## use your API key
|
30
|
+
|
31
|
+
channel = Yt::Channel.new id: 'UCwCnUcLcb9-eSrHa_RQGkQQ' ## use any channel ID
|
32
|
+
channel.title # => "Yt Test"
|
33
|
+
{% endhighlight %}
|
34
|
+
|
35
|
+
<hr />
|
36
|
+
<h4>List of <code>Yt::Channel</code> data methods</h4>
|
37
|
+
<dl>
|
38
|
+
{% include dt.html title="Channel’s snippet" label="success" auth="any authentication works" %}
|
39
|
+
<dd><a class="anchor" id="snippet"></a><div class="highlight"><pre>
|
40
|
+
{% include doc.html instance="Channel#id" %}{% include example.html object='channel' method='id' result='"UCwCnUcLcb9-eSrHa_RQGkQQ"' %}
|
41
|
+
{% include doc.html instance="Channel#title" %}{% include example.html object='channel' method='title' result='"Yt Test"' %}
|
42
|
+
{% include doc.html instance="Channel#description" %}{% include example.html object='channel' method='description' result='"A test channel."' %}
|
43
|
+
{% include doc.html instance="Channel#custom_url" %}{% include example.html object='channel' method='custom_url' result='"yt-test"' %}
|
44
|
+
{% include doc.html instance="Channel#vanity_url" %}{% include example.html object='channel' method='vanity_url' result='"https://www.youtube.com/yt-test"' %}
|
45
|
+
{% include doc.html instance="Channel#published_at" %}{% include example.html object='channel' method='published_at' result='2014-05-02 20:12:57 UTC' %}
|
46
|
+
{% include doc.html instance="Channel#thumbnail_url" %}{% include example.html object='channel' method='thumbnail_url' result='"https://yt3.ggpht.com/-KMnbKDBl60w/photo.jpg"' %}</pre>
|
47
|
+
</div></dd>
|
48
|
+
|
49
|
+
{% include dt.html title="Channel’s status" label="success" auth="any authentication works" %}
|
50
|
+
<dd><a class="anchor" id="status"></a><div class="highlight"><pre>
|
51
|
+
{% include doc.html instance="Channel#privacy_status" %}{% include example.html object='channel' method='privacy_status' result='"public"' %}
|
52
|
+
{% include doc.html instance="Channel#is_linked" %}{% include example.html object='channel' method='is_linked' result='true' %}
|
53
|
+
{% include doc.html instance="Channel#long_uploads_status" %}{% include example.html object='channel' method='long_uploads_status' result='"longUploadsUnspecified"' %}</pre>
|
54
|
+
</div></dd>
|
55
|
+
|
56
|
+
{% include dt.html title="Channel’s statistics" label="success" auth="any authentication works" %}
|
57
|
+
<dd><a class="anchor" id="statistics"></a><div class="highlight"><pre>
|
58
|
+
{% include doc.html instance="Channel#view_count" %}{% include example.html object='channel' method='view_count' result='123' %}
|
59
|
+
{% include doc.html instance="Channel#comment_count" %}{% include example.html object='channel' method='comment_count' result='93' %}
|
60
|
+
{% include doc.html instance="Channel#subscriber_count" %}{% include example.html object='channel' method='subscriber_count' result='42' %}
|
61
|
+
{% include doc.html instance="Channel#hidden_subscriber_count" %}{% include example.html object='channel' method='hidden_subscriber_count' result='false' %}
|
62
|
+
{% include doc.html instance="Channel#video_count" %}{% include example.html object='channel' method='video_count' result='62' %}</pre>
|
63
|
+
</div></dd>
|
64
|
+
|
65
|
+
{% include dt.html title="Channel’s branding settings" label="success" auth="any authentication works" %}
|
66
|
+
<dd><a class="anchor" id="branding_settings"></a><div class="highlight"><pre>
|
67
|
+
{% include doc.html instance="Channel#banner_image_url" %}{% include example.html object='channel' method='banner_image_url' result='"https://yt3.ggpht.com/9dh4rj-k-no"' %}
|
68
|
+
{% include doc.html instance="Channel#keywords" %}{% include example.html object='channel' method='keywords' result='["Some", "tag"]' %}
|
69
|
+
{% include doc.html instance="Channel#unsubscribed_trailer" %}{% include example.html object='channel' method='unsubscribed_trailer' result='"gknzFj_0vvY"' %}</pre>
|
70
|
+
</div></dd>
|
71
|
+
</dl>
|
72
|
+
<p>
|
73
|
+
To limit the number of HTTP requests, use <code>select</code> to specify which <a href="https://developers.google.com/youtube/v3/docs/channels/list#part">parts</a> of the channel’s data to load:
|
74
|
+
</p>
|
75
|
+
<dl>
|
76
|
+
<dd><a class="anchor" id="select"></a><div class="highlight"><pre>
|
77
|
+
{% include example.html object='slow = channel' result='without select: 2 HTTP requests' %}
|
78
|
+
{% include example.html object='slow' method='title' result='one HTTP request to fetch the channel’s snippet' %}
|
79
|
+
{% include example.html object='slow' method='privacy_status' result='another HTTP request to fetch the channel’s status' %}
|
80
|
+
|
81
|
+
{% include doc.html instance="Channel#select" %}{% include example.html object='fast = channel' method='select' params=' <span class="ss">:snippet</span><span class="p">,</span> <span class="ss">:status</span>' result='with select: 1 HTTP request' %}
|
82
|
+
{% include example.html object='fast' method='title' result='one HTTP request to fetch both the channel’s snippet and status' %}
|
83
|
+
{% include example.html object='fast' method='privacy_status' result='no extra HTTP requests' %}</pre>
|
84
|
+
</div></dd>
|
85
|
+
</dl>
|
86
|
+
|
87
|
+
<dl>
|
88
|
+
{% include dt.html title="Channel’s (public) videos" label="success" auth="any authentication works" %}
|
89
|
+
<dd><a class="anchor" id="videos"></a><div class="highlight"><pre>
|
90
|
+
{% include doc.html instance="Channel#videos" %}{% include example.html object='channel' method='videos' %}
|
91
|
+
{% include example.html result='#<Yt::Relation [#<Yt::Video @id=gknz...>, #<Yt::Video @id=32Gc...>, ...]>' %}</pre>
|
92
|
+
</div></dd>
|
93
|
+
</dl>
|
94
|
+
<dl>
|
95
|
+
{% include dt.html title="Channel’s (public) playlists" label="success" auth="any authentication works" %}
|
96
|
+
<dd><a class="anchor" id="playlists"></a><div class="highlight"><pre>
|
97
|
+
{% include doc.html instance="Channel#playlists" %}{% include example.html object='channel' method='playlists' %}
|
98
|
+
{% include example.html result='#<Yt::Relation [#<Yt::Playlist @id=PL-L...>, #<Yt::Playlist @id=PL-N...>, ...]>' %}</pre>
|
99
|
+
</div></dd>
|
100
|
+
</dl>
|
101
|
+
<p>
|
102
|
+
Before iterating through videos or playlists, use <code>select</code> to specify which <a href="https://developers.google.com/youtube/v3/docs/videos/list#part">parts</a> of each video’s data to load:
|
103
|
+
</p>
|
104
|
+
<dl>
|
105
|
+
<dd><a class="anchor" id="select"></a><div class="highlight"><pre>
|
106
|
+
{% include doc.html instance="Relation#select" %}{% include example.html object='videos = channel.videos' method='select' params=' <span class="ss">:snippet</span>, <span class="ss">:statistics</span>' %}
|
107
|
+
{% include example.html object='videos' method='map <span class="ss">&:title</span>' result='["First public video", "Second public video", ...]' %}
|
108
|
+
{% include example.html object='videos' method='map <span class="ss">&:view_count</span>' result='[123, 456, ...]' %}</pre>
|
109
|
+
</div></dd>
|
110
|
+
</dl>
|
111
|
+
<p>
|
112
|
+
You can also use <code>limit</code> to only fetch a certain number of videos or playlists:
|
113
|
+
</p>
|
114
|
+
<dl>
|
115
|
+
<dd><a class="anchor" id="limit"></a><div class="highlight"><pre>
|
116
|
+
{% include doc.html instance="Relation#limit" %}{% include example.html object='videos = channel.videos' method='limit' params=' <span class="mi">2</span>' %}
|
117
|
+
{% include example.html object='videos' method='map <span class="ss">&:id</span>' result='["gknzFj_0vvY", "oO6WawhsxTA"]' %}</pre>
|
118
|
+
</div></dd>
|
119
|
+
</dl>
|
120
|
+
<p>
|
121
|
+
You can also use <code>size</code> to quickly obtain the estimated number of videos or playlists:
|
122
|
+
</p>
|
123
|
+
<dl>
|
124
|
+
<dd><a class="anchor" id="size"></a><div class="highlight"><pre>
|
125
|
+
{% include doc.html instance="Relation#size" %}{% include example.html object='channel.videos' method='size' result='312' %}</pre>
|
126
|
+
</div></dd>
|
127
|
+
</dl>
|
128
|
+
<p>
|
129
|
+
Note that, due to <a href="https://developers.google.com/youtube/v3/docs/search/list#channelId">YouTube API limitations</a>, only a maximum of 500 videos can be fetched for an unauthenticated channel.
|
130
|
+
</p>
|
131
|
+
|
132
|
+
<dl>
|
133
|
+
{% include dt.html title="Collection of channels" label="success" auth="any authentication works" %}
|
134
|
+
<dd><a class="anchor" id="where"></a><div class="highlight"><pre>
|
135
|
+
{% include doc.html class="Channel#where" %}{% include example.html object='<span class="no">Yt</span><span class="o">::</span><span class="no">Channel</span>' method='where' params=' <span class="ss">id:</span> [<span class="s1">"UCwCnUcLcb9-eSrHa_RQGkQQ"</span>, <span class="s1">"UCKe_0fJtkT1dYnzn"</span>, ...]' %}
|
136
|
+
{% include example.html result='#<Yt::Relation [#<Yt::Channel @id=UCwCnUcLcb9-eSrHa_RQGkQQ>, ...]>' %}</pre>
|
137
|
+
</div></dd>
|
138
|
+
</dl>
|
139
|
+
<p>
|
140
|
+
The previous method returns existing channels that match the provided IDs, skipping any unrecognized ID.<br />
|
141
|
+
As usual, use <code>select</code> to specify which <a href="https://developers.google.com/youtube/v3/docs/channels/list#part">parts</a> of each channels’s data to load before iterating through the list.
|
142
|
+
</p>
|