xmfun 0.0.2 → 0.0.3

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: df82d030462552e3c7a46301507d42156b89637a
4
- data.tar.gz: 39ba675bbb2705abe84821eea975a7ee0d79bd5e
3
+ metadata.gz: 57e6f8c8ed8e94b3301e745df32a1be299c35adc
4
+ data.tar.gz: 114ed2d3d93e2143d22e39cce59e708c9813a8f0
5
5
  SHA512:
6
- metadata.gz: 72e7421684f5b9373b24991f6b25d02deb136bbdc2320c5aa407e9dc9523c69bb3bc7ff7670ff8f806e47b2ee01b73a783bda09a3f7b706d3a23dc440fd2e8dd
7
- data.tar.gz: 635a174bd39ee90121e14359384a65f6c66c08288a0b57c6b8dc64bcd12c3de4c73175283bbb1b157b16ee9535c2a02ad02a3b64a77d717747f17931f204c48b
6
+ metadata.gz: 812327659aaca61580bf2f841cc0fe84eb3e57c7ae6c8f57d334c0043df6b3958a7989bff9e3f80e18089cc69d203f3e348ee0082b622df6e50ad4a9a90704b1
7
+ data.tar.gz: 3f249647c5051ad5d22ab1c18c514008c3954022928720ee7c0ec02528ddb1d48e3f89d0f1fe0495e0c0c55cbd9470395484aba6a7434ab08a0b9477e899a3b9
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # XMfun
2
+ [![Gem
3
+ Version](https://badge.fury.io/rb/xmfun.svg)](http://badge.fury.io/rb/xmfun)
2
4
  [![Build
3
5
  Status](https://travis-ci.org/ipmsteven/xmfun.svg?branch=master)](https://travis-ci.org/ipmsteven/xmfun)
4
6
  [![Code
@@ -26,8 +28,7 @@ Or install it yourself as:
26
28
 
27
29
  ```
28
30
  xmfun
29
- -c cid -- download a music collect
30
- -s sid -- download a single song
31
+ -u url -- url on xiami website
31
32
  -d path -- path to save your music
32
33
  -v -- show version
33
34
  -h -- show help message
data/lib/xmfun.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require 'xmfun/version'
4
+ require 'xmfun/mp3/track'
5
+ require 'xmfun/mp3/mp3_tagger'
3
6
  require 'xmfun/url_parser'
4
7
  require 'xmfun/decoder'
5
8
  require 'xmfun/downloader'
data/lib/xmfun/decoder.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require 'cgi'
3
4
 
4
5
  module Xmfun
@@ -1,11 +1,12 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require 'open-uri'
3
4
  require 'nokogiri'
5
+ require 'nori'
4
6
  require 'clap'
5
- require 'mp3info'
6
7
  require 'parallel'
7
8
  require 'ruby-progressbar'
8
- require 'xmfun/decoder'
9
+
9
10
 
10
11
  module Xmfun
11
12
  class Downloader
@@ -17,38 +18,57 @@ module Xmfun
17
18
  Dir.mkdir(dst)
18
19
  Dir.chdir(dst)
19
20
  end
20
-
21
21
  f = Nokogiri::XML(open(url, "Client-IP" => "220.181.111.168"))
22
- progress = ProgressBar.create( :title => "Progress",
23
- :total => f.css("track").size,
24
- :format => '%a %bᗧ%i %p%% %t',
25
- :progress_mark => ' ',
26
- :remainder_mark => '・'
27
- )
28
- Parallel.map( f.css("track"), :in_threads => Parallel.processor_count, :finish => lambda { |item, i, result| progress.increment } ) do |track|
29
- album = track.css('album_name').text
30
- artist = track.css('artist').text
31
- lyric = track.css('lyric').text
32
- title = track.css('title').text
33
- location = track.css('location').text
34
- album_pic = track.css('album_pic').text
35
- mp3 = Decoder.decode(location)
36
-
37
- URI.parse(mp3).open do |f|
38
- File.open("#{title}_#{artist}.mp3", 'w') { |mp3| mp3.write(f.read) }
22
+
23
+ tracks = f.css("track")
24
+
25
+ if tracks.size > 1
26
+ # progress
27
+ progress = ProgressBar.create( :title => "Progress",
28
+ :total => tracks.size,
29
+ :format => '%a %bᗧ%i %p%% %t',
30
+ :progress_mark => ' ',
31
+ :remainder_mark => ''
32
+ )
33
+
34
+ #download collect
35
+ Parallel.map( tracks, :in_threads => Parallel.processor_count, :finish => lambda { |item, i, result| progress.increment } ) do |track|
36
+
37
+ track = Xmfun::Mp3::Track.new(Nori.new.parse(track.to_s)['track'])
38
+
39
+ URI.parse(track.location).open do |f|
40
+ File.open(track.file_name, 'w') { |mp3| mp3.write(f.read) }
41
+ end
42
+
43
+ # add mp3 meta info
44
+ Xmfun::Mp3::Mp3Tagger.tag(track)
39
45
  end
46
+ else
47
+ #download single sone
48
+ song = tracks[0]
49
+ track = Xmfun::Mp3::Track.new(Nori.new.parse(song.to_s)['track'])
40
50
 
41
- # add mp3 meta info
42
- Mp3Info.open "#{title}_#{artist}.mp3" do |m|
43
- m.tag.artist = artist
44
- m.tag.title = title
45
- m.tag.album = album
51
+ uri = URI.parse(track.location)
52
+
53
+ progress = nil
46
54
 
47
- m.tag2.remove_pictures
48
- m.tag2.add_picture(open(album_pic).read)
55
+ uri.open(:content_length_proc => lambda do |content_length|
56
+ if content_length && 0 < content_length
57
+ progress = ProgressBar.create( :title => "Progress",
58
+ :total => content_length,
59
+ :format => '%a %bᗧ%i %p%% %t',
60
+ :progress_mark => ' ',
61
+ :remainder_mark => '・')
62
+ end
63
+ end,
64
+ :progress_proc => lambda {|size| progress.progress = size if progress}) do |f|
65
+ File.open(track.file_name, 'w') { |mp3| mp3.write(f.read) }
49
66
  end
67
+
68
+ # add mp3 meta info
69
+ Xmfun::Mp3::Mp3Tagger.tag(track)
50
70
  end
51
- end
52
71
 
72
+ end
53
73
  end
54
74
  end
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'open-uri'
4
+ require 'mp3info'
5
+
6
+ module Xmfun
7
+ module Mp3
8
+ class Mp3Tagger
9
+ def self.tag(track)
10
+ Mp3Info.open track.file_name do |m|
11
+ m.tag.artist = track.artist
12
+ m.tag.title = track.title
13
+ m.tag.album = track.album
14
+
15
+ m.tag2.remove_pictures
16
+ m.tag2.add_picture(open(track.album_pic).read)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'ostruct'
4
+ require 'xmfun/decoder'
5
+
6
+ module Xmfun
7
+ module Mp3
8
+ class Track
9
+ def self.new(track_hash)
10
+ track_hash["location"] = Xmfun::Decoder.decode(track_hash["location"])
11
+ track_hash["file_name"] = "#{track_hash["title"]}_#{track_hash["artist"]}.mp3"
12
+ OpenStruct.new track_hash
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+
19
+
data/lib/xmfun/version.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  module Xmfun
3
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
4
5
  end
data/xmfun.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "clap", "~> 1.0.0"
22
22
  spec.add_dependency "nokogiri", "~> 1.6.3.1"
23
+ spec.add_dependency "nori", "~> 2.4.0"
23
24
  spec.add_dependency "parallel", "~> 1.2.2"
24
25
  spec.add_dependency "ruby-mp3info", "~> 0.8.4"
25
26
  spec.add_dependency "ruby-progressbar", "~> 1.5.1"
@@ -28,4 +29,5 @@ Gem::Specification.new do |spec|
28
29
  spec.add_development_dependency "rake", "~> 10.3.2"
29
30
  spec.add_development_dependency "rspec", "~> 3.0.0"
30
31
  spec.add_development_dependency "pry", "~> 0.10.0"
32
+ spec.add_development_dependency "pry-byebug", "~> 1.3.3"
31
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmfun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ipmsteven
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-18 00:00:00.000000000 Z
11
+ date: 2014-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clap
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.6.3.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: nori
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.4.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: parallel
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,20 @@ dependencies:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
152
  version: 0.10.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-byebug
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 1.3.3
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 1.3.3
139
167
  description: Yet another xiami music downloader
140
168
  email:
141
169
  - steven.lyl147@gmail.com
@@ -155,6 +183,8 @@ files:
155
183
  - lib/xmfun.rb
156
184
  - lib/xmfun/decoder.rb
157
185
  - lib/xmfun/downloader.rb
186
+ - lib/xmfun/mp3/mp3_tagger.rb
187
+ - lib/xmfun/mp3/track.rb
158
188
  - lib/xmfun/url_parser.rb
159
189
  - lib/xmfun/version.rb
160
190
  - spec/spec_helper.rb