Skip to content

Instantly share code, notes, and snippets.

@L3au
Created April 30, 2012 12:06
Show Gist options
  • Save L3au/2557697 to your computer and use it in GitHub Desktop.
Save L3au/2557697 to your computer and use it in GitHub Desktop.
Xiami music direct link getter for nodejs
//For jQuery
$.xiami = function (songId, callback) {
function decoder (sourceString) {
var _loc9 = Number(sourceString[0]);
var _loc7 = sourceString.substr(1);
var _loc5 = Math.floor(_loc7.length / _loc9);
var _loc6 = _loc7.length % _loc9;
var _loc2 = new Array();
for (var _loc3 = 0; _loc3 < _loc6; ++_loc3) {
if (_loc2[_loc3] == undefined) _loc2[_loc3] = "";
_loc2[_loc3] = _loc7.substr((_loc5 + 1) * _loc3, _loc5 + 1);
}
for (var _loc3 = _loc6; _loc3 < _loc9; ++_loc3)
_loc2[_loc3] = _loc7.substr(_loc5 * (_loc3 - _loc6) + (_loc5 + 1) * _loc6, _loc5);
var _loc4 = "";
for (var _loc3 = 0; _loc3 < _loc2[0].length; ++_loc3)
for (var _loc1 = 0; _loc1 < _loc2.length; ++_loc1)
_loc4 = _loc4 + _loc2[_loc1].charAt(_loc3);
_loc4 = unescape(_loc4);
var _loc8 = "";
for (var _loc3 = 0; _loc3 < _loc4.length; ++_loc3) {
if (_loc4.charAt(_loc3) == "^") {
_loc8 = _loc8 + "0";
continue;
}
_loc8 = _loc8 + _loc4.charAt(_loc3);
}
return _loc8;
}
$.get("http://www.xiami.com/widget/xml-single/uid/0/sid/" + songId, function (doc) {
var dom = $(doc);
callback(decoder(dom.find('location').text().replace(/<location><!\[CDATA\[(.*)\]\]><\/location>/, '$1')));
});
}
//For nodejs .. npm install dataStream
function xiami (songId, callback) {
function decoder (sourceString) {
var _loc9 = Number(sourceString[0]);
var _loc7 = sourceString.substr(1);
var _loc5 = Math.floor(_loc7.length / _loc9);
var _loc6 = _loc7.length % _loc9;
var _loc2 = new Array();
for (var _loc3 = 0; _loc3 < _loc6; ++_loc3) {
if (_loc2[_loc3] == undefined) _loc2[_loc3] = "";
_loc2[_loc3] = _loc7.substr((_loc5 + 1) * _loc3, _loc5 + 1);
}
for (var _loc3 = _loc6; _loc3 < _loc9; ++_loc3)
_loc2[_loc3] = _loc7.substr(_loc5 * (_loc3 - _loc6) + (_loc5 + 1) * _loc6, _loc5);
var _loc4 = "";
for (var _loc3 = 0; _loc3 < _loc2[0].length; ++_loc3)
for (var _loc1 = 0; _loc1 < _loc2.length; ++_loc1)
_loc4 = _loc4 + _loc2[_loc1].charAt(_loc3);
_loc4 = unescape(_loc4);
var _loc8 = "";
for (var _loc3 = 0; _loc3 < _loc4.length; ++_loc3) {
if (_loc4.charAt(_loc3) == "^") {
_loc8 = _loc8 + "0";
continue;
}
_loc8 = _loc8 + _loc4.charAt(_loc3);
}
return _loc8;
}
var url = require('url');
var http = require('http');
var dataStream = require('dataStream');
var stream = new dataStream;
var req = http.get(url.parse("http://www.xiami.com/widget/xml-single/uid/0/sid/" + songId), function (res) {
res.pipe(stream).on('complate', function () {
var dom = stream.body().toString();
callback(decoder(dom.match(/(.*)<location><!\[CDATA\[(.*)\]\]><\/location>(.*)/)[0].replace(/<location><!\[CDATA\[(.*)\]\]><\/location>/, '$1')));
});
});
}
xiami('1770711707', function (mp3Address) {
console.log(mp3Address); // http://f3.xiami.net/4/131/59831/485390/14_1770711707_2980782.mp3
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment