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), + }; +};