UNPKG

rsshub

Version:
86 lines (79 loc) 3.01 kB
import { type DataItem, ViewType, type Data, type Route } from '@/types'; import type { Context } from 'hono'; import ofetch from '@/utils/ofetch'; import { load } from 'cheerio'; import cache from '@/utils/cache'; import type { Post } from './types'; import { config } from '@/config'; import { parseDate } from '@/utils/parse-date'; const WORDPRESS_HASH = 'f05fca638390aed897fbe3c2fff03000'; export const route: Route = { name: '文章', categories: ['blog'], path: '/', example: '/sorrycc', radar: [ { source: ['sorrycc.com'], }, ], handler, maintainers: ['KarasuShin'], view: ViewType.Articles, features: { supportRadar: true, requireConfig: [ { name: 'SORRYCC_COOKIES', description: `登录用户的Cookie,获取方式:\n1. 登录sorrycc.com\n2. 打开浏览器开发者工具,切换到 Application 面板\n3. 点击侧边栏中的Storage -> Cookies -> https://sorrycc.com\n4. 复制 Cookie 中的 wordpress_logged_in_${WORDPRESS_HASH} 值`, optional: true, }, ], }, description: '云谦的博客,部分内容存在权限校验,访问完整内容请部署RSSHub私有实例并配置授权信息', }; async function handler(ctx: Context): Promise<Data> { const host = 'https://sorrycc.com'; const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')!, 10) : 100; const cookie = config.sorrycc.cookie; const data = await ofetch<Post[]>(`${host}/wp-json/wp/v2/posts?per_page=${limit}`); const items: DataItem[] = await Promise.all( data.map(async (item) => { const title = item.title.rendered; const link = item.link; const pubDate = parseDate(item.date_gmt); const updated = parseDate(item.modified_gmt); if (item.categories.includes(7) && cookie) { return (await cache.tryGet(link, async () => { const article = await ofetch(link, { headers: { Cookie: `wordpress_logged_in_${WORDPRESS_HASH}=${cookie}`, }, }); const $article = load(article); const description = $article('.content').html(); return { title, description, link, pubDate, updated, }; })) as unknown as DataItem; } return { title, description: item.content.rendered, link, pubDate, updated, } as DataItem; }) ); return { title: '文章', item: items, link: host, image: `${host}/wp-content/uploads/2024/01/cropped-CC-1-32x32.png`, }; }