From 39c3d5f277e401ebbb4fdc8d43c5156697ab3f30 Mon Sep 17 00:00:00 2001 From: Cyang39 Date: Mon, 22 May 2023 20:40:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20add=20comicat=20=E6=BC=AB?= =?UTF-8?q?=E5=96=B5=E5=8A=A8=E6=BC=ABBT=E4=B8=8B=E8=BD=BD=20(#12545)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add comicat 漫喵动漫BT下载 * fix(route): comicat 漫喵动漫BT下载 * fix(route): comicat 漫喵动漫BT下载 typo * fix(route): comicat 漫喵动漫BT下载 fix wrong items * fix(route): comicat 漫喵动漫BT下载 fix radar * fix(route): comicat 漫喵动漫BT下载 fix docs uri * fix(route): comicat 漫喵动漫BT下载 修改了 docs 路径 * fix(route): comicat 漫喵动漫BT下载 * fix(route): comicat 漫喵动漫BT下载 fix radar * fix(route): comicat 漫喵动漫BT下载 * Update lib/v2/comicat/maintainer.js Co-authored-by: Tony * Update docs/anime.md Co-authored-by: Tony * Update lib/v2/comicat/search.js Co-authored-by: Tony * Update lib/v2/comicat/search.js use enclosure in item * Update lib/v2/comicat/search.js fix doc example and move item puDate into item level * Update lib/v2/comicat/search.js --------- --- docs/anime.md | 6 ++++++ lib/v2/comicat/maintainer.js | 3 +++ lib/v2/comicat/radar.js | 11 ++++++++++ lib/v2/comicat/router.js | 3 +++ lib/v2/comicat/search.js | 42 ++++++++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+) create mode 100644 lib/v2/comicat/maintainer.js create mode 100644 lib/v2/comicat/radar.js create mode 100644 lib/v2/comicat/router.js create mode 100644 lib/v2/comicat/search.js diff --git a/docs/anime.md b/docs/anime.md index 0f08540cf..e0a0e7ac7 100644 --- a/docs/anime.md +++ b/docs/anime.md @@ -191,6 +191,12 @@ pageClass: routes +## Comicat + +### 搜索关键词 + + + ## CnGal ### 每周速报 diff --git a/lib/v2/comicat/maintainer.js b/lib/v2/comicat/maintainer.js new file mode 100644 index 000000000..b32886472 --- /dev/null +++ b/lib/v2/comicat/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/search/:keyword': ['Cyang39'], +}; diff --git a/lib/v2/comicat/radar.js b/lib/v2/comicat/radar.js new file mode 100644 index 000000000..d6d348263 --- /dev/null +++ b/lib/v2/comicat/radar.js @@ -0,0 +1,11 @@ +module.exports = { + 'comicat.org': { + _name: 'Comicat', + '.': [ + { + title: '搜索关键词', + docs: 'https://docs.rsshub.app/anime.html#comicat', + }, + ], + }, +}; diff --git a/lib/v2/comicat/router.js b/lib/v2/comicat/router.js new file mode 100644 index 000000000..5a0a66fe1 --- /dev/null +++ b/lib/v2/comicat/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/search/:keyword', require('./search')); +}; diff --git a/lib/v2/comicat/search.js b/lib/v2/comicat/search.js new file mode 100644 index 000000000..9b0b43d5c --- /dev/null +++ b/lib/v2/comicat/search.js @@ -0,0 +1,42 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +const baseUrl = 'https://comicat.org'; + +module.exports = async (ctx) => { + const keyword = ctx.params.keyword; + const { data: response } = await got(`${baseUrl}/search.php?keyword=${encodeURIComponent(keyword)}`); + const $ = cheerio.load(response); + const list = $('#listTable tbody > tr') + .toArray() + .map((item) => ({ + title: $(item).find('td:nth-child(3)').text().trim(), + link: `${baseUrl}/${$(item).find('td:nth-child(3) a').attr('href')}`, + category: $(item).find('td:nth-child(2)').text().trim(), + author: $(item).find('td:nth-child(8)').text().trim(), + })); + + const items = await Promise.all( + list.map((item) => + ctx.cache.tryGet(item.link, async () => { + const { data: response } = await got(item.link); + const $ = cheerio.load(response); + + item.pubDate = parseDate($('div.main > div.slayout > div > div.c1 > div:nth-child(1) > div > p:nth-child(4)').text().split('发布时间: ')[1]); + const marginLink = `magnet:?xt=urn:btih:${$('#text_hash_id').text().split(',特征码:')[1]}`.trim(); + item.enclosure_url = marginLink; + item.enclosure_type = 'application/x-bittorrent'; + item.description = $('#btm > div.main > div.slayout > div > div.c2 > div:nth-child(1) > div.intro').html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `Comicat - ${keyword}`, + link: `${baseUrl}/search.php?keyword=${encodeURIComponent(keyword)}`, + item: items + }; +};