diff --git a/docs/social-media.md b/docs/social-media.md
index ad0413024c..7e5c300a7a 100644
--- a/docs/social-media.md
+++ b/docs/social-media.md
@@ -4,6 +4,12 @@ pageClass: routes
# 社交媒体
+## 755
+
+### 用户时间线
+
+
+
## bilibili
::: tip Tiny Tiny RSS 用户请注意
diff --git a/lib/router.js b/lib/router.js
index 51191b282f..b283a20983 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -2024,6 +2024,9 @@ router.get('/bahamut/creation_index/:category?/:subcategory?/:type?', require('.
// CentBrowser
router.get('/centbrowser/history', require('./routes/centbrowser/history'));
+// 755
+router.get('/755/user/:username', require('./routes/755/user'));
+
// Mastodon
router.get('/mastodon/timeline/:site/:only_media?', require('./routes/mastodon/timeline'));
diff --git a/lib/routes/755/user.js b/lib/routes/755/user.js
new file mode 100644
index 0000000000..c544e64c8f
--- /dev/null
+++ b/lib/routes/755/user.js
@@ -0,0 +1,71 @@
+const got = require('@/utils/got');
+
+const postTypes = {
+ 1: '文字',
+ 2: '表情',
+ 3: '纯图片',
+ 4: '评论',
+ 5: '转发',
+ 6: '纯视频',
+ 7: '图片文字',
+ 8: '视频文字',
+};
+
+module.exports = async (ctx) => {
+ const username = ctx.params.username;
+
+ const url = `https://api.7gogo.jp/web/v2/talks/${username}/posts?talkId=${username}&direction=PREV`;
+
+ const response = await got.get(url);
+ const list = response.data.data;
+
+ const user_display_name = list[0].user.name;
+ const user_description = list[0].user.description;
+ const user_image = list[0].user.coverImageUrl;
+
+ const GetContent = (post) =>
+ post.body &&
+ post.body
+ .map((item) => {
+ switch (item.bodyType) {
+ case 1:
+ return `
${item.text.replace(/\n/gm, '
')}
`;
+ case 2:
+ return `
`;
+ case 3:
+ return `
`;
+ case 4:
+ return `${item.comment.user.name}:
${item.comment.comment.body.replace(/\n/gm, '
')}
`;
+ case 7:
+ return `${item.talk.name}:
${GetContent(item.post)}
`;
+ case 8:
+ return ``;
+ default:
+ return '';
+ }
+ })
+ .join('');
+
+ const GetTitle = (post) => {
+ const texts = post.body.filter((s) => s.bodyType === 1);
+ const type_name = postTypes[post.postType];
+ return texts.length !== 0 ? texts[0].text.split('\n')[0] : type_name;
+ };
+
+ const ProcessFeed = (data) =>
+ data.slice(0, 20).map((item) => ({
+ title: GetTitle(item.post),
+ author: user_display_name,
+ description: GetContent(item.post),
+ pubDate: new Date(item.post.time * 1000).toUTCString(),
+ link: `https://7gogo.jp/${username}/${item.post.postId}`,
+ }));
+
+ ctx.state.data = {
+ title: `${user_display_name} - 755`,
+ image: user_image,
+ description: user_description,
+ link: `https://7gogo.jp/${username}`,
+ item: ProcessFeed(list),
+ };
+};