From ea809084f42afffbe5ef93c06bbf6b8fe9fdc728 Mon Sep 17 00:00:00 2001 From: Fallenhh Date: Thu, 9 May 2019 17:49:57 +0800 Subject: [PATCH] feat: Add SoundCloud (#2080) * feat: Add SoundCloud * Update utils.js --- docs/multimedia.md | 4 +++ lib/router.js | 3 ++ lib/routes/soundcloud/tracks.js | 28 +++++++++++++++++ lib/routes/soundcloud/utils.js | 56 +++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 lib/routes/soundcloud/tracks.js create mode 100644 lib/routes/soundcloud/utils.js diff --git a/docs/multimedia.md b/docs/multimedia.md index 04cc3903cd..61fa09e6e9 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -197,3 +197,7 @@ | 全部 | 蓝光 | 1080P | 720P | 3D | WEB-DL | | ---- | ------ | ----- | ---- | --- | ------ | | 留空 | bluray | 1080p | 720p | 3d | webdl | + +## SoundCloud + + diff --git a/lib/router.js b/lib/router.js index 16a67e404c..1cc82656f8 100755 --- a/lib/router.js +++ b/lib/router.js @@ -1328,6 +1328,9 @@ router.get('/asahichinese-f/:category', require('./routes/asahichinese-f/index') // 7x24小时快讯 router.get('/fx678/kx', require('./routes/fx678/kx')); +// SoundCloud +router.get('/soundcloud/tracks/:user', require('./routes/soundcloud/tracks')); + // dilidili router.get('/dilidili/fanju/:id', require('./routes/dilidili/fanju')); diff --git a/lib/routes/soundcloud/tracks.js b/lib/routes/soundcloud/tracks.js new file mode 100644 index 0000000000..4a052dd1a6 --- /dev/null +++ b/lib/routes/soundcloud/tracks.js @@ -0,0 +1,28 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); +const util = require('./utils'); + +module.exports = async (ctx) => { + const user = ctx.params.user; + + const response = await axios({ + method: 'get', + url: `https://soundcloud.com/${user}/tracks`, + headers: { + Referer: `https://soundcloud.com/${user}/tracks`, + }, + }); + + const data = response.data; + + const $ = cheerio.load(data, { xmlMode: true }); + const list = $('body article.audible').get(); + const result = await util.ProcessFeed(list, ctx.cache); + + ctx.state.data = { + title: $('title').text(), + link: `https://soundcloud.com/${user}/tracks`, + description: $('meta[name="description"]').attr('content') || $('title').text(), + item: result, + }; +}; diff --git a/lib/routes/soundcloud/utils.js b/lib/routes/soundcloud/utils.js new file mode 100644 index 0000000000..bd0a1a929b --- /dev/null +++ b/lib/routes/soundcloud/utils.js @@ -0,0 +1,56 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); +const url = require('url'); + +async function load(link) { + const response = await axios.get(link); + const $ = cheerio.load(response.data, { xmlMode: true }); + let result = ''; + const tmp = $('noscript article p'); + result += `

${tmp.html()}

`; + const embed_url = $('noscript article div') + .first() + .children() + .first() + .attr('content'); + result += `