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 +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
|
+
[![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
|
-
-
|
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
|