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 +4 -4
- data/README.md +3 -2
- data/lib/xmfun.rb +3 -0
- data/lib/xmfun/decoder.rb +1 -0
- data/lib/xmfun/downloader.rb +48 -28
- data/lib/xmfun/mp3/mp3_tagger.rb +21 -0
- data/lib/xmfun/mp3/track.rb +19 -0
- data/lib/xmfun/version.rb +2 -1
- data/xmfun.gemspec +2 -0
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57e6f8c8ed8e94b3301e745df32a1be299c35adc
|
4
|
+
data.tar.gz: 114ed2d3d93e2143d22e39cce59e708c9813a8f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 812327659aaca61580bf2f841cc0fe84eb3e57c7ae6c8f57d334c0043df6b3958a7989bff9e3f80e18089cc69d203f3e348ee0082b622df6e50ad4a9a90704b1
|
7
|
+
data.tar.gz: 3f249647c5051ad5d22ab1c18c514008c3954022928720ee7c0ec02528ddb1d48e3f89d0f1fe0495e0c0c55cbd9470395484aba6a7434ab08a0b9477e899a3b9
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# XMfun
|
2
|
+
[](http://badge.fury.io/rb/xmfun)
|
2
4
|
[](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
|
-
-
|
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
data/lib/xmfun/decoder.rb
CHANGED
data/lib/xmfun/downloader.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
m.tag.title = title
|
45
|
-
m.tag.album = album
|
51
|
+
uri = URI.parse(track.location)
|
52
|
+
|
53
|
+
progress = nil
|
46
54
|
|
47
|
-
|
48
|
-
|
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
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.
|
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-
|
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
|