diff --git a/docs/README.md b/docs/README.md
index 826f3e4789..88dc366bc5 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -468,6 +468,14 @@ RSSHub 提供下列 API 接口:
+
+
+| 虚构 | 非虚构 |
+| ------- | ---------- |
+| fiction | nonfiction |
+
+
+
### Disqus
diff --git a/router.js b/router.js
index bf4ac4077a..33b549abe0 100644
--- a/router.js
+++ b/router.js
@@ -196,6 +196,7 @@ router.get('/douban/book/latest', require('./routes/douban/latest_book'));
router.get('/douban/event/hot/:locationId', require('./routes/douban/event/hot'));
router.get('/douban/commercialpress/latest', require('./routes/douban/commercialpress/latest'));
router.get('/douban/bookstore', require('./routes/douban/bookstore'));
+router.get('/douban/book/rank/:type', require('./routes/douban/book/rank'));
// 煎蛋
router.get('/jandan/:sub_model', require('./routes/jandan/pic'));
diff --git a/routes/douban/book/rank.js b/routes/douban/book/rank.js
new file mode 100644
index 0000000000..c7193f93c1
--- /dev/null
+++ b/routes/douban/book/rank.js
@@ -0,0 +1,31 @@
+const axios = require('../../../utils/axios');
+
+module.exports = async (ctx) => {
+ const { type = 'fiction' } = ctx.params;
+ const referer = `https://m.douban.com/subject_collection/book_${type}_hot_weekly`;
+
+ const response = await axios({
+ method: 'get',
+ url: `https://m.douban.com/rexxar/api/v2/subject_collection/book_${type}_hot_weekly/items?start=0&count=10`,
+ headers: {
+ Referer: referer,
+ },
+ });
+
+ ctx.state.data = {
+ title: `豆瓣热门图书-${type === 'fiction' ? '虚构类' : '非虚构类'}`,
+ link: referer,
+ description: '每周一更新',
+ item: response.data.subject_collection_items.map(({ title, url, cover, info, rating }) => {
+ const description = `
+ ${title}/${info}/${rating.value.toFixed(1)}分
+ `;
+
+ return {
+ title: `${title}-${info}`,
+ description,
+ link: url,
+ };
+ }),
+ };
+};