From a86d033ad18dbcedde203af4bbd4a4e4c0a09e4c Mon Sep 17 00:00:00 2001 From: hoilc Date: Fri, 31 Jan 2020 17:31:16 +0800 Subject: [PATCH] feat: add MQube (#3798) --- assets/radar-rules.js | 29 +++++++++++++++++++++++++++++ docs/multimedia.md | 18 ++++++++++++++++++ lib/router.js | 6 ++++++ lib/routes/mqube/latest.js | 21 +++++++++++++++++++++ lib/routes/mqube/tag.js | 23 +++++++++++++++++++++++ lib/routes/mqube/top.js | 21 +++++++++++++++++++++ lib/routes/mqube/user.js | 25 +++++++++++++++++++++++++ 7 files changed, 143 insertions(+) create mode 100644 lib/routes/mqube/latest.js create mode 100644 lib/routes/mqube/tag.js create mode 100644 lib/routes/mqube/top.js create mode 100644 lib/routes/mqube/user.js diff --git a/assets/radar-rules.js b/assets/radar-rules.js index cb2fd0d1f7..d4f1fe8067 100644 --- a/assets/radar-rules.js +++ b/assets/radar-rules.js @@ -978,6 +978,35 @@ }, ], }, + 'mqube.net': { + _name: 'MQube', + www: [ + { + title: '全站最近更新', + docs: 'https://docs.rsshub.app/multimedia.html#mqube', + source: '/', + target: '/mqube/latest', + }, + { + title: '全站每日排行', + docs: 'https://docs.rsshub.app/multimedia.html#mqube', + source: '/', + target: '/mqube/top', + }, + { + title: '个人最近更新', + docs: 'https://docs.rsshub.app/multimedia.html#mqube', + source: '/user/:user', + target: '/mqube/user/:user', + }, + { + title: '标签最近更新', + docs: 'https://docs.rsshub.app/multimedia.html#mqube', + source: '/search/tag/:tag', + target: '/mqube/tag/:tag', + }, + ], + }, 'nikkei.com': { _name: '日本経済新聞', www: [ diff --git a/docs/multimedia.md b/docs/multimedia.md index 52f57757f1..b94fbf7d34 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -145,6 +145,24 @@ pageClass: routes +## MQube + +### 全站最近更新 + + + +### 全站每日排行 + + + +### 个人最近更新 + + + +### 标签最近更新 + + + ## Nyaa ### 搜索结果 diff --git a/lib/router.js b/lib/router.js index 60b8385342..f0fda21373 100644 --- a/lib/router.js +++ b/lib/router.js @@ -2166,4 +2166,10 @@ router.get('/coronavirus/nhc', require('./routes/coronavirus/nhc')); // 日本経済新聞 router.get('/nikkei/index', require('./routes/nikkei/index')); +// MQube +router.get('/mqube/user/:user', require('./routes/mqube/user')); +router.get('/mqube/tag/:tag', require('./routes/mqube/tag')); +router.get('/mqube/latest', require('./routes/mqube/latest')); +router.get('/mqube/top', require('./routes/mqube/top')); + module.exports = router; diff --git a/lib/routes/mqube/latest.js b/lib/routes/mqube/latest.js new file mode 100644 index 0000000000..bb0b2b6374 --- /dev/null +++ b/lib/routes/mqube/latest.js @@ -0,0 +1,21 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const url = 'https://mqube.net/'; + + const response = await got.get(url); + + const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || []; + + ctx.state.data = { + title: `MQube 新着`, + link: url, + item: list.map((item) => ({ + title: item.title, + author: item.user.name, + description: `

${item.description.replace(/\n/g, '
')}`, + pubDate: new Date(item.created_at), + link: `https://mqube.net/play/${item.code}`, + })), + }; +}; diff --git a/lib/routes/mqube/tag.js b/lib/routes/mqube/tag.js new file mode 100644 index 0000000000..8f05744548 --- /dev/null +++ b/lib/routes/mqube/tag.js @@ -0,0 +1,23 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const tag = ctx.params.tag; + + const url = `https://mqube.net/search/tag/${encodeURIComponent(tag)}`; + + const response = await got.get(url); + + const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || []; + + ctx.state.data = { + title: `MQube - ${tag}`, + link: url, + item: list.map((item) => ({ + title: item.title, + author: item.user.name, + description: `

${item.description.replace(/\n/g, '
')}`, + pubDate: new Date(item.created_at), + link: `https://mqube.net/play/${item.code}`, + })), + }; +}; diff --git a/lib/routes/mqube/top.js b/lib/routes/mqube/top.js new file mode 100644 index 0000000000..b9742fabaf --- /dev/null +++ b/lib/routes/mqube/top.js @@ -0,0 +1,21 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const url = 'https://mqube.net/'; + + const response = await got.get(url); + + const list = JSON.parse(response.data.match(/gon.right_riot_item_lists=(.*?);/)[1]) || []; + + ctx.state.data = { + title: `MQube デイリーランキング`, + link: url, + item: list.map((item) => ({ + title: item.title, + author: item.user.name, + description: `

${item.description.replace(/\n/g, '
')}`, + pubDate: new Date(item.created_at), + link: `https://mqube.net/play/${item.code}`, + })), + }; +}; diff --git a/lib/routes/mqube/user.js b/lib/routes/mqube/user.js new file mode 100644 index 0000000000..e4936a4b93 --- /dev/null +++ b/lib/routes/mqube/user.js @@ -0,0 +1,25 @@ +const got = require('@/utils/got'); + +module.exports = async (ctx) => { + const user = ctx.params.user; + + const url = `https://mqube.net/user/${user}`; + + const response = await got.get(url); + + const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || []; + + const username = list[0].user.name; + + ctx.state.data = { + title: `MQube - ${username}`, + link: url, + item: list.map((item) => ({ + title: item.title, + author: item.user.name, + description: `

${item.description.replace(/\n/g, '
')}`, + pubDate: new Date(item.created_at), + link: `https://mqube.net/play/${item.code}`, + })), + }; +};