Skip to content

Commit

Permalink
Merge pull request #5 from steven7851/patch-1
Browse files Browse the repository at this point in the history
fix xiami
  • Loading branch information
nondanee authored Jul 22, 2018
2 parents e6ebf91 + 3e4a789 commit 86b09de
Showing 1 changed file with 13 additions and 65 deletions.
78 changes: 13 additions & 65 deletions provider/xiami.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,24 @@
const request = require('../request.js')

var extraHeaders = {
'Cookie': 'user_from=2;XMPLAYER_addSongsToggler=0;XMPLAYER_isOpen=0;_xiamitoken=cb8bfadfe130abdbf5e2282c30f0b39a;',
'Origin': 'http://m.xiami.com/',
'Referer': 'http://m.xiami.com/'
}

function caesar(location) {
var num = location[0]
var avg_len = Math.floor(location.slice(1).length / num)
var remainder = location.slice(1).length % num
var result = []
for (var i=0; i<remainder; i++) {
var line = location.slice(i * (avg_len + 1) + 1, (i + 1) * (avg_len + 1) + 1)
result.push(line)
}
for (var i=0; i<num-remainder; i++) {
var line = location.slice((avg_len + 1) * remainder).slice(i * avg_len + 1, (i + 1) * avg_len + 1)
result.push(line)
}
var s = [];
for (var i=0; i< avg_len; i++) {
for (var j=0; j<num; j++){
s.push(result[j][i])
}
}
for (var i=0; i<remainder; i++) {
s.push(result[i].slice(-1))
}
return unescape(s.join('')).replace(/\^/g, '0')
}

function search(songInfo) {
function track(songInfo) {
var uri =
'http://api.xiami.com/web?v=2.0&app_key=1' +
'&key=' + encodeURIComponent(songInfo.keyword) + '&page=1' +
'&limit=20&callback=jsonp154&r=search/songs'

return new Promise(function (resolve, reject){
request(uri, extraHeaders)
request('GET', uri, extraHeaders)
.then(function (body) {
var jsonBody = JSON.parse(body.slice('jsonp154('.length, -')'.length))
var chief = jsonBody['data']['songs'][0]
if(chief){
resolve(chief.song_id)
var songUrl = jsonBody['data']['songs'][0]
if(songUrl){
resolve(songUrl.listen_file)
}
else{
reject()
Expand All @@ -54,49 +30,21 @@ function search(songInfo) {
})
}


function track(id) {
var uri =
'https://www.xiami.com/song/playlist/id/' + id +
'/object_name/default/object_id/0/cat/json'

return new Promise(function (resolve, reject){
request(uri, extraHeaders)
.then(function (body) {
var jsonBody = JSON.parse(body)
if (jsonBody.data.trackList == null){
reject()
}
else{
var location = jsonBody.data.trackList[0].location
var songUrl = 'http:' + caesar(location)
resolve(songUrl)
}
})
.catch(function (e) {
reject(e)
})
})
}

function check(songInfo) {
return new Promise(function (resolve, reject){
search(songInfo)
.then(function(songId){
track(songId)
.then(function(songUrl){
resolve(songUrl)
})
.catch(function(){
resolve()
})
track(songInfo)
.then(function(songUrl){
resolve(songUrl)
})
.catch(function(){
resolve()
})
})
.catch(function(){
resolve()
})
}

module.exports = {
check: check
}
}

0 comments on commit 86b09de

Please sign in to comment.