From eaa13c8cefd3074dedde0e79bad24c5510029b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E5=8D=A1=E7=90=B3?= Date: Fri, 13 Apr 2018 22:49:21 +0800 Subject: [PATCH] add ncm user playlist --- README.md | 1 + docs/README.md | 8 +++++ index.js | 1 + routes/ncm/userplaylist.js | 66 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 routes/ncm/userplaylist.js diff --git a/README.md b/README.md index 8df1a4acea..fdf1f47306 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇 - 博主 - 网易云音乐 - 歌单 + - 用户全部歌单 - 掘金 - 分类 - 自如 diff --git a/docs/README.md b/docs/README.md index 88429fdbf9..8834119c4c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -172,6 +172,14 @@ s 参数: id,歌单 id,可在歌单页 URL 中找到 +#### 用户全部歌单 + +举例: https://rss.prprpr.me/ncm/user/playlist/45441555 + +路由: `/ncm/user/playlist/:uid` + +参数: uid,用户 uid,可在用户主页 URL 中找到 + ### 掘金 #### 分类 diff --git a/index.js b/index.js index 7dac7ca404..66062dea96 100644 --- a/index.js +++ b/index.js @@ -20,6 +20,7 @@ app.get('/weibo/user/:uid', require('./routes/weibo/user')); // 网易云音乐 app.get('/ncm/playlist/:id', require('./routes/ncm/playlist')); +app.get('/ncm/user/playlist/:uid', require('./routes/ncm/userplaylist')); // 掘金 app.get('/juejin/category/:category', require('./routes/juejin/category')); diff --git a/routes/ncm/userplaylist.js b/routes/ncm/userplaylist.js new file mode 100644 index 0000000000..d1b2fe7013 --- /dev/null +++ b/routes/ncm/userplaylist.js @@ -0,0 +1,66 @@ +const request = require('request'); +const art = require('art-template'); +const path = require('path'); +const base = require('../base'); +const mix = require('../../utils/mix'); + +module.exports = (req, res) => { + const uid = req.params.uid; + + base({ + req: req, + res: res, + getHTML: (callback) => { + request.post( + { + url: 'http://music.163.com/api/user/playlist', + headers: { + 'User-Agent': mix.ua, + Referer: 'https://music.163.com/' + }, + form: { + uid: uid, + limit: 1000, + offset: 0 + } + }, + (err, httpResponse, body) => { + let data; + try { + data = JSON.parse(body); + } catch (e) { + data = {}; + } + const playlist = data.playlist || [{ creator: {} }]; + + const creator = playlist[0].creator; + + const { nickname, signature } = creator; + + const html = art( + path.resolve(__dirname, '../../views/rss.art'), + { + title: `${nickname} 的所有歌单`, + link: `http://music.163.com/user/home?id=${uid}`, + description: signature, + lastBuildDate: new Date().toUTCString(), + item: + playlist[0].id && + playlist.map((pl) => ({ + title: pl.name, + description: pl.description, + pubDate: new Date( + pl.createTime + ).toUTCString(), + link: `http://music.163.com/playlist?id=${ + pl.id + }` + })) + } + ); + callback(html); + } + ); + } + }); +};