xmfun 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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