viddl-rb 0.66 → 0.67

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.
@@ -4,16 +4,17 @@ class DownloadHelper
4
4
  def self.fetch_file(uri)
5
5
 
6
6
  begin
7
- require "progressbar" #http://github.com/nex3/ruby-progressbar
7
+ require "progressbar" #http://github.com/nex3/ruby-progressbar
8
8
  rescue LoadError
9
- puts "ERROR: You don't seem to have curl or wget on your system. In this case you'll need to install the 'progressbar' gem."
10
- exit
9
+ puts "ERROR: You don't seem to have curl or wget on your system. In this case you'll need to install the 'progressbar' gem."
10
+ exit
11
11
  end
12
12
  progress_bar = nil
13
13
  open(uri, :proxy => nil,
14
14
  :content_length_proc => lambda { |length|
15
15
  if length && 0 < length
16
16
  progress_bar = ProgressBar.new(uri.to_s, length)
17
+ progress_bar.file_transfer_mode #to show download speed and file size
17
18
  end
18
19
  },
19
20
  :progress_proc => lambda { |progress|
@@ -33,10 +34,10 @@ class DownloadHelper
33
34
  elsif os_has?("curl")
34
35
  puts "using curl"
35
36
  #-L means: follow redirects, We set an agent because Vimeo seems to want one
36
- `curl -A 'Wget/1.8.1' -L \"#{unescaped_uri}\" -o #{file_name}`
37
+ `curl -A 'Wget/1.8.1' -L \"#{unescaped_uri}\" -o #{file_name}`
37
38
  else
38
- puts "using net/http"
39
- open(file_name, 'wb') { |file|
39
+ puts "using net/http"
40
+ open(file_name, 'wb') { |file|
40
41
  file.write(fetch_file(unescaped_uri)); puts
41
42
  }
42
43
  end
@@ -52,26 +53,29 @@ class DownloadHelper
52
53
  end
53
54
 
54
55
  #checks to see whether the os has a certain utility like wget or curl
56
+ #`` returns the standard output of the process
57
+ #system returns the exit code of the process
55
58
  def self.os_has?(utility)
56
59
  windows = ENV['OS'] =~ /windows/i
57
- return `which #{utility}`.include?(utility) unless windows # if not Windows
58
60
 
59
- #use where (simliar to which) if present to reduce console clutter
60
- begin
61
- has_where? ? `where #{utility}` : `#{utility}`
62
- return true
63
- rescue Errno::ENOENT
64
- return false
61
+ unless windows # if os is not Windows
62
+ `which #{utility}`.include?(utility)
63
+ else
64
+ if has_where?
65
+ system("where /q #{utility}") #/q is the quiet mode flag
66
+ else
67
+ begin #as a fallback we just run the utility itself
68
+ system(utility)
69
+ rescue Errno::ENOENT
70
+ false
71
+ end
72
+ end
65
73
  end
66
74
  end
67
75
 
68
76
  #checks if Windows has the where utility (Server 2003 and later)
77
+ #system only return nil if the command is not found
69
78
  def self.has_where?
70
- begin
71
- `where`
72
- true
73
- rescue Errno::ENOENT
74
- false
75
- end
79
+ !system("where /q where").nil?
76
80
  end
77
- end
81
+ end
@@ -1,10 +1,16 @@
1
1
  class PluginBase
2
- #some static stuff
2
+ #some static stuff
3
3
  class << self; attr_reader :registered_plugins end
4
4
  @registered_plugins = []
5
5
 
6
- #if you inherit from this class, the child gets added to the "registered plugins" array
6
+ #if you inherit from this class, the child gets added to the "registered plugins" array
7
7
  def self.inherited(child)
8
8
  PluginBase.registered_plugins << child
9
9
  end
10
+
11
+ #takes a string a returns a new string that is file name safe
12
+ #deletes \"' and replaces anything else that is not a digit or letter with _
13
+ def self.make_filename_safe(string)
14
+ string.delete("\"'").gsub(/[^\d\w]/, '_')
15
+ end
10
16
  end
@@ -1,3 +1,4 @@
1
+
1
2
  class Blip < PluginBase
2
3
  # this will be called by the main app to check whether this plugin is responsible for the url passed
3
4
  def self.matches_provider?(url)
@@ -10,7 +11,7 @@ class Blip < PluginBase
10
11
  xml_url = "http://blip.tv/rss/#{id}"
11
12
  doc = Nokogiri::XML(open(xml_url))
12
13
  user = doc.at("//channel/item/blip:user").inner_text
13
- title = doc.at("//channel/item/title").inner_text.gsub(" ", "_")
14
+ title = PluginBase.make_filename_safe(doc.at("//channel/item/title").inner_text)
14
15
  download_url = doc.at("//channel/item/media:group/media:content").attributes["url"].value
15
16
  extention = download_url.split(".").last
16
17
  file_name = "#{id}-#{user}-#{title}.#{extention}"
@@ -56,6 +56,7 @@ class Metacafe < PluginBase
56
56
  end
57
57
 
58
58
  def self.get_video_name(url)
59
- url[/fplayer\/\d+\/([\d\w]+)\.swf/, 1]
59
+ name = url[/fplayer\/\d+\/([\d\w]+)\.swf/, 1]
60
+ PluginBase.make_filename_safe(name)
60
61
  end
61
62
  end
@@ -30,9 +30,8 @@ class Veoh < PluginBase
30
30
  #the file name string is a combination of the video name and the extension
31
31
  def self.get_file_name(info_doc, download_url)
32
32
  name = info_doc.xpath('//rsp/videoList/video').first.attributes['title'].content
33
- name.gsub!(" ", "_") # replace spaces with underscores
34
33
  extension = download_url[/\/[\w\d]+(\.[\w\d]+)\?ct/, 1]
35
- name + extension
34
+ PluginBase.make_filename_safe(name) + extension
36
35
  end
37
36
 
38
37
  def self.get_attribute(format)
@@ -43,4 +42,4 @@ class Veoh < PluginBase
43
42
  "previewUrl"
44
43
  end
45
44
  end
46
- end
45
+ end
@@ -1,4 +1,5 @@
1
1
 
2
+
2
3
  class Vimeo < PluginBase
3
4
  #this will be called by the main app to check whether this plugin is responsible for the url passed
4
5
  def self.matches_provider?(url)
@@ -22,18 +23,12 @@ class Vimeo < PluginBase
22
23
  timestamp = page_html[/"timestamp":(\d+),/, 1]
23
24
  signature = page_html[/"signature":"([\d\w]+)",/, 1]
24
25
 
25
- # The quality and codecs are listed in order of preference in the url. If HD is not availabe SD will be download for example.
26
26
  redirect_url = "http://player.vimeo.com/play_redirect?clip_id=#{vimeo_id}&sig=#{signature}&time=#{timestamp}&quality=hd,sd&codecs=H264,VP8,VP6"
27
27
 
28
28
  #the download url is the value of the location (redirect) header
29
29
  download_url = agent.get(redirect_url).header["location"]
30
+ file_name = PluginBase.make_filename_safe(title) + ".mp4"
30
31
 
31
- file_name = make_filename(title)
32
-
33
32
  [{:url => download_url, :name => file_name}]
34
33
  end
35
-
36
- def self.make_filename(title)
37
- title.delete("\"'").gsub(/[^\d\w]/, '_') + ".mp4"
38
- end
39
- end
34
+ end
@@ -190,7 +190,7 @@ class Youtube < PluginBase
190
190
  download_url = video_info_hash["url_encoded_fmt_stream_map"][selected_format]
191
191
  #if download url ends with a ';' followed by a codec string remove that part because it stops URI.parse from working
192
192
  download_url = $1 if download_url =~ /(.*?);\scodecs=/
193
- file_name = title.delete("\"'").gsub(/[^0-9A-Za-z]/, '_') + "." + format_ext[selected_format][:extension]
193
+ file_name = PluginBase.make_filename_safe(title) + "." + format_ext[selected_format][:extension]
194
194
  puts "downloading to " + file_name
195
195
  {:url => download_url, :name => file_name}
196
196
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viddl-rb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 143
4
+ hash: 141
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 66
9
- version: "0.66"
8
+ - 67
9
+ version: "0.67"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marc Seeger
@@ -14,7 +14,8 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-06-03 00:00:00 Z
17
+ date: 2012-07-03 00:00:00 +02:00
18
+ default_executable:
18
19
  dependencies:
19
20
  - !ruby/object:Gem::Dependency
20
21
  name: nokogiri
@@ -109,6 +110,7 @@ files:
109
110
  - Gemfile.lock
110
111
  - Rakefile
111
112
  - README.md
113
+ has_rdoc: true
112
114
  homepage: https://github.com/rb2k/viddl-rb
113
115
  licenses: []
114
116
 
@@ -140,10 +142,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
142
  requirements: []
141
143
 
142
144
  rubyforge_project: viddl-rb
143
- rubygems_version: 1.8.21
145
+ rubygems_version: 1.4.2
144
146
  signing_key:
145
147
  specification_version: 3
146
148
  summary: An extendable commandline video downloader for flash video sites.
147
149
  test_files: []
148
150
 
149
- has_rdoc: false