import { Route } from '@/types';
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
export const route: Route = {
path: '/user/:id',
categories: ['social-media', 'popular'],
example: '/jike/user/3EE02BC9-C5B3-4209-8750-4ED1EE0F67BB',
parameters: { id: '用户 id, 可在即刻分享出来的单条动态页点击用户头像进入个人主页,然后在个人主页的 URL 中找到,或者在单条动态页使用 RSSHub Radar 插件' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['web.okjike.com/u/:uid'],
target: '/user/:uid',
},
],
name: '用户动态',
maintainers: ['DIYgod', 'prnake'],
handler,
};
async function handler(ctx) {
const id = ctx.req.param('id');
const response = await got({
method: 'get',
url: `https://m.okjike.com/users/${id}`,
headers: {
Referer: `https://m.okjike.com/users/${id}`,
},
});
const html = response.data;
const $ = load(html);
const raw = $('[type = "application/json"]').html();
const data = JSON.parse(raw).props.pageProps;
const getLink = (id, type) => {
switch (type) {
case 'REPOST':
return `https://m.okjike.com/reposts/${id}`;
case 'MEDIUM':
return `https://www.okjike.com/medium/${id}`;
default:
return `https://m.okjike.com/originalPosts/${id}`;
}
};
const items = await Promise.all(
data.posts.map(async (item) => {
const typeMap = {
ORIGINAL_POST: '发布',
REPOST: '转发',
ANSWER: '回答',
QUESTION: '提问',
PERSONAL_UPDATE: '创建新主题',
};
let linkTemplate = '';
if (item.linkInfo && item.linkInfo.linkUrl) {
linkTemplate = `${item.linkInfo.title}
`;
}
let imgTemplate = '';
if (item.pictures) {
for (const picture of item.pictures) {
imgTemplate += ``;
}
}
let content = item.content || (item.linkInfo && item.linkInfo.title) || (item.question && item.question.title) || item.title || '';
content = content.replaceAll(/\r\n|\n|\r/g, '
');
let shortenTitle = '一条动态';
if (content) {
shortenTitle = content.replaceAll(/(
)+/g, ' ');
content = `${content}
`;
}
let repostContent;
if (item.type === 'REPOST') {
const screenNameTemplate = item.target.user ? `@${item.target.user.screenName}` : '';
let repostImgTemplate = '';
if (item.target.pictures) {
for (const picture of item.target.pictures) {
repostImgTemplate += ``;
}
}
repostContent = `