UNPKG

rsshub

Version:
76 lines (70 loc) 2.6 kB
import { Route } from '@/types'; import got from '@/utils/got'; import { parseDate } from '@/utils/parse-date'; import { config } from '@/config'; import { load } from 'cheerio'; export const route: Route = { path: '/discussions/:modelId', categories: ['program-update'], example: '/civitai/discussions/4384', parameters: { modelId: 'N' }, features: { requireConfig: [ { name: 'CIVITAI_COOKIE', description: '', }, ], requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, nsfw: true, }, radar: [ { source: ['civitai.com/models/:modelId'], }, ], name: 'Model discussions', maintainers: ['DIYgod'], handler, description: `::: warning Need to configure \`CIVITAI_COOKIE\` to obtain image information of NSFW models. :::`, }; async function handler(ctx) { const params = ctx.req.param(); const modelId = Number.parseInt(params.modelId); const { data } = await got( `https://civitai.com/api/trpc/review.getAll,comment.getAll?batch=1&input=${encodeURIComponent( `{"0":{"json":{"modelId":${modelId},"limit":12,"sort":"newest","cursor":null},"meta":{"values":{"cursor":["undefined"]}}},"1":{"json":{"modelId":${modelId},"limit":12,"sort":"newest","cursor":null},"meta":{"values":{"cursor":["undefined"]}}}}` )}`, { headers: { Referer: `https://civitai.com/${modelId}`, cookie: config.civitai.cookie, }, } ); const items = [...data[0].result.data.json.reviews, ...data[1].result.data.json.comments] .map((item) => item.images?.length || item.content ? { title: item.content ? load(item.content).text() : 'Image', link: `https://civitai.com/models/${params.modelId}`, description: `${(item.images || []).map((image) => `<image src="https://imagecache.civitai.com/xG1nkqKTMzGDvpLrqFT7WA/${image.url}/width=${image.width}/${image.id}">`).join('\n')}${item.content}`, pubDate: parseDate(item.createdAt), author: item.user?.username, guid: item.id, } : null ) .filter(Boolean); return { title: `Civitai model ${params.modelId} discussions`, link: `https://civitai.com/`, item: items, }; }