viddl-rb 0.4.9 → 0.5.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.
- data/README.md +33 -0
- data/bin/viddl-rb +54 -4
- data/helper/download-helper.rb +3 -4
- metadata +30 -52
- data/README.txt +0 -17
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
__viddl-rb:__
|
2
|
+
Created by Marc Seeger (@rb2k)
|
3
|
+
Repo: http://github.com/rb2k/viddl-rb
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
__Installation:__
|
8
|
+
gem install viddl-rb
|
9
|
+
|
10
|
+
__Usage:__
|
11
|
+
|
12
|
+
Download a video:
|
13
|
+
viddl-rb http://www.youtube.com/watch?v=QH2-TGUlwu4
|
14
|
+
|
15
|
+
Download a video and extract the audio:
|
16
|
+
viddl-rb http://www.youtube.com/watch?v=QH2-TGUlwu4 --extract-audio
|
17
|
+
|
18
|
+
In both cases we'll name the output file according to the video title.
|
19
|
+
|
20
|
+
|
21
|
+
__Requirements:__
|
22
|
+
|
23
|
+
* curl/wget or the [progress bar](http://github.com/nex3/ruby-progressbar/) gem
|
24
|
+
* [Nokogiri](http://nokogiri.org/)
|
25
|
+
* ffmpeg if you want to extract audio tracks from the videos
|
26
|
+
|
27
|
+
|
28
|
+
__Contributors:__
|
29
|
+
|
30
|
+
* [kl](https://github.com/kl): Windows support (who knew!) and bug fixes
|
31
|
+
* [divout](https://github.com/divout) aka Ivan K: blip.tv plugin, bugfixes
|
32
|
+
* Sniper: bugfixes
|
33
|
+
* [Serabe](https://github.com/Serabe) aka Sergio Arbeo: packaging viddl as a binary
|
data/bin/viddl-rb
CHANGED
@@ -5,11 +5,12 @@ require "rubygems"
|
|
5
5
|
require "nokogiri"
|
6
6
|
require "cgi"
|
7
7
|
require "open-uri"
|
8
|
+
require "open3"
|
8
9
|
require "download-helper.rb"
|
9
10
|
require "plugin-helper.rb"
|
10
11
|
|
11
|
-
if ARGV.
|
12
|
-
puts "Usage: viddl-rb [
|
12
|
+
if ARGV[0].nil?
|
13
|
+
puts "Usage: viddl-rb URL [--extract-audio]"
|
13
14
|
exit
|
14
15
|
end
|
15
16
|
|
@@ -20,26 +21,75 @@ end
|
|
20
21
|
|
21
22
|
puts "Plugins loaded: #{PluginBase.registered_plugins.inspect}"
|
22
23
|
|
24
|
+
url = ARGV[0]
|
25
|
+
extract_audio = ARGV.include?('--extract-audio')
|
26
|
+
puts "Will try to extract audio: #{extract_audio}."
|
27
|
+
|
28
|
+
unless url.match(/^http/)
|
29
|
+
puts "Please include 'http' with your URL e.g. http://www.youtube.com/watch?v=QH2-TGUlwu4"
|
30
|
+
exit(1)
|
31
|
+
end
|
23
32
|
|
24
|
-
url = ARGV.first
|
25
33
|
puts "Analyzing URL: #{url}"
|
34
|
+
#Check all plugins for a match
|
26
35
|
PluginBase.registered_plugins.each do |plugin|
|
27
36
|
if plugin.matches_provider?(url)
|
28
37
|
puts "#{plugin}: true"
|
29
38
|
begin
|
39
|
+
#we'll end up with an array of hashes with they keys :url and :name
|
30
40
|
download_queue = plugin.get_urls_and_filenames(url)
|
31
41
|
rescue StandardError => e
|
32
42
|
puts "Error while running the #{plugin.name.inspect} plugin. Maybe it has to be updated? Error: #{e.message}."
|
33
|
-
exit
|
43
|
+
exit(1)
|
34
44
|
end
|
35
45
|
download_queue.each do |url_name|
|
36
46
|
result = DownloadHelper.save_file(url_name[:url], url_name[:name])
|
37
47
|
if result
|
38
48
|
puts "Download for #{url_name[:name]} successful."
|
49
|
+
if extract_audio
|
50
|
+
puts "Extracting audio for #{url_name[:name]}"
|
51
|
+
if DownloadHelper.os_has?('ffmpeg')
|
52
|
+
no_ext_filename = url_name[:name].split('.')[0..-1][0]
|
53
|
+
#capture stderr because ffmpeg expects an output param and will error out
|
54
|
+
file_info = Open3.popen3("ffmpeg -i #{url_name[:name]}") {|stdin, stdout, stderr, wait_thr| stderr.read }
|
55
|
+
|
56
|
+
if !file_info.to_s.empty?
|
57
|
+
audio_format_matches = file_info.match(/Audio: (\w*)/)
|
58
|
+
if audio_format_matches
|
59
|
+
audio_format = audio_format_matches[1]
|
60
|
+
else
|
61
|
+
puts "Couldn't find any audio:\n#{file_info.inspect}"
|
62
|
+
next
|
63
|
+
end
|
64
|
+
|
65
|
+
extension_mapper = {
|
66
|
+
'aac' => 'm4a',
|
67
|
+
'mp3' => 'mp3',
|
68
|
+
'vorbis' => 'ogg'
|
69
|
+
}
|
70
|
+
|
71
|
+
if extension_mapper.key?(audio_format)
|
72
|
+
output_extension = extension_mapper[audio_format]
|
73
|
+
else
|
74
|
+
#lame fallback
|
75
|
+
puts "Unknown audio format: #{audio_format}, using name as extension: '.#{audio_format}'."
|
76
|
+
output_extension = audio_format
|
77
|
+
end
|
78
|
+
output_filename = "#{no_ext_filename}.#{output_extension}"
|
79
|
+
Open3.popen3("ffmpeg -i #{url_name[:name]} -vn -acodec copy #{output_filename}") {|stdin, stdout, stderr, wait_thr| stdout.read }
|
80
|
+
puts "Done extracting audio to #{output_filename}"
|
81
|
+
else
|
82
|
+
puts "Error while checking audio track of #{url_name[:name]}"
|
83
|
+
end
|
84
|
+
else
|
85
|
+
puts "Didn't detect ffmpeg on your system, can't extract audio."
|
86
|
+
end
|
87
|
+
end
|
39
88
|
else
|
40
89
|
puts "Download for #{url_name[:name]} failed."
|
41
90
|
end
|
42
91
|
end
|
92
|
+
#plugin matched and downloaded, we're done
|
43
93
|
exit
|
44
94
|
else
|
45
95
|
puts "#{plugin}: false"
|
data/helper/download-helper.rb
CHANGED
@@ -24,11 +24,10 @@ class DownloadHelper
|
|
24
24
|
def self.save_file(file_uri, file_name)
|
25
25
|
unescaped_uri = CGI::unescape(file_uri)
|
26
26
|
result = false
|
27
|
-
|
28
|
-
if os_has?("wget", windows)
|
27
|
+
if os_has?("wget")
|
29
28
|
puts "using wget"
|
30
29
|
result = system("wget \"#{unescaped_uri}\" -O #{file_name}")
|
31
|
-
elsif os_has?("curl"
|
30
|
+
elsif os_has?("curl")
|
32
31
|
puts "using curl"
|
33
32
|
#-L means: follow redirects, We set an agent because Vimeo seems to want one
|
34
33
|
result = system("curl -A 'Mozilla/2.02 (OS/2; U)' -L \"#{unescaped_uri}\" -o #{file_name}")
|
@@ -42,7 +41,7 @@ class DownloadHelper
|
|
42
41
|
end
|
43
42
|
|
44
43
|
#checks to see whether the os has a certain utility like wget or curl
|
45
|
-
def self.os_has?(utility, windows)
|
44
|
+
def self.os_has?(utility, windows = (ENV['OS'] =~ /windows/i))
|
46
45
|
unless windows # if os is something else than Windows
|
47
46
|
return `which #{utility}`.include?(utility)
|
48
47
|
else
|
metadata
CHANGED
@@ -1,45 +1,35 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: viddl-rb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 9
|
10
|
-
version: 0.4.9
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Marc Seeger
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: nokogiri
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70340043318900 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
|
34
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70340043318900
|
25
|
+
description: An extendable commandline video downloader for flash video sites. Includes
|
26
|
+
plugins for vimeo, youtube and megavideo
|
35
27
|
email: mail@marc-seeger.de
|
36
|
-
executables:
|
28
|
+
executables:
|
37
29
|
- viddl-rb
|
38
30
|
extensions: []
|
39
|
-
|
40
31
|
extra_rdoc_files: []
|
41
|
-
|
42
|
-
files:
|
32
|
+
files:
|
43
33
|
- bin/viddl-rb
|
44
34
|
- helper/download-helper.rb
|
45
35
|
- helper/plugin-helper.rb
|
@@ -48,41 +38,29 @@ files:
|
|
48
38
|
- plugins/vimeo.rb
|
49
39
|
- plugins/youtube.rb
|
50
40
|
- CHANGELOG.txt
|
51
|
-
- README.
|
41
|
+
- README.md
|
52
42
|
homepage: https://github.com/rb2k/viddl-rb
|
53
43
|
licenses: []
|
54
|
-
|
55
44
|
post_install_message:
|
56
45
|
rdoc_options: []
|
57
|
-
|
58
|
-
require_paths:
|
46
|
+
require_paths:
|
59
47
|
- lib
|
60
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
49
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
|
66
|
-
|
67
|
-
- 0
|
68
|
-
version: "0"
|
69
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
55
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
hash: 19
|
75
|
-
segments:
|
76
|
-
- 1
|
77
|
-
- 3
|
78
|
-
- 4
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
79
59
|
version: 1.3.4
|
80
60
|
requirements: []
|
81
|
-
|
82
61
|
rubyforge_project: viddl-rb
|
83
|
-
rubygems_version: 1.8.
|
62
|
+
rubygems_version: 1.8.10
|
84
63
|
signing_key:
|
85
64
|
specification_version: 3
|
86
65
|
summary: An extendable commandline video downloader for flash video sites.
|
87
66
|
test_files: []
|
88
|
-
|
data/README.txt
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
= viddl-rb
|
2
|
-
|
3
|
-
* http://github.com/rb2k/viddl-rb
|
4
|
-
|
5
|
-
== Installation:
|
6
|
-
gem install viddl-rb
|
7
|
-
|
8
|
-
|
9
|
-
== Gems needed so far:
|
10
|
-
|
11
|
-
Progressbar
|
12
|
-
gem install progressbar
|
13
|
-
homepage: http://github.com/nex3/ruby-progressbar/
|
14
|
-
|
15
|
-
Nokogiri
|
16
|
-
gem install nokogiri
|
17
|
-
homepage: http://nokogiri.org/
|