topdmc-client 0.0.3 → 0.0.4
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/lib/topdmc/resources/base.rb +1 -20
- data/lib/topdmc/resources/client.rb +7 -0
- data/lib/topdmc/resources/search.rb +0 -2
- data/lib/topdmc/resources/track.rb +18 -1
- data/lib/topdmc/resources/utils.rb +26 -11
- data/lib/topdmc/resources/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40bfa35d8f3341250b9b0a0c31006a6995fd87b1
|
4
|
+
data.tar.gz: f45805d469d746a19132f01ef44b687708ad7f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd29ee75bd138797275f0b0481dc233e47fdb473199ecd41fb8459c4f9da560e31bb8f97da6c6fbaa7032580a22895937137a6ee1f8d3ecd0e255aa27608e0a9
|
7
|
+
data.tar.gz: c6e5de351cc88e6bbd7f739b78d623eb5ebf7b50ad45ab9d7c322a7d481d7387e8582a128e72d384e4971514769a63807a2ce95ae19c6f23ad903dbda85f5df6
|
@@ -29,26 +29,7 @@ module TopDMC
|
|
29
29
|
base_params.merge! params
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
encoded_params = base_params.map do |key, value|
|
34
|
-
[key, URI.encode_www_form_component(value.to_s)]
|
35
|
-
end
|
36
|
-
|
37
|
-
# 按参数名进行升序排列,如果key值相同之后按照value进行排序
|
38
|
-
sorted_params = encoded_params.sort
|
39
|
-
|
40
|
-
# 参数名和参数值之间用 “=” 号连接,参数和参数之间用 “&” 号连接
|
41
|
-
normalized = sorted_params.map do |item|
|
42
|
-
item.join('=')
|
43
|
-
end
|
44
|
-
|
45
|
-
sign_str = [request_method,
|
46
|
-
URI.encode_www_form_component(path),
|
47
|
-
URI.encode_www_form_component(normalized.join('&'))
|
48
|
-
].join('&')
|
49
|
-
|
50
|
-
sign = hmac_sha1_signature(@client.client_secure, sign_str)
|
51
|
-
base_params[:sign] = sign
|
32
|
+
base_params[:sign] = sign(request_method,path,base_params,@client.client_secure)
|
52
33
|
|
53
34
|
# 处理请求地址
|
54
35
|
path = "#{@client.url}#{path}"
|
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'topdmc/resources/artist'
|
2
|
+
require 'topdmc/resources/search'
|
3
|
+
require 'topdmc/resources/album'
|
4
|
+
require 'topdmc/resources/track'
|
2
5
|
require "topdmc/resources/version"
|
3
6
|
|
4
7
|
module TopDMC
|
@@ -26,6 +29,10 @@ module TopDMC
|
|
26
29
|
TopDMC::Resources::Album.new(self)
|
27
30
|
end
|
28
31
|
|
32
|
+
def track
|
33
|
+
TopDMC::Resources::Track.new(self)
|
34
|
+
end
|
35
|
+
|
29
36
|
def search
|
30
37
|
TopDMC::Resources::Search.new(self)
|
31
38
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'topdmc/resources/base'
|
2
2
|
|
3
3
|
module TopDMC
|
4
|
-
module
|
4
|
+
module Resources
|
5
5
|
class Track < Base
|
6
6
|
def initialize(client)
|
7
7
|
super(client)
|
@@ -30,6 +30,23 @@ module TopDMC
|
|
30
30
|
def update_offline_play_count(id, params)
|
31
31
|
perform_request('PUT', "/v1/tracks/#{id}", params)
|
32
32
|
end
|
33
|
+
|
34
|
+
def authorize_url(track_id,params={})
|
35
|
+
base_params ={
|
36
|
+
timestamp: Time.now.to_i,
|
37
|
+
nonce: nonce,
|
38
|
+
client_id: @client.client_id
|
39
|
+
}
|
40
|
+
|
41
|
+
params.merge! base_params
|
42
|
+
params[:sign] = sign('GET',"/v1/tracks/#{track_id}/authorize",params,@client.client_secure)
|
43
|
+
|
44
|
+
query = params.map { |key, value|
|
45
|
+
[key, URI.encode_www_form_component(value.to_s)]
|
46
|
+
}.sort.map { |item| item.join('=') }.join('&')
|
47
|
+
|
48
|
+
"#{@client.url}/v1/tracks/#{track_id}/authorize?#{query}"
|
49
|
+
end
|
33
50
|
end
|
34
51
|
end
|
35
52
|
end
|
@@ -1,20 +1,35 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'openssl'
|
3
|
-
require '
|
3
|
+
require 'uri'
|
4
4
|
|
5
5
|
module TopDMC
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
module Resources
|
7
|
+
module Utils
|
8
|
+
def hmac_sha1_signature(key, signature_string)
|
9
|
+
digest = OpenSSL::Digest::Digest.new('sha1')
|
10
|
+
hmac = OpenSSL::HMAC.digest(digest, key, signature_string)
|
11
|
+
Base64.encode64(hmac).chomp.gsub(/\n/, '')
|
12
|
+
end
|
13
|
+
|
14
|
+
def nonce
|
15
|
+
rand(10 ** 30).to_s.rjust(30, '0')
|
16
|
+
end
|
17
|
+
|
18
|
+
def sign(method, path, params, key)
|
19
|
+
|
20
|
+
normalized = params.map { |key, value|
|
21
|
+
[key, URI.encode_www_form_component(value.to_s)]
|
22
|
+
}.sort.map { |item| item.join('=') }
|
23
|
+
|
24
|
+
sign_str = [method,
|
25
|
+
URI.encode_www_form_component(path),
|
26
|
+
URI.encode_www_form_component(normalized.join('&'))
|
27
|
+
].join('&')
|
13
28
|
|
14
|
-
|
15
|
-
|
16
|
-
end
|
29
|
+
#return sign string
|
30
|
+
hmac_sha1_signature(key, sign_str)
|
17
31
|
end
|
32
|
+
end
|
18
33
|
end
|
19
34
|
end
|
20
35
|
|