rsshub
Version:
Make RSS Great Again!
66 lines (58 loc) • 2.29 kB
text/typescript
import { Route } from '@/types';
import got from '@/utils/got';
const linkUrl = 'https://book.douban.com/latest';
const baseUrl = 'https://m.douban.com/rexxar/api/v2/subject_collection';
const params = 'items?start=0&count=10&mode=collection&for_mobile=1';
export const route: Route = {
path: '/book/latest/:type?',
categories: ['social-media'],
example: '/douban/book/latest/fiction',
parameters: { type: '专题分类,可选,默认为 `all`' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: '新书速递',
maintainers: ['fengkx', 'lyqluis'],
description: `| 文学 | 小说 | 历史文化 | 社会纪实 | 科学新知 | 艺术设计 | 商业经管 | 绘本漫画 |
| ------------ | ------- | -------- | --------- | -------- | -------- | -------- | -------- |
| prose_poetry | fiction | history | biography | science | art | business | comics |`,
handler,
};
const SUBCATS = {
all: '全部',
prose_poetry: '文学',
fiction: '小说',
history: '历史文化',
biography: '社会纪实',
science: '科学新知',
art: '艺术设计',
business: '商业经管',
comics: '绘本漫画',
};
async function handler(ctx) {
const type = ctx.req.param('type') ?? 'all';
const subUrl = `new_book_${type}`;
const url = `${baseUrl}/${subUrl}/${params}`;
const res = await got.get(url);
const items = res.data.items;
return {
title: `豆瓣新书速递${type === 'all' ? '' : '-' + SUBCATS[type]}`,
link: `${linkUrl}${type === 'all' ? '' : '?subcat=' + SUBCATS[type]}`,
item: items.map(({ title, url, card_subtitle, cards, pic, rating, null_rating_reason }) => {
const rate = rating.value ? `${rating.value}分` : null_rating_reason;
const img = `<img src="${pic.normal}">`;
const info = card_subtitle;
const description = `${img}<br>${title}<br><br>${info}<br><br>${cards[0]?.content ?? ''}<br><br>${rate}`;
return {
title,
description,
link: url,
};
}),
};
}