diff --git a/docs/new-media.md b/docs/new-media.md index ec7c4d0268..577ac5537e 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -50,7 +50,7 @@ pageClass: routes ### 用户文章 - + ### 主题文章 diff --git a/lib/v2/36kr/router.js b/lib/v2/36kr/router.js index a084d80b0a..bfc5807f4e 100644 --- a/lib/v2/36kr/router.js +++ b/lib/v2/36kr/router.js @@ -3,5 +3,5 @@ module.exports = (router) => { router.get('/news/:category?', require('./news')); router.get('/newsflashes', require('./newsflashes')); router.get('/search/article/:keyword', require('./search/article')); - router.get('/user/:uid', require('./user')); + router.get('/user/:id', require('./user')); }; diff --git a/lib/v2/36kr/user.js b/lib/v2/36kr/user.js index 39e6d152d3..f1c795d498 100644 --- a/lib/v2/36kr/user.js +++ b/lib/v2/36kr/user.js @@ -2,35 +2,60 @@ const got = require('@/utils/got'); const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { - const userUrl = `https://36kr.com/user/${ctx.params.uid}`; - const response = await got({ - method: 'get', - url: userUrl, - }); - const data = JSON.parse(response.data.match(/"authorDetailData":(.*?),"channel":/)[1]); + const id = ctx.params.id; - const authorInfo = data.authorInfo.data; - const authorFlowList = data.authorFlowList.data.itemList; - const articleList = authorFlowList.map((item) => ({ + const rootUrl = 'https://36kr.com'; + const apiRootUrl = 'https://gateway.36kr.com'; + const currentUrl = `${rootUrl}/user/${id}`; + + const infoResponse = await got({ + method: 'post', + url: `${apiRootUrl}/api/mis/user/info`, + json: { + param: { + userId: id, + siteId: 1, + platformId: 2, + }, + platformId: 2, + siteId: 1, + userId: id, + partner_id: 'web', + }, + }); + + const response = await got({ + method: 'post', + url: `${apiRootUrl}/api/mis/me/article`, + json: { + param: { + userId: id, + pageEvent: 0, + pageSize: 20, + pageCallback: '', + siteId: 1, + platformId: 2, + }, + pageCallback: '', + pageEvent: 0, + pageSize: 20, + platformId: 2, + siteId: 1, + userId: id, + partner_id: 'web', + }, + }); + + const items = response.data.data.itemList.map((item) => ({ title: item.templateMaterial.widgetTitle, - link: `https://36kr.com/${item.route.split('?')[0] === 'detail_video' ? 'video' : 'p'}/${item.itemId}`, + link: `${rootUrl}/p/${item.itemId}`, pubDate: parseDate(item.templateMaterial.publishTime), + description: `

${item.templateMaterial.widgetContent}

`, })); ctx.state.data = { - title: `36氪用户 - ${authorInfo.userNick}`, - link: userUrl, - item: await Promise.all( - articleList.map((item) => - ctx.cache.tryGet(item.link, async () => { - const contentResponse = await got({ method: 'get', url: item.link }); - const result = contentResponse.data.match(/"articleDetailData":(.*?),"articleRecommendData":/) || contentResponse.data.match(/"videoDetail":(.*?),"authorVideos":/); - const contentData = JSON.parse(result[1]); - item.description = contentData.data.widgetContent; - return item; - }) - ) - ), - description: `${authorInfo.label} | ${authorInfo.summary}`, + title: `36kr - ${infoResponse.data.data.userNick}`, + link: currentUrl, + item: items, }; };