diff --git a/README.md b/README.md
index 7d4e36d78b..3b64df766e 100644
--- a/README.md
+++ b/README.md
@@ -59,6 +59,8 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇
- 贴吧
- 帖子列表
- 精品帖子
+ - 帖子动态
+ - 楼主动态
- 即刻
- 主题
- 用户动态
diff --git a/docs/README.md b/docs/README.md
index 12431069cd..4a2b3aa06c 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -769,6 +769,26 @@ rid: 排行榜分区 id,默认 0
`cid`: 精品分类,如果不传 `cid` 则获取全部分类
+### 帖子动态
+
+举例: [https://rsshub.app/tieba/post/5853240586](https://rsshub.app/tieba/post/5853240586)
+
+路由: `/tieba/post/:id`
+
+参数:
+
+`id`: 帖子 ID
+
+### 楼主动态
+
+举例: [https://rsshub.app/tieba/post/lz/5853240586](https://rsshub.app/tieba/post/lz/5853240586)
+
+路由: `/tieba/post/lz/:id`
+
+参数:
+
+`id`: 帖子 ID
+
## 即刻
### 主题-精选
diff --git a/docs/joinus/README.md b/docs/joinus/README.md
index eb5dbbad03..c7f6b01626 100644
--- a/docs/joinus/README.md
+++ b/docs/joinus/README.md
@@ -103,6 +103,7 @@ ctx.state.data = {
```
+
## 参与讨论
1. [Telegram 群](https://t.me/rsshub)
diff --git a/router.js b/router.js
index ad6a9a94b8..600b663ac9 100755
--- a/router.js
+++ b/router.js
@@ -119,6 +119,12 @@ router.get('/weibo/user/:uid', require('./routes/weibo/user'));
router.get('/weibo/user2/:uid', require('./routes/weibo/user2'));
router.get('/weibo/keyword/:keyword', require('./routes/weibo/keyword'));
+// 贴吧
+router.get('/tieba/forum/:kw', require('./routes/tieba/forum'));
+router.get('/tieba/forum/good/:kw/:cid?', require('./routes/tieba/forum'));
+router.get('/tieba/post/:id', require('./routes/tieba/post'));
+router.get('/tieba/post/lz/:id', require('./routes/tieba/post'));
+
// 网易云音乐
router.get('/ncm/playlist/:id', require('./routes/ncm/playlist'));
router.get('/ncm/user/playlist/:uid', require('./routes/ncm/userplaylist'));
@@ -149,10 +155,6 @@ router.get('/zhihu/people/answers/:id', require('./routes/zhihu/answers'));
router.get('/zhihu/zhuanlan/:id', require('./routes/zhihu/zhuanlan'));
router.get('/zhihu/daily', require('./routes/zhihu/daily'));
-// 贴吧
-router.get('/tieba/forum/:kw', require('./routes/tieba/forum'));
-router.get('/tieba/forum/good/:kw/:cid?', require('./routes/tieba/forum'));
-
// 妹子图
router.get('/mzitu', require('./routes/mzitu/category'));
router.get('/mzitu/tags', require('./routes/mzitu/tags'));
diff --git a/routes/tieba/post.js b/routes/tieba/post.js
new file mode 100644
index 0000000000..1649db9e46
--- /dev/null
+++ b/routes/tieba/post.js
@@ -0,0 +1,67 @@
+const cheerio = require('cheerio');
+const axios = require('../../utils/axios');
+
+/**
+ * 获取最新的帖子回复(倒序查看)
+ *
+ * @param {*} id 帖子ID
+ * @param {number} [lz=0] 是否只看楼主(0: 查看全部, 1: 只看楼主)
+ * @param {number} [pn=7e6] 帖子最大页码(默认假设为 7e6,如果超出假设则根据返回的最大页码再请求一次,否则可以节省一次请求)
+ * 这个默认值我测试下来 7e6 是比较接近最大值了,因为当我输入 8e6 就会返回第一页的数据而不是最后一页了
+ * @returns
+ */
+async function getPost(id, lz = 0, pn = 7e6) {
+ const { data } = await axios({
+ method: 'get',
+ url: `https://tieba.baidu.com/p/${id}?see_lz=${lz}&pn=${pn}&ajax=1`,
+ headers: {
+ Referer: 'https://tieba.baidu.com/',
+ },
+ });
+ const $ = cheerio.load(data);
+ const max = Number.parseInt($('[max-page]').attr('max-page'));
+ if (max > pn) {
+ return getPost(id, max);
+ }
+ return data;
+}
+
+module.exports = async (ctx) => {
+ const { id } = ctx.params;
+ const lz = ctx._matchedRoute.includes('lz') ? 1 : 0;
+ const html = await getPost(id, lz);
+ const $ = cheerio.load(html);
+ const title = $('.core_title_txt')
+ .attr('title')
+ .substr(3);
+ const list = $('.p_postlist > [data-field]:not(:has(".ad_bottom_view"))');
+
+ ctx.state.data = {
+ title: lz ? `【只看楼主】${title}` : title,
+ link: `https://tieba.baidu.com/p/${id}?see_lz=${lz}`,
+ description: `${title}的最新回复`,
+ item:
+ list &&
+ list
+ .map((index, element) => {
+ const item = $(element);
+ const { author, content } = item.data('field');
+ const [from, num, time] = item
+ .find('.post-tail-wrap > .tail-info')
+ .map((index, element) => $(element).text())
+ .get();
+ return {
+ title: `${author.user_name}回复了帖子《${title}》`,
+ description: [
+ `
${content.content}
`,
+ `作者:${author.user_name}`,
+ `楼层:${num}`,
+ `${from}`
+ ].join('
'), // prettier-ignore
+ pubDate: new Date(time).toUTCString(),
+ link: `https://tieba.baidu.com/p/${id}?pid=${content.post_id}#${content.post_id}`,
+ };
+ })
+ .get(),
+ };
+};