youtube_data_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8a6e3d0fdb7667728341ea8d7385c736a70c3441
4
+ data.tar.gz: fe3f599a362401cfe7dddeb5f22eef8dc97f3170
5
+ SHA512:
6
+ metadata.gz: 66d86d1053fe4205d5f5eee0e38096541f3614b3f185d224d8aa5022b021f51d618ed41e28a1103882b09e21ab21832cdf04575bb214812f4cf70967bb30093f
7
+ data.tar.gz: 41f9b57dd0d55b4188605c41a6a9e53f72a1be314d23c1a02a7b0d658a2b9bc157ca35e5280ceba62203add54fa07a2fdcdf6024624bf838436c34f14b0b0e09
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.0
4
+ before_install: gem install bundler -v 1.10.5
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --markup-provider=redcarpet
2
+ --markup=markdown
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in youtube_data_api.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 MJ Rossetti (@s2t2)
4
+
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:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
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 ADDED
@@ -0,0 +1,103 @@
1
+ # YoutubeDataApi
2
+
3
+ A ruby library interface to the [YouTube Data API](https://developers.google.com/youtube/v3/docs/). Parses channel, playlist, and video data.
4
+
5
+ ## Installation
6
+
7
+ ```` rb
8
+ gem install youtube_data_api
9
+ ````
10
+
11
+ Or install with bundler
12
+ by adding `gem youtube_data_api, '~> 3.0'` to your application's Gemfile
13
+ before performing a `bundle install`.
14
+
15
+ ## Usage
16
+
17
+ Parse Youtube data.
18
+
19
+ ```` rb
20
+
21
+ # CHANNELS
22
+
23
+ channel_url = "https://www.youtube.com/user/CSPAN"
24
+ YoutubeDataApi.channel(channel_url)
25
+ YoutubeDataApi.channel_playlists(channel_url)
26
+
27
+ # PLAYLISTS
28
+
29
+ playlist_url = "https://www.youtube.com/playlist?list=PLf0o4wbW8SXqTSo6iJkolKCKJYBnpo9NZ"
30
+ YoutubeDataApi.playlist(playlist_url)
31
+ YoutubeDataApi.playlist_items(playlist_url)
32
+
33
+ # VIDEOS
34
+
35
+ video_url = "https://www.youtube.com/watch?v=oBM7DIeMsP0"
36
+ YoutubeDataApi.video(video_url)
37
+ ````
38
+
39
+ ### Prerequisites
40
+
41
+ #### YouTube-API-enabled Application
42
+
43
+ Create a new application in the [google developer console](https://console.developers.google.com), and note its name. Navigate to the **APIs & Auth > APIs** menu and enable the *YouTube Data API v3* by searching for it. Refer to the
44
+ [YouTube API Application Registration Guide](https://developers.google.com/youtube/registering_an_application)
45
+ for more support.
46
+
47
+ #### Youtube API Key
48
+
49
+ Navigate to the **APIs & Auth > Credentials** menu and add credentials for an API Key, specifically, a **Server Key**. Note the value of your API Key. Refer to the [YouTube API Key Generation Guide](https://developers.google.com/youtube/registering_an_application#Create_API_Keys)
50
+ for more support.
51
+
52
+ ### Configuration
53
+
54
+ Configure the library
55
+ to make requests on behalf of your YouTube API Key
56
+ by
57
+ assigning it to an environment variable or
58
+ passing it as a request parameter.
59
+
60
+ #### Environment Variable
61
+
62
+ If using the environment variable configuration approach,
63
+ add a variable called `YOUTUBE_DATA_API_KEY` to your **.bash_profile**:
64
+
65
+ ```` sh
66
+ export YOUTUBE_DATA_API_KEY="my-key-123"
67
+ ````
68
+
69
+ #### Request Parameter
70
+
71
+ If using the request parameter configuration approach, pass the `:api_key` parameter to any request:
72
+
73
+ ```` rb
74
+ channel_url = "https://www.youtube.com/user/CSPAN"
75
+ options = {:api_key => "my-key-123"}
76
+ YoutubeDataApi.channel(channel_url, options)
77
+ ````
78
+
79
+ ## Contributing
80
+
81
+ Browse existing [issues](https://github.com/debate-watch/youtube-data-api-ruby/issues) or create a new issue to communicate bugs, desired features, etc.
82
+ After forking the repo and pushing your changes, create a pull request referencing the applicable issue(s).
83
+
84
+ ### Developing
85
+
86
+ After checking out the repo, run `bin/setup` to install dependencies.
87
+
88
+ ### Testing
89
+
90
+ Run `rake rspec` or `bundle exec rspec spec/` to run the tests.
91
+ Optionally run `bin/console` for an interactive prompt that will allow you to experiment.
92
+
93
+ NOTE: tests expect you to specify your YouTube API Key using the [environment variable configuration approach](#environment-variable).
94
+
95
+ ### Releasing
96
+
97
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
98
+
99
+ When bumping the gem version,
100
+ please keep the major version number in sync with
101
+ the YouTube API version (currently **v3**).
102
+
103
+ ## [License](LICENSE.txt)
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "youtube_data_api"
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
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,212 @@
1
+ require 'google/api_client'
2
+
3
+ require "youtube_data_api/version"
4
+
5
+ # todo: refactor!
6
+
7
+ module YoutubeDataApi
8
+
9
+ def self.initialize_service(options)
10
+ client = Google::APIClient.new(
11
+ :key => options[:api_key] || ENV['YOUTUBE_DATA_API_KEY'] || "my-key-123",
12
+ :application_name => options[:app_name] || "my-app",
13
+ :application_version => options[:app_version] || "0.0.1"
14
+ )
15
+ client.authorization = nil
16
+ youtube_api = client.discovered_api('youtube', 'v3')
17
+ return client, youtube_api
18
+ end
19
+
20
+ #
21
+ # CHANNELS
22
+ #
23
+
24
+ CHANNEL_URL_PREFIX = "https://www.youtube.com/channel/"
25
+ USER_URL_PREFIX = "https://www.youtube.com/user/"
26
+ CHANNEL_PARTS = "id, contentDetails, contentOwnerDetails, snippet, statistics"
27
+
28
+ def self.channel_request_params(channel_url, options)
29
+ request_params = {
30
+ :part => options[:request_parts] || CHANNEL_PARTS,
31
+ :pageToken => options[:page_token]
32
+ }
33
+ if channel_url.include?(CHANNEL_URL_PREFIX)
34
+ request_params.merge!({:id => channel_url.gsub(CHANNEL_URL_PREFIX,'')})
35
+ elsif channel_url.include?(USER_URL_PREFIX)
36
+ request_params.merge!({:forUsername => channel_url.gsub(USER_URL_PREFIX,'')})
37
+ else
38
+ raise ChannelUrlError.new("could not recognize the channel_url #{channel_url}. try a url that contains either #{CHANNEL_URL_PREFIX} or #{USER_URL_PREFIX} ...")
39
+ end
40
+ return request_params
41
+ end
42
+
43
+ class ChannelUrlError ; end
44
+
45
+ # Get channel (user).
46
+ #
47
+ # @param [String] channel_url "https://www.youtube.com/user/CSPAN" The url representing a specific youtube channel or user.
48
+ # @param [Hash] options
49
+ # @param [Hash] options [String] api_key
50
+ # @param [Hash] options [String] app_name
51
+ # @param [Hash] options [String] app_version
52
+ # @param [Hash] options [String] request_parts A comma separated string of response parts which you would like to request. Limit api usage by only requesting the parts you need.
53
+ # @param [Hash] options [String] page_token
54
+ #
55
+ # @example YoutubeDataApi.channel("https://www.youtube.com/user/CSPAN")
56
+ #
57
+ def self.channel(channel_url, options = {})
58
+ client, youtube_api = self.initialize_service(options)
59
+ response = client.execute(
60
+ :api_method => youtube_api.channels.list,
61
+ :parameters => self.channel_request_params(channel_url, options)
62
+ )
63
+ result = JSON.parse(response.data.to_json)
64
+ end
65
+
66
+ PLAYLIST_PARTS = "id, contentDetails, player, snippet, status"
67
+
68
+ def self.channel_id(channel_url)
69
+ channel_response = self.channel(channel_url)
70
+ channel_response["items"].first["id"]
71
+ end
72
+
73
+ def self.channel_playlists_request_params(channel_url, options)
74
+ {
75
+ :part => options[:request_parts] || PLAYLIST_PARTS,
76
+ :pageToken => options[:page_token],
77
+ :channelId => self.channel_id(channel_url) #todo: obviate this call if channel_id param is present...
78
+ }
79
+ end
80
+
81
+ # List channel playlists.
82
+ #
83
+ # @param [String] channel_url "https://www.youtube.com/user/CSPAN" The url representing a specific youtube channel or user.
84
+ # @param [Hash] options
85
+ # @param [Hash] options [String] api_key
86
+ # @param [Hash] options [String] app_name
87
+ # @param [Hash] options [String] app_version
88
+ # @param [Hash] options [String] request_parts A comma separated string of response parts which you would like to request. Limit api usage by only requesting the parts you need.
89
+ # @param [Hash] options [String] page_token
90
+ #
91
+ # @example YoutubeDataApi.channel_playlists("https://www.youtube.com/user/CSPAN")
92
+ #
93
+ def self.channel_playlists(channel_url, options = {})
94
+ client, youtube_api = self.initialize_service(options)
95
+ response = client.execute(
96
+ :api_method => youtube_api.playlists.list,
97
+ :parameters => self.channel_playlists_request_params(channel_url, options)
98
+ )
99
+ result = JSON.parse(response.data.to_json)
100
+ end
101
+
102
+ #
103
+ # PLAYLISTS
104
+ #
105
+
106
+ PLAYLIST_URL_PREFIX = "https://www.youtube.com/playlist?list="
107
+
108
+ def self.playlist_id(playlist_url)
109
+ playlist_url.gsub(PLAYLIST_URL_PREFIX,'')
110
+ end
111
+
112
+ def self.playlist_request_params(playlist_url, options)
113
+ {
114
+ :part => options[:part] || PLAYLIST_PARTS,
115
+ :pageToken => options[:page_token],
116
+ :id => self.playlist_id(playlist_url) #todo: obviate this call if playlist_id param is present...,
117
+ }
118
+ end
119
+
120
+ # Get playlist.
121
+ #
122
+ # @param [String] playlist_url "https://www.youtube.com/playlist?list=PLf0o4wbW8SXqTSo6iJkolKCKJYBnpo9NZ" The url representing a specific youtube playlist.
123
+ # @param [Hash] options
124
+ # @param [Hash] options [String] api_key
125
+ # @param [Hash] options [String] app_name
126
+ # @param [Hash] options [String] app_version
127
+ # @param [Hash] options [String] request_parts A comma separated string of response parts which you would like to request. Limit api usage by only requesting the parts you need.
128
+ # @param [Hash] options [String] page_token
129
+ #
130
+ # @example YoutubeDataApi.playlist("https://www.youtube.com/playlist?list=PLf0o4wbW8SXqTSo6iJkolKCKJYBnpo9NZ")
131
+ #
132
+ def self.playlist(playlist_url, options = {})
133
+ client, youtube_api = self.initialize_service(options)
134
+ response = client.execute(
135
+ :api_method => youtube_api.playlists.list,
136
+ :parameters => self.playlist_request_params(playlist_url, options)
137
+ )
138
+ result = JSON.parse(response.data.to_json)
139
+ end
140
+
141
+ PLAYLIST_ITEM_PARTS = "id, contentDetails, snippet, status"
142
+
143
+ def self.playlist_items_request_params(playlist_url, options)
144
+ {
145
+ :part => options[:part] || PLAYLIST_ITEM_PARTS,
146
+ :pageToken => options[:page_token],
147
+ :playlistId => self.playlist_id(playlist_url) #todo: obviate this call if playlist_id param is present...,
148
+ }
149
+ end
150
+
151
+ # List playlist items (videos).
152
+ #
153
+ # @param [String] playlist_url "https://www.youtube.com/playlist?list=PLf0o4wbW8SXqTSo6iJkolKCKJYBnpo9NZ" The url representing a specific youtube playlist.
154
+ # @param [Hash] options
155
+ # @param [Hash] options [String] api_key
156
+ # @param [Hash] options [String] app_name
157
+ # @param [Hash] options [String] app_version
158
+ # @param [Hash] options [String] request_parts A comma separated string of response parts which you would like to request. Limit api usage by only requesting the parts you need.
159
+ # @param [Hash] options [String] page_token
160
+ #
161
+ # @example YoutubeDataApi.playlist_items("https://www.youtube.com/playlist?list=PLf0o4wbW8SXqTSo6iJkolKCKJYBnpo9NZ")
162
+ #
163
+ def self.playlist_items(playlist_url, options = {})
164
+ client, youtube_api = self.initialize_service(options)
165
+ response = client.execute(
166
+ :api_method => youtube_api.playlist_items.list,
167
+ :parameters => self.playlist_items_request_params(playlist_url, options)
168
+ )
169
+ result = JSON.parse(response.data.to_json)
170
+ end
171
+
172
+ #
173
+ # VIDEOS
174
+ #
175
+
176
+ VIDEO_URL_PREFIX = "https://www.youtube.com/watch?v="
177
+ VIDEO_PARTS = "id, contentDetails, liveStreamingDetails, player, recordingDetails, snippet, statistics, status, topicDetails"
178
+ #VIDEO_PRIVATE_PARTS = "fileDetails, processingDetails, suggestions" # :-) can't request these unless authenticated
179
+
180
+ def self.video_id(video_url)
181
+ video_url.gsub(VIDEO_URL_PREFIX,'')
182
+ end
183
+
184
+ def self.video_request_params(video_url, options)
185
+ {
186
+ :part => options[:part] || VIDEO_PARTS,
187
+ :pageToken => options[:page_token],
188
+ :id => self.video_id(video_url) #todo: obviate this call if video_id param is present...,
189
+ }
190
+ end
191
+
192
+ # Get video.
193
+ #
194
+ # @param [String] video_url "https://www.youtube.com/watch?v=oBM7DIeMsP0" The url representing a specific youtube video.
195
+ # @param [Hash] options
196
+ # @param [Hash] options [String] api_key
197
+ # @param [Hash] options [String] app_name
198
+ # @param [Hash] options [String] app_version
199
+ # @param [Hash] options [String] request_parts A comma separated string of response parts which you would like to request. Limit api usage by only requesting the parts you need.
200
+ # @param [Hash] options [String] page_token
201
+ #
202
+ # @example YoutubeDataApi.video("https://www.youtube.com/watch?v=oBM7DIeMsP0")
203
+ #
204
+ def self.video(video_url, options = {})
205
+ client, youtube_api = self.initialize_service(options)
206
+ response = client.execute(
207
+ :api_method => youtube_api.videos.list,
208
+ :parameters => self.video_request_params(video_url, options)
209
+ )
210
+ result = JSON.parse(response.data.to_json)
211
+ end
212
+ end
@@ -0,0 +1,3 @@
1
+ module YoutubeDataApi
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'youtube_data_api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "youtube_data_api"
8
+ spec.version = YoutubeDataApi::VERSION
9
+ spec.authors = ["MJ Rossetti (@s2t2)"]
10
+ spec.email = ["s2t2mail+git@gmail.com"]
11
+
12
+ spec.summary = %q{A ruby library interface to the YouTube Data API.}
13
+ spec.description = %q{A ruby library interface to the YouTube Data API. Parses channel, playlist, and video data.}
14
+ spec.homepage = "https://github.com/debate-watch/youtube-data-api-ruby"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "pry", "~> 0.10"
26
+ spec.add_development_dependency "yard"
27
+ spec.add_development_dependency "redcarpet"
28
+ spec.add_development_dependency "github-markup"
29
+ spec.add_dependency "google-api-client"
30
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: youtube_data_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - MJ Rossetti (@s2t2)
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-10-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: redcarpet
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: github-markup
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: google-api-client
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: A ruby library interface to the YouTube Data API. Parses channel, playlist,
126
+ and video data.
127
+ email:
128
+ - s2t2mail+git@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
136
+ - ".yardopts"
137
+ - Gemfile
138
+ - LICENSE.txt
139
+ - README.md
140
+ - Rakefile
141
+ - bin/console
142
+ - bin/setup
143
+ - lib/youtube_data_api.rb
144
+ - lib/youtube_data_api/version.rb
145
+ - youtube_data_api.gemspec
146
+ homepage: https://github.com/debate-watch/youtube-data-api-ruby
147
+ licenses:
148
+ - MIT
149
+ metadata: {}
150
+ post_install_message:
151
+ rdoc_options: []
152
+ require_paths:
153
+ - lib
154
+ required_ruby_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ requirements: []
165
+ rubyforge_project:
166
+ rubygems_version: 2.4.5
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: A ruby library interface to the YouTube Data API.
170
+ test_files: []
171
+ has_rdoc: