RSSHub/lib/routes/dedao/knowledge.ts

90 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import path from 'node:path';
import type { Route } from '@/types';
import got from '@/utils/got';
import { parseDate } from '@/utils/parse-date';
import { art } from '@/utils/render';
export const route: Route = {
path: '/knowledge/:topic?/:type?',
categories: ['new-media'],
example: '/dedao/knowledge',
parameters: { topic: '话题 id可在对应话题页 URL 中找到', type: '分享类型,`true` 指精选,`false` 指最新,默认为精选' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['dedao.cn/knowledge/topic/:topic', 'dedao.cn/knowledge', 'dedao.cn/'],
},
],
name: '知识城邦',
maintainers: ['nczitzk'],
handler,
};
async function handler(ctx) {
const topic = ctx.req.param('topic') ?? '';
const type = /t|y/i.test(ctx.req.param('type') ?? 'true');
const count = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 100;
const rootUrl = 'https://www.dedao.cn';
const currentUrl = `${rootUrl}/knowledge${topic === '' ? '' : '/topic/' + topic}`;
const apiUrl = `${rootUrl}/pc/ledgers/${topic === '' ? 'notes/friends_timeline' : 'topic/notes/list'}`;
const detailUrl = `${rootUrl}/pc/ledgers/topic/detail`;
let title = '',
description = '';
if (topic !== '') {
const detailResponse = await got({
method: 'post',
url: detailUrl,
json: {
incr_view_count: false,
topic_id_hazy: topic,
},
});
title = detailResponse.data.c.name;
description = detailResponse.data.c.intro;
}
const response = await got({
method: 'post',
url: apiUrl,
json: {
count,
load_chain: true,
is_elected: type,
page_id: 0,
topic_id_hazy: topic,
version: 2,
},
});
const items = (topic === '' ? response.data.c.notes : response.data.c.note_detail_list).map((item) => ({
title: item.f_part.note,
author: item.f_part.nick_name,
link: `${rootUrl}/knowledge/note/${item.f_part.note_id_hazy}`,
pubDate: parseDate(item.f_part.time_desc, 'MM-DD'),
description: art(path.join(__dirname, 'templates/knowledge.art'), {
rootUrl,
f_part: item.f_part,
s_part: item.s_part,
}),
}));
return {
title: `得到 - 知识城邦${title === '' ? '' : ' - ' + title}`,
link: currentUrl,
item: items,
description,
};
}