Skip to content

Commit

Permalink
feat(route): sorrycc.com (DIYgod#17261)
Browse files Browse the repository at this point in the history
* feat(route): 云谦的博客

* parseDate

* change the route name
  • Loading branch information
KarasuShin authored Oct 23, 2024
1 parent 44ce93e commit bc020b6
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ export type Config = {
skeb: {
bearerToken?: string;
};
sorrycc: {
cookie?: string;
};
spotify: {
clientId?: string;
clientSecret?: string;
Expand Down Expand Up @@ -663,6 +666,9 @@ const calculateValue = () => {
skeb: {
bearerToken: envs.SKEB_BEARER_TOKEN,
},
sorrycc: {
cookie: envs.SORRYCC_COOKIES,
},
spotify: {
clientId: envs.SPOTIFY_CLIENT_ID,
clientSecret: envs.SPOTIFY_CLIENT_SECRET,
Expand Down
85 changes: 85 additions & 0 deletions lib/routes/sorrycc/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
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 published = 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,
published,
updated,
};
})) as unknown as DataItem;
}
return {
title,
description: item.content.rendered,
link,
published,
updated,
} as DataItem;
})
);

return {
title: '文章',
item: items,
link: host,
image: `${host}/wp-content/uploads/2024/01/cropped-CC-1-32x32.png`,
};
}
6 changes: 6 additions & 0 deletions lib/routes/sorrycc/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: '云谦的博客',
url: 'sorrycc.com',
};
13 changes: 13 additions & 0 deletions lib/routes/sorrycc/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export interface Post {
id: number;
content: {
rendered: string;
};
date_gmt: string;
modified_gmt: string;
link: string;
categories: number[];
title: {
rendered: string;
};
}

0 comments on commit bc020b6

Please sign in to comment.