From 0e93b51f6e7a741d0e03ba69cd75a260d87deef2 Mon Sep 17 00:00:00 2001 From: Ethan Shen Date: Tue, 5 Oct 2021 17:29:05 +0800 Subject: [PATCH] feat(route): add 2047 (#8302) --- docs/bbs.md | 60 +++++++++++++++++++++++++++++++++++++++ lib/v2/2047/index.js | 55 +++++++++++++++++++++++++++++++++++ lib/v2/2047/maintainer.js | 3 ++ lib/v2/2047/radar.js | 13 +++++++++ lib/v2/2047/router.js | 3 ++ 5 files changed, 134 insertions(+) create mode 100644 lib/v2/2047/index.js create mode 100644 lib/v2/2047/maintainer.js create mode 100644 lib/v2/2047/radar.js create mode 100644 lib/v2/2047/router.js diff --git a/docs/bbs.md b/docs/bbs.md index 98aa5d32e0..09452ca0d5 100644 --- a/docs/bbs.md +++ b/docs/bbs.md @@ -4,6 +4,66 @@ pageClass: routes # 论坛 +## 2047 + +### 分类 + + + +分类 + +| 首页 | 时政 | 民生 | 科技 | 休闲 | +| ---- | -------- | ----- | ---- | ------- | +| | opinions | daily | stem | culture | + +| 欢乐 | 江湖 | 站务 | 水 | +| -------- | ----- | ------ | ----- | +| tainment | inner | office | water | + +| 时事 | 观点 | 政治 | 人物 | 司法实践 | +| ---- | ---- | ---- | ---- | -------- | +| 2 | 1 | 31 | 10 | 49 | + +| 香港 | 历史 | 疫情 | 新疆 | 假设 | +| ---- | ---- | ---- | ---- | ---- | +| 47 | 85 | 44 | 32 | 22 | + +| 经济 | 生活 | 留学移民 | 情感 | 教育 | +| ---- | ---- | -------- | ---- | ---- | +| 65 | 41 | 14 | 23 | 66 | + +| 技术 | 翻墙 | 加密技术 | 哲学 | 阅读 | +| ---- | ---- | -------- | ---- | ---- | +| 3 | 18 | 24 | 34 | 6 | + +| 音乐 | 影视 | 炉边诗社 | 博客 | 美食 | +| ---- | ---- | -------- | ---- | ---- | +| 7 | 11 | 46 | 8 | 43 | + +| 文学 | ACG | 欢乐 | 公告 | 分享发现 | +| ---- | --- | ---- | ---- | -------- | +| 84 | 30 | 17 | 67 | 5 | + +| 分享原创 | 2049 | 宗教 | 语言 | 人文 | +| -------- | ---- | ---- | ---- | ---- | +| 12 | 16 | 42 | 56 | 76 | + +| 站务 | 国防 | 工会 | 水 | 江湖 | +| ---- | ---- | ---- | -- | ---- | +| 13 | 15 | 29 | 4 | 21 | + +| 吐槽 | 树洞 | 标本 | +| ---- | ---- | ---- | +| 9 | 19 | 20 | + +排序 + +| 即时 | 新帖 | 综合 | 精华 | 高赞 | 观看 | +| ---- | ---- | ---- | ----- | ---- | ---- | +| t_u | t_c | t_hn | t_hn2 | amv | vc | + + + ## A 岛匿名版 ### 串 diff --git a/lib/v2/2047/index.js b/lib/v2/2047/index.js new file mode 100644 index 0000000000..b196e45cda --- /dev/null +++ b/lib/v2/2047/index.js @@ -0,0 +1,55 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const category = ctx.params.category ?? ''; + const sort = ctx.params.sort ?? ''; + + const rootUrl = 'https://2047.name'; + const currentUrl = `${rootUrl}${category ? `/c/${category}` : ''}${sort ? `?sortby=${sort}` : ''}`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $('.threadlist_title') + .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 50) + .map((_, item) => { + item = $(item); + + return { + title: item.text(), + link: `${rootUrl}${item.attr('href')}`, + }; + }) + .get(); + + const items = await Promise.all( + list.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + item.description = content('.post_content').eq(0).html(); + item.author = content('meta[property="og:article:author"]').attr('content'); + item.pubDate = parseDate(content('meta[property="og:article:published_time"]').attr('content')); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/2047/maintainer.js b/lib/v2/2047/maintainer.js new file mode 100644 index 0000000000..1b0a5930b8 --- /dev/null +++ b/lib/v2/2047/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/:category?/:sort?': ['nczitzk'], +}; diff --git a/lib/v2/2047/radar.js b/lib/v2/2047/radar.js new file mode 100644 index 0000000000..4aa3bb1881 --- /dev/null +++ b/lib/v2/2047/radar.js @@ -0,0 +1,13 @@ +module.exports = { + '2047.name': { + _name: '2047', + '.': [ + { + title: '分类', + docs: 'https://docs.rsshub.app/bbs.html#2047-fen-lei', + source: ['/'], + target: '/2047/:category?/:sort?', + }, + ], + }, +}; diff --git a/lib/v2/2047/router.js b/lib/v2/2047/router.js new file mode 100644 index 0000000000..6456aa7307 --- /dev/null +++ b/lib/v2/2047/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/:category?/:sort?', require('./index')); +};