netease.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. var express = require('express');
  2. var request = require('superagent');
  3. var router = express.Router();
  4. /* GET users listing. */
  5. router.get('/', function(req, res, next) {
  6. res.header("Content-Type", "application/json;charset=utf-8");
  7. //console.log('ref:' + req.header('referer'));
  8. var id = req.query.id;
  9. var playlist_id = req.query.playlist_id;
  10. var headers = {};
  11. headers['Cookie'] = 'appver=1.5.0.75771;';
  12. headers['referer'] = 'http://music.163.com';
  13. headers['User-Agent'] = req.headers['user-agent'];
  14. var url = 'http://music.163.com/api/song/detail/?id=' + id + '&ids=%5B' + id + '%5D';
  15. if (playlist_id) {
  16. url = 'http://music.163.com/api/playlist/detail/?id=' + playlist_id;
  17. }
  18. netease_http(headers, url, next, function(data) {
  19. var songs = data.songs;
  20. songs.map(function(item) {
  21. var url = item['mp3Url'];
  22. item['sslUrl'] = url.replace('http://m', 'https://p');
  23. return item;
  24. });
  25. data.songs = songs;
  26. res.send(data)
  27. // var output = {
  28. // data: data,
  29. // status: {
  30. // code: 200,
  31. // message: ''
  32. // }
  33. // };
  34. // if (req.query.callback) {
  35. // return res.jsonp(output)
  36. // } else {
  37. // return res.send(output);
  38. // }
  39. });
  40. });
  41. function netease_http(headers, url, next, callback) {
  42. request.get(url).set(headers).end(function(err, res) {
  43. var body = {};
  44. if (res && res.text) {
  45. body = res.text;
  46. } else if (res && res.body) {
  47. body = res.body;
  48. }
  49. if (typeof body === 'string') {
  50. try {
  51. body = JSON.parse(body);
  52. } catch (e) {}
  53. }
  54. if (!err && res.statusCode == 200) {
  55. callback && callback(body);
  56. } else {
  57. var error = new Error(err);
  58. error.status = 404;
  59. next(error);
  60. }
  61. });
  62. }
  63. module.exports = router;