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 +4 -4
- data/Gemfile +3 -2
- data/kgmusic.gemspec +3 -2
- data/lib/kgmusic/basemod.rb +23 -61
- data/lib/kgmusic/version.rb +1 -1
- data/lib/kgmusic.rb +24 -14
- metadata +7 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7e0349e3b0ebb6507c92f2d30de26ce1d1001cd
|
4
|
+
data.tar.gz: 3a81efb1fd03ab00db347c5f21348de7dee60df5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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"
|
data/lib/kgmusic/basemod.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'kgmusic/version'
|
2
2
|
#require 'unicode_utils/titlecase'
|
3
|
-
require '
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
57
|
-
|
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['
|
64
|
+
response['Content-Length'].to_i
|
65
65
|
end
|
66
66
|
|
67
67
|
def obtain_final_url __uri
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
76
|
-
|
77
|
-
|
78
|
-
|
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
|
data/lib/kgmusic/version.rb
CHANGED
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,
|
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
|
-
|
65
|
-
|
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.
|
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-
|
11
|
+
date: 2016-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: curb
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0.9'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
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: '
|
29
|
+
version: '0.9'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
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
|