UNPKG

rsshub

Version:
84 lines (79 loc) 2.78 kB
import { Route } from '@/types'; import ofetch from '@/utils/ofetch'; import { load } from 'cheerio'; import { parseDate } from '@/utils/parse-date'; import timezone from '@/utils/timezone'; export const route: Route = { path: '/topic/:id', categories: ['anime'], example: '/bangumi.tv/topic/367032', parameters: { id: '话题 id, 在话题页面地址栏查看' }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['bgm.tv/group/topic/:id'], }, ], name: '小组话题的新回复', maintainers: ['ylc395'], handler, }; async function handler(ctx) { // bangumi.tv未提供获取小组话题的API,因此仍需要通过抓取网页来获取 const topicID = ctx.req.param('id'); const link = `https://bgm.tv/group/topic/${topicID}`; const html = await ofetch(link); const $ = load(html); const title = $('#pageHeader h1').text(); const latestReplies = $('.row_reply') .toArray() .map((el) => { const $el = $(el); return { id: $el.attr('id'), author: $el.find('.userInfo .l').text(), content: $el.find('.reply_content .message').html(), date: $el.children().first().find('small').children().remove().end().text().slice(3), }; }); const latestSubReplies = $('.sub_reply_bg') .toArray() .map((el) => { const $el = $(el); return { id: $el.attr('id'), author: $el.find('.userName .l').text(), content: $el.find('.cmt_sub_content').html(), date: $el.children().first().find('small').children().remove().end().text().slice(3), }; }); const finalLatestReplies = [...latestReplies, ...latestSubReplies].toSorted((a, b) => (a.id < b.id ? 1 : -1)); const postTopic = { title, description: $('.postTopic .topic_content').html(), author: $('.postTopic .inner strong a').first().text(), pubDate: timezone(parseDate($('.postTopic .re_info small').text().trim().slice(5)), +8), link, }; return { title: `${title}的最新回复`, link, item: [ ...finalLatestReplies.map((c) => ({ title: `${c.author} 回复了小组话题《${title}》`, description: c.content, pubDate: timezone(parseDate(c.date), +8), author: c.author, link: `${link}#${c.id}`, })), postTopic, ], }; }