cherrypicker 0.3.10 → 0.3.11

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.
@@ -1,30 +1,72 @@
1
1
  #The points are decremented by 1000 per minute. If you are able to parse the http header,
2
2
  #you can parse "X-APICPU: x/y", where x stands for your current points
3
+
4
+ # it will try and auto detect the size and filename if not supplied
5
+ # Cherrypicker::download_file("http://download.thinkbroadband.com/10MB.zip", :location => '/location/tosave/file/', :size => 10485760)
6
+
7
+ require 'rubygems'
3
8
  require 'net/http'
4
9
  require 'net/https'
10
+ require 'progressbar'
5
11
  require 'open-uri'
6
12
 
7
13
  module Cherrypicker
8
14
  def self.remote_query(url)
9
- begin
10
- uri = URI.parse(url)
11
- http = Net::HTTP.new(uri.host, uri.port)
12
- http.use_ssl = true if uri.scheme == "https"
13
- http.open_timeout = 3 # seconds
14
- http.read_timeout = 3 # seconds
15
- request = Net::HTTP::Get.new(uri.request_uri)
16
- request.initialize_http_header({"User-Agent" => random_agent})
17
- response = http.request(request)
18
- if response["X-APICPU"]
19
- if (response["X-APICPU"][/(\d*)\/\d*/, 1]).to_i > 9500
20
- sleep 60 # seconds
15
+ uri = URI.parse(url)
16
+ http = Net::HTTP.new(uri.host, uri.port)
17
+ http.use_ssl = true if uri.scheme == "https"
18
+ http.open_timeout = 3 # seconds
19
+ http.read_timeout = 3 # seconds
20
+ request = Net::HTTP::Get.new(uri.request_uri)
21
+ request.initialize_http_header({"User-Agent" => random_agent})
22
+ response = http.request(request)
23
+ if response["X-APICPU"]
24
+ if (response["X-APICPU"][/(\d*)\/\d*/, 1]).to_i > 9500
25
+ sleep 60 # seconds
26
+ end
27
+ end
28
+ return http.request(request)
29
+ end
30
+
31
+ def self.download_file(link, opts={})
32
+ o = {
33
+ :location => nil,
34
+ :size => nil,
35
+ :filename => nil
36
+ }.merge(opts)
37
+
38
+ @link = link
39
+ @size = o[:size]
40
+ @location = o[:location] ||= ""
41
+ @filename = o[:filename]
42
+ @progress = 0
43
+ @finished = false
44
+
45
+ uri = URI.parse(@link.to_s)
46
+ http = Net::HTTP.new(uri.host, uri.port)
47
+ http.use_ssl = true if uri.scheme == "https"
48
+ request = Net::HTTP::Get.new(uri.request_uri)
49
+ request.initialize_http_header({"User-Agent" => Cherrypicker::random_agent})
50
+ unless (uri.host.include? 'youtube.com') && (uri.request_uri.include? 'videoplayback') #youtube throws EOFError
51
+ head = http.request_head(URI.escape(uri.path))
52
+ case head
53
+ when Net::HTTPForbidden
54
+ @size = nil #no content-length no progress bar
55
+ else
56
+ @size = head['content-length'] if @size.nil? && head['content-length'].to_i > 1024
57
+ end
58
+ end
59
+ http.request(request) do |response|
60
+ bar = ProgressBar.new((@filename ||= File.basename(uri.path)), @size.to_i) unless @size.nil?
61
+ File.open(@location + (@filename ||= File.basename(uri.path)), "wb") do |file|
62
+ response.read_body do |segment|
63
+ @progress += segment.length
64
+ bar.set(@progress) unless @size.nil?
65
+ file.write(segment)
21
66
  end
22
67
  end
23
- return response
24
- rescue SocketError
25
- $stderr.print "IO failed: " + $!
26
- raise
27
68
  end
69
+ @finished = true
28
70
  end
29
71
 
30
72
  def self.hash_to_url(hash)
@@ -32,7 +32,7 @@ module Cherrypicker
32
32
  end
33
33
 
34
34
  def download
35
- Download.new(download_url, :location => @location, :size => @size, :filename => @filename)
35
+ Cherrypicker::download_file(download_url, :location => @location, :size => @size, :filename => @filename)
36
36
  end
37
37
 
38
38
  def create_url
@@ -90,7 +90,7 @@ module Cherrypicker
90
90
  end
91
91
 
92
92
  def download
93
- Download.new(@download_url, :location => @location, :size => @size)
93
+ Cherrypicker::download_file(@download_url, :location => @location, :size => @size)
94
94
  end
95
95
  end
96
96
  end
@@ -29,7 +29,7 @@ module Cherrypicker
29
29
  end
30
30
 
31
31
  def download
32
- Download.new(@hostname + remote_url, :location => @location, :size => @size, :filename => @filename)
32
+ Cherrypicker::download_file(@hostname + remote_url, :location => @location, :size => @size, :filename => @filename)
33
33
  end
34
34
 
35
35
  def fileid
@@ -33,7 +33,7 @@ module Cherrypicker
33
33
  end
34
34
 
35
35
  def download
36
- Download.new(@download_url, :location => @location)
36
+ Cherrypicker::download_file(@download_url, :location => @location)
37
37
  end
