kgmusic 0.1.0pre20160513 → 0.1.0pre20160515

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dff9fbe5070d1a37e25827f4bfa52fd5c28c183f
4
- data.tar.gz: 5568456eed54334f98b9dab45ee5da8ee93067a3
3
+ metadata.gz: f7e0349e3b0ebb6507c92f2d30de26ce1d1001cd
4
+ data.tar.gz: 3a81efb1fd03ab00db347c5f21348de7dee60df5
5
5
  SHA512:
6
- metadata.gz: d4b2084a705b3f4c65d9c76cb4f7c471e2c312a1a74e2486b91707c3845b2c6ba1d8418ab5a253f67f4f685fb1f5ee3fe591074b8beb12472b0840d184027608
7
- data.tar.gz: 4bf0d0b2131b16d11e41fbd91e03f62f190f593cabfeb8632c082a08fe2cfa7a4f38ad48026f711e806e76acdc1131fbc629c85559e3d7544734d90ec04025d7
6
+ metadata.gz: c79394c6363d8826b5c9d1cfa091a53ada0f64213d40f6aeb642cb19e601f17af657969575edc3b68caeead18572d0d4f96e9b2fedc0dd28767700d71a86b84c
7
+ data.tar.gz: 36e589b0e96519302bdbd1046bfe8df1329e2ff90578160e5f52303bb9ca022c6cc848b4a4fc720505f1f680881f53efc3ee8613346a1e3fb0d138da06cdba1e
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  #gem 'unicode_utils', '1.4.0'
4
- gem 'rest-client', '~> 1.8', '>= 1.8.0'
4
+ #gem 'rest-client', '~> 1.8', '>= 1.8.0'
5
+ gem 'curb', '~> 0.9', '>= 0.9.3'
5
6
  gem 'nokogiri', '~> 1.6', '>= 1.6.0'
6
- gem 'progressbar', '0.21.0'
7
+ #gem 'progressbar', '0.21.0'
data/kgmusic.gemspec CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  #spec.add_runtime_dependency "unicode_utils", "1.4.0"
21
- spec.add_runtime_dependency "rest-client", "~> 1.8", ">= 1.8.0"
21
+ #spec.add_runtime_dependency "rest-client", "~> 1.8", ">= 1.8.0"
22
+ spec.add_runtime_dependency "curb", "~> 0.9", ">= 0.9.3"
22
23
  spec.add_runtime_dependency "nokogiri", "~> 1.6", ">= 1.6.0"
23
- spec.add_runtime_dependency "progressbar", "0.21.0"
24
+ #spec.add_runtime_dependency "progressbar", "0.21.0"
24
25
  spec.add_development_dependency "bundler", "~> 1.11"
25
26
  spec.add_development_dependency "rake", "~> 10.0"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -1,6 +1,7 @@
1
1
  require 'kgmusic/version'
2
2
  #require 'unicode_utils/titlecase'
3
- require 'rest-client'
3
+ require 'fileutils'
4
+ require 'curl'
4
5
  require 'nokogiri'
5
6
 
6
7
  module KgMusic
@@ -14,14 +15,10 @@ module KgMusic
14
15
 
15
16
  protected
16
17
  def go_to(url, params={})
17
- RestClient.get(url, params) do |response, request, result, &block|
18
- if [301, 302, 307].include? response.code
19
- response.follow_redirection(request, result, &block)
20
- else
21
- final_url = request.url
22
- response.return!(request, result, &block)
23
- end
24
- end
18
+ __url = Curl.urlalize(url, params)
19
+ c = Curl::Easy.new(__url) { |c| c.follow_location = true }
20
+ c.perform
21
+ c.body_str
25
22
  end
26
23
 
27
24
  def has_unallowed_symbols?(key)
@@ -53,68 +50,33 @@ module KgMusic
53
50
  end
54
51
 
55
52
  def __head_request __url
56
- uri = uri_parse __url
57
- Net::HTTP.start(uri.host) do |http|
58
- http.request_head(uri.path)
53
+ c = Curl::Easy.new(__url) do |curl|
54
+ curl.set(:nobody, true)
59
55
  end
56
+ c.perform
57
+ response = c.header_str
58
+ headers_list = response.split(/[\r\n]+/).map(&:strip)
59
+ __headers = Hash[headers_list.flat_map {|s| s.scan(/^(\S+): (.+)/)}]
60
60
  end
61
61
 
62
62
  def get_content_length __uri
63
63
  response = __head_request __uri
64
- response['content-length'].to_i
64
+ response['Content-Length'].to_i
65
65
  end
66
66
 
67
67
  def obtain_final_url __uri
68
- uri = uri_parse __uri
69
- response = Net::HTTP.start(uri.host) do |http|
70
- http.request_get(uri.path)
71
- end
72
- response['location'] || __uri
68
+ c = Curl::Easy.new __uri
69
+ c.perform
70
+ response = c.header_str
71
+ headers_list = response.split(/[\r\n]+/).map(&:strip)
72
+ __headers = Hash[headers_list.flat_map {|s| s.scan(/^(\S+): (.+)/)}]
73
+ __headers['Location'].to_s || __uri
73
74
  end
74
75
 
