kgmusic 0.1.0pre20160515 → 0.1.0pre20160517

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: f7e0349e3b0ebb6507c92f2d30de26ce1d1001cd
4
- data.tar.gz: 3a81efb1fd03ab00db347c5f21348de7dee60df5
3
+ metadata.gz: 34f94579c2edfe6b9b62d490224f73a5a5e38653
4
+ data.tar.gz: 354ca55887440e1b8c8a372ccaa521ddf94005b3
5
5
  SHA512:
6
- metadata.gz: c79394c6363d8826b5c9d1cfa091a53ada0f64213d40f6aeb642cb19e601f17af657969575edc3b68caeead18572d0d4f96e9b2fedc0dd28767700d71a86b84c
7
- data.tar.gz: 36e589b0e96519302bdbd1046bfe8df1329e2ff90578160e5f52303bb9ca022c6cc848b4a4fc720505f1f680881f53efc3ee8613346a1e3fb0d138da06cdba1e
6
+ metadata.gz: 62a30ea5d3616881032f4aca06861b0ad2c493b7ebe9ddb1ab6bbfb84569ffe5f113ab3452470b54839df4b2f51e75f4b6ad4b27653f9ef54cd78c4bd5f79853
7
+ data.tar.gz: f07f37ce5c857156e9439a59571ca81de4d976a8b2f9d68d3bc0c3397589ed572c532ed948a04e18d70314956c1fdfc3c4332173b391f00bd3878aa1f3525a13
data/README.md CHANGED
@@ -19,12 +19,13 @@ Or install it yourself as:
19
19
  $ gem install kgmusic
20
20
 
21
21
  ## Usage
22
+ require 'kgmusic'
22
23
 
23
- $ require 'kgmusic'
24
+ music = KgMusic::Client.new :artist => 'God Is An Astronaut', :album => 'God Is An Astronaut'
24
25
 
25
- $ music = KgMusic::Search.new :artist => 'God Is An Astronaut', :album => 'God Is An Astronaut'
26
+ music.search
26
27
 
27
- $ music.search
28
+ album = music.download_album
28
29
 
29
30
  ## Development
30
31
 
@@ -0,0 +1,45 @@
1
+ require "curl"
2
+ require "nokogiri"
3
+ require "singleton"
4
+
5
+ module KgMusic
6
+
7
+ class API
8
+
9
+ include Singleton
10
+
11
+ class << self
12
+
13
+ private
14
+ def root
15
+ root = Curl::Easy.new('kibergrad.fm') do |curl|
16
+ curl.follow_location = true
17
+ curl.perform
18
+ end
19
+
20
+ doc = Nokogiri::HTML.parse root.body_str
21
+ end
22
+
23
+ public
24
+ def popular_artists
25
+ list = root.xpath("//div[@class='popular-artists']//li/a")
26
+ out = []; list.collect { |element| out << "#{element.children}" }
27
+ out
28
+ end
29
+
30
+ def popular_genres
31
+ list = root.xpath("//div/ul[@class='aim-menu css']/li/a")
32
+ out = []; list.collect { |element| out << "#{element.text}" }
33
+ out
34
+ end
35
+
36
+ def all_genres
37
+ list = root.xpath("//div//ul[@class='aim-menu css']//li/a")
38
+ out = []; list.collect { |element| out << "#{element.text}" }
39
+ out
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -14,6 +14,7 @@ module KgMusic
14
14
  ]
15
15
 
16
16
  protected
17
+
17
18
  def go_to(url, params={})
18
19
  __url = Curl.urlalize(url, params)
19
20
  c = Curl::Easy.new(__url) { |c| c.follow_location = true }
@@ -45,18 +46,15 @@ module KgMusic
45
46
  #end
46
47
  end
47
48
 
48
- def uri_parse __uri
49
- URI.parse __uri
49
+ def parse_http_header str
50
+ list = str.split(/[\r\n]+/).map(&:strip)
51
+ Hash[list.flat_map { |s| s.scan(/^(\S+): (.+)/) }]
50
52
  end
51
53
 
52
54
  def __head_request __url
53
- c = Curl::Easy.new(__url) do |curl|
54
- curl.set(:nobody, true)
55
- end
55
+ c = Curl::Easy.new(__url) { |curl| curl.set(:nobody, true) }
56
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+): (.+)/)}]
57
+ parse_http_header c.header_str
60
58
  end
