youtube-dl.rb 0.0.1 → 0.0.2
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/.travis.yml +7 -0
- data/README.md +4 -3
- data/Rakefile +2 -0
- data/lib/youtube-dl.rb +13 -3
- data/lib/youtube-dl/options.rb +20 -0
- data/lib/youtube-dl/runner.rb +24 -1
- data/lib/youtube-dl/version.rb +1 -1
- data/test/test_helper.rb +1 -0
- data/test/youtube-dl/runner_test.rb +11 -1
- data/test/youtube-dl/youtube-dl_test.rb +5 -0
- data/youtube-dl.rb.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2f3b80e2f598cbea19cdb6aa760535bd1735ef1
|
4
|
+
data.tar.gz: 372eadeb8f68fe3d9bf659ea1d1528b26b028b72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bfdb2529020c00c0baa402acabd604e970c82cccd126aefb651ea26b39e89a15ea7d08ade283c1763785f46378fa6cced2ed3a548ea94b60bbc93ccbe8940c1
|
7
|
+
data.tar.gz: 4d151900a4a7a2dd3556e01c9f4236820b27b7532a71a1200678dc9e3dfe4603da960c4d4e5b07cdba6c88fce94d99383b76c789f6fa61be8f9d5e5caf1e1acc
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# youtube-dl.rb
|
2
2
|
|
3
|
-
Ruby wrapper for youtube-dl
|
3
|
+
Ruby wrapper for [youtube-dl](http://rg3.github.io/youtube-dl/).
|
4
|
+
[](https://travis-ci.org/layer8x/youtube-dl.rb)
|
4
5
|
|
5
6
|
## Installing youtube-dl
|
6
|
-
This gem does not ship with youtube-dl
|
7
|
+
This gem does not ship with the `youtube-dl` command-line program (yet!) so you will need to install `youtube-dl` manually. Luckily there are three ways to do it.
|
7
8
|
|
8
9
|
### The easy way
|
9
10
|
Use your distro's package manager!
|
@@ -51,7 +52,7 @@ All options available to youtube-dl can be passed to the options hash
|
|
51
52
|
options = {
|
52
53
|
username: 'someone',
|
53
54
|
password: 'password1',
|
54
|
-
rate_limit: '50K'
|
55
|
+
rate_limit: '50K',
|
55
56
|
format: :worst
|
56
57
|
}
|
57
58
|
|
data/Rakefile
CHANGED
data/lib/youtube-dl.rb
CHANGED
@@ -4,9 +4,19 @@ require 'youtube-dl/runner'
|
|
4
4
|
|
5
5
|
module YoutubeDL
|
6
6
|
extend self
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
|
8
|
+
# Downloads given array of URLs with any options passed
|
9
|
+
#
|
10
|
+
# @param urls [String, Array] URLs to download
|
11
|
+
# @param options [Hash] Downloader options
|
12
|
+
def download(urls, options={})
|
13
|
+
# force convert urls to array
|
14
|
+
urls = [urls] unless urls.is_a? Array
|
15
|
+
|
16
|
+
urls.each do |url|
|
17
|
+
runner = YoutubeDL::Runner.new(url, YoutubeDL::Options.new(options))
|
18
|
+
runner.run
|
19
|
+
end
|
10
20
|
end
|
11
21
|
|
12
22
|
alias_method :get, :download
|
data/lib/youtube-dl/options.rb
CHANGED
@@ -2,10 +2,21 @@ module YoutubeDL
|
|
2
2
|
class Options
|
3
3
|
attr_accessor :store
|
4
4
|
|
5
|
+
# Options initializer
|
6
|
+
#
|
7
|
+
# @param options [Hash] a hash of options
|
5
8
|
def initialize(options={})
|
6
9
|
@store = options
|
7
10
|
end
|
8
11
|
|
12
|
+
# Returns options as a hash
|
13
|
+
#
|
14
|
+
# @return [Hash] hash of options
|
15
|
+
def to_hash
|
16
|
+
@store
|
17
|
+
end
|
18
|
+
alias_method :to_h, :to_hash
|
19
|
+
|
9
20
|
def each_paramized
|
10
21
|
@store.each do |key, value|
|
11
22
|
yield(paramize(key), value)
|
@@ -18,18 +29,22 @@ module YoutubeDL
|
|
18
29
|
end
|
19
30
|
end
|
20
31
|
|
32
|
+
# Set options using a block
|
21
33
|
def configure(&block)
|
22
34
|
block.call(self)
|
23
35
|
end
|
24
36
|
|
37
|
+
# Get option with brackets syntax
|
25
38
|
def [](key)
|
26
39
|
@store[key.to_sym]
|
27
40
|
end
|
28
41
|
|
42
|
+
# Set option with brackets syntax
|
29
43
|
def []=(key, value)
|
30
44
|
@store[key.to_sym] = value
|
31
45
|
end
|
32
46
|
|
47
|
+
# Option getting and setting using ghost methods
|
33
48
|
def method_missing(method, *args, &block)
|
34
49
|
if method.to_s.include? '='
|
35
50
|
method = method.to_s.tr('=', '').to_sym
|
@@ -39,6 +54,7 @@ module YoutubeDL
|
|
39
54
|
end
|
40
55
|
end
|
41
56
|
|
57
|
+
# Symbolizes keys in the option store
|
42
58
|
def symbolize_keys!
|
43
59
|
@store.keys.each do |key_name|
|
44
60
|
unless key_name.is_a? Symbol
|
@@ -49,6 +65,10 @@ module YoutubeDL
|
|
49
65
|
end
|
50
66
|
|
51
67
|
private
|
68
|
+
# Helper function to convert option keys into command-line-friendly parameters
|
69
|
+
#
|
70
|
+
# @param key [Symbol, String] key to paramize
|
71
|
+
# @return [String] paramized key
|
52
72
|
def paramize(key)
|
53
73
|
key.to_s.tr("_", '-')
|
54
74
|
end
|
data/lib/youtube-dl/runner.rb
CHANGED
@@ -6,29 +6,48 @@ module YoutubeDL
|
|
6
6
|
attr_accessor :options
|
7
7
|
attr_accessor :executable_path
|
8
8
|
|
9
|
+
# Command Line runner initializer
|
10
|
+
#
|
11
|
+
# @param url [String] URL to pass to youtube-dl executable
|
12
|
+
# @param options [Hash, Options] options to pass to the executable. Automatically converted to Options if it isn't already
|
9
13
|
def initialize(url, options=YoutubeDL::Options.new)
|
10
14
|
@url = url
|
11
|
-
@options = options
|
15
|
+
@options = YoutubeDL::Options.new(options.to_hash)
|
12
16
|
@executable_path = 'youtube-dl'
|
13
17
|
end
|
14
18
|
|
19
|
+
# Returns Cocaine's runner engine
|
20
|
+
#
|
21
|
+
# @return [CommandLineRunner] backend runner class
|
15
22
|
def backend_runner
|
16
23
|
Cocaine::CommandLine.runner
|
17
24
|
end
|
18
25
|
|
26
|
+
# Sets Cocaine's runner engine
|
27
|
+
#
|
28
|
+
# @param [CommandLineRunner] backend runner class
|
19
29
|
def backend_runner=(cocaine_runner)
|
20
30
|
Cocaine::CommandLine.runner = cocaine_runner
|
21
31
|
end
|
22
32
|
|
33
|
+
# Returns the command string without running anything
|
34
|
+
#
|
35
|
+
# @return [String] command line string
|
23
36
|
def to_command
|
24
37
|
cocaine_line(options_to_commands).command(@options.store)
|
25
38
|
end
|
39
|
+
alias_method :command, :to_command
|
26
40
|
|
41
|
+
# Runs the command
|
27
42
|
def run
|
28
43
|
cocaine_line(options_to_commands).run(@options.store)
|
29
44
|
end
|
30
45
|
|
31
46
|
private
|
47
|
+
|
48
|
+
# Parses options and converts them to Cocaine's syntax
|
49
|
+
#
|
50
|
+
# @return [String] commands ready to do cocaine
|
32
51
|
def options_to_commands
|
33
52
|
commands = []
|
34
53
|
options.each_paramized_key do |key, paramized_key|
|
@@ -42,6 +61,10 @@ module YoutubeDL
|
|
42
61
|
commands.join(' ')
|
43
62
|
end
|
44
63
|
|
64
|
+
# Helper for doing lines of cocaine (initializing, auto executable stuff, etc)
|
65
|
+
#
|
66
|
+
# @param command [String] command switches to run
|
67
|
+
# @return [Cocaine::CommandLine] initialized Cocaine instance
|
45
68
|
def cocaine_line(command)
|
46
69
|
Cocaine::CommandLine.new(@executable_path, command)
|
47
70
|
end
|
data/lib/youtube-dl/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -24,7 +24,7 @@ describe YoutubeDL::Runner do
|
|
24
24
|
it 'should parse key-values from options' do
|
25
25
|
@runner.options.some_key = "a value"
|
26
26
|
|
27
|
-
|
27
|
+
refute_nil @runner.to_command.match(/--some-key\s.*a value.*/)
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should not include the value if value is true' do
|
@@ -38,4 +38,14 @@ describe YoutubeDL::Runner do
|
|
38
38
|
@runner.run
|
39
39
|
assert File.exists? 'nope.avi'
|
40
40
|
end
|
41
|
+
|
42
|
+
it 'should take options as a hash yet still have configuration blocks work' do
|
43
|
+
r = YoutubeDL::Runner.new(NOPE, {some_key: 'some value'})
|
44
|
+
r.options.configure do |c|
|
45
|
+
c.another_key = 'another_value'
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_includes r.to_command, "--some-key"
|
49
|
+
assert_includes r.to_command, "--another-key"
|
50
|
+
end
|
41
51
|
end
|
@@ -9,4 +9,9 @@ describe YoutubeDL do
|
|
9
9
|
YoutubeDL.get NOPE, output: 'nope.avi'
|
10
10
|
assert File.exist? 'nope.avi'
|
11
11
|
end
|
12
|
+
|
13
|
+
it 'should download multiple videos' do
|
14
|
+
YoutubeDL.download [NOPE, "https://www.youtube.com/watch?v=Mt0PUjh-nDM"]
|
15
|
+
assert_equal Dir.glob('nope*').length, 2
|
16
|
+
end
|
12
17
|
end
|
data/youtube-dl.rb.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["saps.laj@gmail.com"]
|
11
11
|
spec.summary = %q{youtube-dl wrapper for Ruby}
|
12
12
|
spec.description = %q{in the spirit of pygments.rb and MiniMagick, youtube-dl.rb is a command line wrapper for the python script youtube-dl}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/layer8x/youtube-dl.rb"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: youtube-dl.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sapslaj
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-02-
|
12
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cocaine
|
@@ -104,6 +104,7 @@ extensions: []
|
|
104
104
|
extra_rdoc_files: []
|
105
105
|
files:
|
106
106
|
- ".gitignore"
|
107
|
+
- ".travis.yml"
|
107
108
|
- Gemfile
|
108
109
|
- LICENSE.txt
|
109
110
|
- README.md
|
@@ -117,7 +118,7 @@ files:
|
|
117
118
|
- test/youtube-dl/runner_test.rb
|
118
119
|
- test/youtube-dl/youtube-dl_test.rb
|
119
120
|
- youtube-dl.rb.gemspec
|
120
|
-
homepage:
|
121
|
+
homepage: https://github.com/layer8x/youtube-dl.rb
|
121
122
|
licenses:
|
122
123
|
- MIT
|
123
124
|
metadata: {}
|