UNPKG

rsshub

Version:
89 lines (76 loc) 2.77 kB
import { Route, Data, DataItem } from '@/types'; import ofetch from '@/utils/ofetch'; import * as cheerio from 'cheerio'; import cache from '@/utils/cache'; const ROOT_URL = 'https://api-docs.deepseek.com/zh-cn'; const NEWS_LIST_SELECTOR = 'ul.menu__list > li:nth-child(2) ul > li.theme-doc-sidebar-item-link'; const ARTICLE_CONTENT_SELECTOR = '.theme-doc-markdown > div > div'; const ARTICLE_TITLE_SELECTOR = ARTICLE_CONTENT_SELECTOR + ' > h1'; // 获取消息列表 / get article list const fetchPageContent = async (url: string) => { const response = await ofetch(url); return cheerio.load(response); }; // 提取正文内容 / extract article content const extractArticleInfo = ($article: cheerio.Root, pageURL: string) => { const contentElement = $article(ARTICLE_CONTENT_SELECTOR); const title = $article(ARTICLE_TITLE_SELECTOR).text(); $article(ARTICLE_TITLE_SELECTOR).remove(); // 移除标题,避免重复 / remove title to avoid duplication const content = contentElement.html(); return { title, content, pageURL }; }; const parseDateString = (dateString: string) => { const pubDate = new Date(dateString); return pubDate.toUTCString(); }; // 创建消息 / create article const createDataItem = (item: cheerio.Element, $: cheerio.Root): Promise<DataItem> => { const $item = $(item); const link = $item.find('a').attr('href'); const dateString = $item.find('a').text().split(' ').at(-1); const pageURL = new URL(link || '', ROOT_URL).href; return cache.tryGet(pageURL, async () => { const $article = await fetchPageContent(pageURL); const { title, content } = extractArticleInfo($article, pageURL); const pubDate = parseDateString(dateString); return { title, link: pageURL, pubDate, description: content || undefined, }; }); }; const handler = async (): Promise<Data> => { const $ = await fetchPageContent(ROOT_URL); const newsList = $(NEWS_LIST_SELECTOR); const items: DataItem[] = await Promise.all(newsList.toArray().map((li) => createDataItem(li, $))); return { title: 'DeepSeek 新闻', link: ROOT_URL, item: items, allowEmpty: true, }; }; export const route: Route = { path: '/news', categories: ['programming'], example: '/deepseek/news', features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, }, radar: [ { source: ['api-docs.deepseek.com'], target: '/news', }, ], name: '新闻', maintainers: ['1837634311'], handler, };