61
59
 
62
60
  def get_content_length __uri
@@ -67,16 +65,21 @@ module KgMusic
67
65
  def obtain_final_url __uri
68
66
  c = Curl::Easy.new __uri
69
67
  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
68
+ __headers = parse_http_header c.header_str
69
+ __headers['Location'] || __uri
70
+ end
71
+
72
+ def get_album_info(url, params={})
73
+ __response = go_to url, params
74
+ doc = parse_html __response
75
+ doc.css('div.album-info')
74
76
  end
75
77
 
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
78
+ def get_direct_link __url
79
+ __response = go_to __url
80
+ doc = parse_html __response
81
+ @direct_link = doc.css('a.download-block').attr('href').to_s
80
82
  end
83
+
81
84
  end
82
85
  end
@@ -1,3 +1,3 @@
1
1
  module KgMusic
2
- VERSION = "0.1.0pre20160515"
2
+ VERSION = "0.1.0pre20160517"
3
3
  end
data/lib/kgmusic.rb CHANGED
@@ -3,12 +3,12 @@ require "kgmusic/basemod"
3
3
 
4
4
  module KgMusic
5
5
 
6
- class Search
6
+ class Client
7
7
 
8
8
  include BaseMod
9
9
 
10
10
  attr_reader :artist, :album
11
- attr_reader :doc, :info, :result, :download_page, :direct_link
11
+ attr_reader :result, :download_page, :direct_link
12
12
 
13
13
  def initialize args
14
14
  keys = [:artist, :album]
@@ -24,26 +24,21 @@ module KgMusic
24
24
  protected
25
25
 
26
26
  def run
27
- url = 'kibergrad.fm/search'
28
- params = {:q => "#{@artist} - #{@album}", :p => "albums"}
29
27
 
30
- @page = go_to(url, params)
31
- @doc = parse_html @page
28
+ url = 'kibergrad.fm/search'
29
+ params = { :q => "#{@artist} - #{@album}", :p => "albums" }
30
+ album_info = get_album_info url, params
32
31
 
33
- if not @doc.css('div.album-info').empty?
32
+ unless album_info.nil?
34
33
  begin
35
- @info = @doc.css('div.album-info')
36
- if @info.size == 1
37
- @result = @info.css('h3')
38
- @download_page = @result.at('a').attr('href')
39
- elsif @info.size > 1
40
- n = @info.css('h3').find_index do |e|
41
- e.at('a').children.to_s === @album
42
- end
43
- @result = @info.css('h3')[n]
34
+ if album_info.size == 1
35
+ @download_page = album_info.css('h3').at('a').attr('href')
36
+ elsif album_info.size > 1
37
+ full_match_index = album_info.css('h3').find_index { |e| e.at('a').children.to_s === @album }
38
+ @result = album_info.css('h3')[full_match_index]
44
39
  @download_page = @result.at('a').attr('href')
45
40
  end
46
- visit_download_page
41
+ get_direct_link @download_page
47
42
  rescue
48
43
  end
49
44
  end
@@ -55,15 +50,9 @@ module KgMusic
55
50
  outfile = File.join(ENV['HOME'], "#{@artist} - #{@album}.zip")
56
51
  content_length = get_content_length url
57
52
 
58
- if File.exist? outfile
59
- fsize = File.size outfile
60
- else
61
- FileUtils.touch outfile
62
- fsize = 0
63
- end
64
-
65
53
  begin
66
- f = File.open(outfile, 'ab')
54
+ f = File.open(outfile, 'ab+')
55
+ fsize = File.size outfile
67
56
  c = Curl::Easy.new url do |curl|
68
57
  curl.set(:resume_from, fsize) if File.exists? outfile
69
58
  curl.on_body { |body| f.write body }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kgmusic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0pre20160515
4
+ version: 0.1.0pre20160517
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-15 00:00:00.000000000 Z
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curb
@@ -109,6 +109,7 @@ files:
109
109
  - bin/setup
110
110
  - kgmusic.gemspec
111
111
  - lib/kgmusic.rb
112
+ - lib/kgmusic/api.rb
112
113
  - lib/kgmusic/basemod.rb
113
114
  - lib/kgmusic/version.rb
114
115
  homepage: https://github.com/vitvegl/kgmusic.git