From 2b8ec7f36c8aa59deafed5f3741e7318a125ef9b Mon Sep 17 00:00:00 2001 From: Ethan Shen Date: Sat, 27 Nov 2021 15:33:27 +0800 Subject: [PATCH] feat(route): add Uwants (#8094) Co-authored-by: DIYgod --- docs/new-media.md | 6 ++++ lib/router.js | 3 ++ lib/routes/uwants/index.js | 70 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 lib/routes/uwants/index.js diff --git a/docs/new-media.md b/docs/new-media.md index 1d40083a28..adde987a62 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -925,6 +925,12 @@ Provides all of the Thrillist articles with the specified tag. +## Uwants + +### 版塊 + + + ## VOA News ### Day in Photos diff --git a/lib/router.js b/lib/router.js index b70be1d845..1d657c8bab 100644 --- a/lib/router.js +++ b/lib/router.js @@ -4207,6 +4207,9 @@ router.get('/right/forum/:id?', lazyloadRouteHandler('./routes/right/forum')); // 香港經濟日報 router.get('/hket/:category?', lazyloadRouteHandler('./routes/hket/index')); +// Uwants +router.get('/uwants/:fid', lazyloadRouteHandler('./routes/uwants')); + // Now新聞 router.get('/now/news/rank', lazyloadRouteHandler('./routes/now/rank')); diff --git a/lib/routes/uwants/index.js b/lib/routes/uwants/index.js new file mode 100644 index 0000000000..990ccd056d --- /dev/null +++ b/lib/routes/uwants/index.js @@ -0,0 +1,70 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const timezone = require('@/utils/timezone'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const fid = ctx.params.fid; + + const rootUrl = 'https://www.uwants.com'; + const currentUrl = `${rootUrl}/archiver/?fid-${fid}.html`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $('li a') + .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 15) + .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 data = detailResponse.data + .replace(/\[(\w+)=([\w\d#]+)\]/gm, '') + .replace(/\[url=(.*?)\]/gm, '') + .replace(/\[\/(color|size)\]/gm, '') + .replace(/\[\/url\]/gm, '') + .replace(/\[(\w+)\]/gm, '<$1>') + .replace(/\[\/(\w+)\]/gm, ''); + + const content = cheerio.load(data); + + const cite = content('cite'); + item.author = cite.eq(0).text(); + const firstAuthorParent = cite.eq(0).parent(); + + item.description = content('.archiver_post').html(); + + cite.remove(); + + item.link = `${rootUrl}/viewthread.php?tid=${item.link.match(/tid-(\d+)\.html/)[1]}`; + item.pubDate = timezone(parseDate(firstAuthorParent.text().trim(), 'YYYY-M-D hh:mm A'), +8); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `${$('h1 a').text().replace('查看完整版本: ', '')} - Uwants.com`, + link: `${rootUrl}/forumdisplay.php?fid=${fid}`, + item: items, + }; +};