feat: add 755 (#3557)

This commit is contained in:
hoilc
2019-12-08 02:46:46 +08:00
committed by DIYgod
parent f01b48a14e
commit 4629245dff
3 changed files with 80 additions and 0 deletions

View File

@@ -4,6 +4,12 @@ pageClass: routes
# 社交媒体
## 755
### 用户时间线
<Route author="hoilc" example="/755/user/akimoto-manatsu" path="/755/user/:username" :paramsDesc="['用户名, 可在 URL 中找到']"/>
## bilibili
::: tip Tiny Tiny RSS 用户请注意

View File

@@ -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'));

71
lib/routes/755/user.js Normal file
View File

@@ -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 `<p>${item.text.replace(/\n/gm, '<br/>')}</p>`;
case 2:
return `<img src="${item.image}">`;
case 3:
return `<img src="${item.image}">`;
case 4:
return `<blockquote>${item.comment.user.name}:<br/>${item.comment.comment.body.replace(/\n/gm, '<br/>')}</blockquote>`;
case 7:
return `<blockquote>${item.talk.name}:<br/>${GetContent(item.post)}</blockquote>`;
case 8:
return `<video src="${item.movieUrlHq}" poster="${item.thumbnailUrl}" controls loop>Video</video>`;
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),
};
};