diff --git a/docs/social-media.md b/docs/social-media.md
index 914cf8e39a..47340ead3c 100644
--- a/docs/social-media.md
+++ b/docs/social-media.md
@@ -238,6 +238,10 @@ pageClass: routes
+### 专栏文集
+
+
+
## Disqus
### 评论
diff --git a/lib/router.js b/lib/router.js
index 6bbfb7dd67..18812f588e 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -41,6 +41,7 @@ router.get('/bilibili/audio/:id', require('./routes/bilibili/audio'));
router.get('/bilibili/vsearch/:kw/:order?', require('./routes/bilibili/vsearch'));
router.get('/bilibili/followings/video/:uid', require('./routes/bilibili/followings_video'));
router.get('/bilibili/followings/article/:uid', require('./routes/bilibili/followings_article'));
+router.get('/bilibili/readlist/:listid', require('./routes/bilibili/readlist'));
// bangumi
router.get('/bangumi/calendar/today', require('./routes/bangumi/calendar/today'));
diff --git a/lib/routes/bilibili/readlist.js b/lib/routes/bilibili/readlist.js
new file mode 100644
index 0000000000..382133ef22
--- /dev/null
+++ b/lib/routes/bilibili/readlist.js
@@ -0,0 +1,31 @@
+const got = require('@/utils/got');
+
+module.exports = async (ctx) => {
+ const listid = ctx.params.listid;
+ const listurl = `https://www.bilibili.com/read/readlist/${listid}`;
+
+ const response = await got({
+ method: 'get',
+ url: `https://api.bilibili.com/x/article/list/web/articles?id=${listid}&jsonp=jsonp`,
+ headers: {
+ Referer: listurl,
+ },
+ });
+ const data = response.data.data;
+
+ ctx.state.data = {
+ title: `bilibili 专栏文集 - ${data.list.name}`,
+ link: `https://www.bilibili.com/read/readlist/${listid}`,
+ image: data.list.image_url,
+ description: data.list.summary ? data.list.summary : '作者很懒,还木有写简介.....((/- -)/',
+ item:
+ data.articles &&
+ data.articles.map((item) => ({
+ title: item.title,
+ author: data.author.name,
+ description: `${item.summary}…
`,
+ pubDate: new Date(item.publish_time * 1000).toUTCString(),
+ link: listurl,
+ })),
+ };
+};