38
38
  end
39
39
  end
@@ -39,13 +39,13 @@ module Cherrypicker
39
39
  download_url = ":#{vimeo_id}/#{request_signature}/#{request_signature_expires}/?q=hd"
40
40
  end
41
41
 
42
- @filename = title.delete("\"'").gsub(/[^0-9A-Za-z]/, '_') + ".flv"
42
+ @filename = title.delete("\"'").gsub(/[^0-9A-Za-z]/, '_') + ".mp4"
43
43
  reply = Cherrypicker::remote_query("#{hostname}#{download_url}")
44
44
  @download_url = reply.response['location']
45
45
  end
46
46
 
47
47
  def download
48
- Download.new(@download_url, :location => @location)
48
+ Cherrypicker::download_file(@download_url, :location => @location, :filename => @filename)
49
49
  end
50
50
  end
51
51
  end
@@ -60,6 +60,7 @@ module Cherrypicker
60
60
  download_url = video_info_hash["fmt_url_map"][formats.first]
61
61
  @filename = video_info_hash["title"].delete("\"'").gsub(/[^0-9A-Za-z]/, '_') + "." + format_ext[formats.first].first
62
62
 
63
+ #there might be a redirect let check
63
64
  reply = Cherrypicker::remote_query("#{download_url}")
64
65
  if reply.response['location']
65
66
  @download_url = reply.response['location']
@@ -69,7 +70,7 @@ module Cherrypicker
69
70
  end
70
71
 
71
72
  def download
72
- Download.new(@download_url, :location => @location, :filename => @filename)
73
+ Cherrypicker::download_file(@download_url, :location => @location, :filename => @filename)
73
74
  end
74
75
  end
75
76
  end
@@ -1,3 +1,3 @@
1
1
  module Cherrypicker
2
- VERSION = "0.3.10"
2
+ VERSION = "0.3.11"
3
3
  end
data/lib/cherrypicker.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'cherrypicker/cherrypick'
2
- require 'cherrypicker/download'
3
2
  require 'cherrypicker/linkchecker'
4
3
  require 'cherrypicker/helpers'
5
4
  require 'cherrypicker/plugins/vimeo'
data/uml.png CHANGED
Binary file
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cherrypicker
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.10
5
+ version: 0.3.11
6
6
  platform: ruby
7
7
  authors:
8
8
  - Karl Entwistle
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-01 00:00:00 +01:00
13
+ date: 2011-05-02 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -42,7 +42,6 @@ files:
42
42
  - cherrypicker.gemspec
43
43
  - lib/cherrypicker.rb
44
44
  - lib/cherrypicker/cherrypick.rb
45
- - lib/cherrypicker/download.rb
46
45
  - lib/cherrypicker/helpers.rb
47
46
  - lib/cherrypicker/linkchecker.rb
48
47
  - lib/cherrypicker/plugins/hotfile.rb
@@ -1,61 +0,0 @@
1
- # Class that can download files from cyberlockers or generic URLs
2
- # it will try and auto detect the size and filename if not supplied
3
- # Download.new("http://download.thinkbroadband.com/10MB.zip", :location => '/location/tosave/file/')
4
- # Download.new("http://download.thinkbroadband.com/10MB.zip", :location => '/location/tosave/file/', :size => 10485760)
5
-
6
- require 'rubygems'
7
- require 'net/http'
8
- require 'net/https'
9
- require 'progressbar'
10
- require 'open-uri'
11
-
12
- module Cherrypicker
13
- class Download
14
- attr_accessor :link, :size, :location, :progress, :filename, :finished
15
-
16
- def initialize(link, opts={})
17
- o = {
18
- :location => nil,
19
- :size => nil,
20
- :filename => nil
21
- }.merge(opts)
22
-
23
- @link = link
24
- @size = o[:size]
25
- @location = o[:location] ||= ""
26
- @filename = o[:filename]
27
- @progress = 0
28
- @finished = false
29
-
30
- download_file
31
- end
32
-
33
- def download_file
34
- uri = URI.parse(@link.to_s)
35
- http = Net::HTTP.new(uri.host, uri.port)
36
- http.use_ssl = true if uri.scheme == "https"
37
- request = Net::HTTP::Get.new(uri.request_uri)
38
- request.initialize_http_header({"User-Agent" => Cherrypicker::random_agent})
39
- unless (uri.host.include? 'youtube.com') && (uri.request_uri.include? 'videoplayback') #youtube throws EOFError
40
- head = http.request_head(URI.escape(uri.path))
41
- case head
42
- when Net::HTTPForbidden
43
- @size = nil #no content-length no progress bar
44
- else
45
- @size = head['content-length'] if @size.nil? && head['content-length'].to_i > 1024
46
- end
47
- end
48
- http.request(request) do |response|
49
- bar = ProgressBar.new((@filename ||= File.basename(uri.path)), @size.to_i) unless @size.nil?
50
- File.open(@location + (@filename ||= File.basename(uri.path)), "wb") do |file|
51
- response.read_body do |segment|
52
- @progress += segment.length
53
- bar.set(@progress) unless @size.nil?
54
- file.write(segment)
55
- end
56
- end
57
- end
58
- @finished = true
59
- end
60
- end
61
- end