diff --git a/docs/study.md b/docs/study.md
index f79d1b8eff..042669c95b 100644
--- a/docs/study.md
+++ b/docs/study.md
@@ -81,6 +81,17 @@ pageClass: routes
+## MarginNote
+
+### 标签
+
+
+
+| 经验分享 | 论坛精华 | 待跟进反馈 | 优秀建议 | 精选回答 | 官方签名 | 自动更新 | 3674 以上版本支持 | 368 以上版本支持 | 未经验证的安全风险 | 笔记本分享 | 关键反馈 | 精选话题讨论 | 灵感盒 | 引用 |
+| -------- | -------- | ---------- | -------- | -------- | -------- | -------- | ----------------- | ---------------- | ------------------ | ---------- | -------- | ------------ | ------ | ---- |
+
+
+
## Mind42
### 分类
diff --git a/lib/router.js b/lib/router.js
index 7926d84115..4207fe98b8 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -3698,6 +3698,9 @@ router.get('/treasury/press-releases/:category?/:title?', require('./routes/us/t
// Bandisoft
router.get('/bandisoft/:id?/:lang?', require('./routes/bandisoft/index'));
+// MarginNote
+router.get('/marginnote/tag/:id?', require('./routes/marginnote/tag'));
+
// ASML
router.get('/asml/press-releases', require('./routes/asml/press-releases'));
diff --git a/lib/routes/marginnote/tag.js b/lib/routes/marginnote/tag.js
new file mode 100644
index 0000000000..0a89f5d399
--- /dev/null
+++ b/lib/routes/marginnote/tag.js
@@ -0,0 +1,43 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+
+module.exports = async (ctx) => {
+ const id = ctx.params.id || '经验分享';
+
+ const rootUrl = 'https://bbs.marginnote.cn';
+ const currentUrl = `${rootUrl}/tag/${id}/l/latest.json`;
+ const response = await got({
+ method: 'get',
+ url: currentUrl,
+ });
+
+ const list = response.data.topic_list.topics.slice(0, 10).map((item) => ({
+ title: item.title,
+ link: `${rootUrl}/t/topic/${item.id}`,
+ pubDate: new Date(item.last_posted_at).toUTCString(),
+ }));
+
+ const items = await Promise.all(
+ list.map(
+ async (item) =>
+ await ctx.cache.tryGet(item.link, async () => {
+ const detailResponse = await got({
+ method: 'get',
+ url: item.link,
+ });
+ const content = cheerio.load(detailResponse.data.replace('