rsshub
Version:
Make RSS Great Again!
54 lines (46 loc) • 1.52 kB
text/typescript
import { Route } from '@/types';
import ofetch from '@/utils/ofetch';
import { parseDate } from '@/utils/parse-date';
import type { Context } from 'hono';
import { Value } from './types';
export const route: Route = {
path: '/share/:shortId',
categories: ['other'],
example: '/dingshao/share/FzFypN',
parameters: {
shortId: '频道 ID',
},
radar: [
{
source: ['www.dingshao.cn/share/:shortId'],
},
],
name: '频道',
maintainers: ['TonyRL'],
handler,
};
const baseUrl = 'https://www.dingshao.cn';
async function handler(ctx: Context) {
const { shortId } = ctx.req.param();
const response = await ofetch<Value>(`${baseUrl}/api/v2/channel/get-channel-and-recent-messages-by-short-id`, {
method: 'POST',
body: {
shortId,
},
});
const items = response.value.bundle.channelMessages.map((message) => ({
title: message.excerpt.split('\n')[0],
description: message.content,
pubDate: parseDate(message.publishedAt),
category: message.tags,
link: `${baseUrl}/channel/${response.value.channel}/${message.id}`,
}));
const channelProfile = response.value.bundle.channels.find((channel) => channel.id === response.value.channel)?.profile;
return {
title: channelProfile?.name,
description: channelProfile?.description,
link: `${baseUrl}/share/${shortId}`,
image: channelProfile?.image,
item: items,
};
}