75
- def download_proc(url, outfile)
76
-
77
- uri = uri_parse url
78
- content_length = get_content_length url
79
- counter = 0
80
-
81
- unless File.exist? outfile
82
- Net::HTTP.start(uri.host) do |http|
83
- @progress_bar = ProgressBar.new("Progress", content_length)
84
- File.open(outfile, 'w') do |f|
85
- http.read_timeout = 5
86
- http.request_get(uri.path) do |response|
87
- response.read_body do |body|
88
- f.write body
89
- counter += body.length
90
- @progress_bar.set counter
91
- end
92
- end
93
- end
94
- end
95
- @progress_bar.finish
96
- else
97
- Net::HTTP.start(uri.host) do |http|
98
- partial_size = File.size(outfile)
99
- __range = [partial_size, content_length]
100
- __headers = {"Range" => "bytes=#{__range.first}-#{__range.last}"}
101
- @progress_bar = ProgressBar.new("Progress", content_length)
102
- counter += partial_size
103
- while content_length > File.size(outfile) do
104
- File.open(outfile, 'a') do |f|
105
- http.read_timeout = 5
106
- http.request_get(uri.path, __headers) do |response|
107
- response.read_body do |body|
108
- f.write body
109
- counter += body.length
110
- @progress_bar.set counter
111
- end
112
- end
113
- end
114
- end
115
- end
116
- end
117
- @progress_bar.finish
76
+ def visit_download_page
77
+ page = go_to @download_page
78
+ data = parse_html page
79
+ @direct_link = data.css('a.download-block').attr('href').to_s
118
80
  end
119
81
  end
120
82
  end
@@ -1,3 +1,3 @@
1
1
  module KgMusic
2
- VERSION = "0.1.0pre20160513"
2
+ VERSION = "0.1.0pre20160515"
3
3
  end
data/lib/kgmusic.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "kgmusic/basemod"
2
- require "progressbar"
2
+ #require "progressbar"
3
3
 
4
4
  module KgMusic
5
5
 
@@ -13,7 +13,7 @@ module KgMusic
13
13
  def initialize args
14
14
  keys = [:artist, :album]
15
15
  keys.each do |k|
16
- if args[k].is_a? String
16
+ if args.keys === keys and args[k].is_a? String
17
17
  self.instance_variable_set "@#{k}", validate(args[k])
18
18
  else
19
19
  raise ArgumentError
@@ -27,7 +27,7 @@ module KgMusic
27
27
  url = 'kibergrad.fm/search'
28
28
  params = {:q => "#{@artist} - #{@album}", :p => "albums"}
29
29
 
30
- @page = go_to(url, :params => params)
30
+ @page = go_to(url, params)
31
31
  @doc = parse_html @page
32
32
 
33
33
  if not @doc.css('div.album-info').empty?
@@ -36,33 +36,43 @@ module KgMusic
36
36
  if @info.size == 1
37
37
  @result = @info.css('h3')
38
38
  @download_page = @result.at('a').attr('href')
39
- visit_download_page
40
39
  elsif @info.size > 1
41
40
  n = @info.css('h3').find_index do |e|
42
41
  e.at('a').children.to_s === @album
43
42
  end
44
43
  @result = @info.css('h3')[n]
45
44
  @download_page = @result.at('a').attr('href')
46
- visit_download_page
47
45
  end
46
+ visit_download_page
48
47
  rescue
49
48
  end
50
49
  end
51
50
  end
52
51
 
53
- def visit_download_page
54
- page = go_to @download_page
55
- data = parse_html page
56
- link = data.css('a.download-block').attr('href')
57
- @direct_link = link.to_s
58
- end
59
-
60
52
  def get_album
53
+
61
54
  url = obtain_final_url @direct_link
62
55
  outfile = File.join(ENV['HOME'], "#{@artist} - #{@album}.zip")
56
+ content_length = get_content_length url
57
+
58
+ if File.exist? outfile
59
+ fsize = File.size outfile
60
+ else
61
+ FileUtils.touch outfile
62
+ fsize = 0
63
+ end
64
+
63
65
  begin
64
- download_proc url, outfile
65
- rescue
66
+ f = File.open(outfile, 'ab')
67
+ c = Curl::Easy.new url do |curl|
68
+ curl.set(:resume_from, fsize) if File.exists? outfile
69
+ curl.on_body { |body| f.write body }
70
+ end
71
+ puts "Please, wait ..."
72
+ c.perform if content_length > fsize
73
+ rescue IOError
74
+ ensure
75
+ f.close
66
76
  end
67
77
  end
68
78
 
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kgmusic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0pre20160513
4
+ version: 0.1.0pre20160515
5
5
  platform: ruby
6
6
  authors:
7
7
  - vitvegl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-12 00:00:00.000000000 Z
11
+ date: 2016-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rest-client
14
+ name: curb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '0.9'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.8.0
22
+ version: 0.9.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.8'
29
+ version: '0.9'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.8.0
32
+ version: 0.9.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: nokogiri
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -50,20 +50,6 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 1.6.0
53
- - !ruby/object:Gem::Dependency
54
- name: progressbar
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - '='
58
- - !ruby/object:Gem::Version
59
- version: 0.21.0
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - '='
65
- - !ruby/object:Gem::Version
66
- version: 0.21.0
67
53
  - !ruby/object:Gem::Dependency
68
54
  name: bundler
69
55
  requirement: !ruby/object:Gem::Requirement