diff --git a/routes/zhihu/activities.js b/routes/zhihu/activities.js index cb22c561c2..f9e8698684 100644 --- a/routes/zhihu/activities.js +++ b/routes/zhihu/activities.js @@ -1,6 +1,5 @@ const axios = require('axios'); const template = require('../../utils/template'); -const cheerio = require('cheerio'); const config = require('../../config'); module.exports = async (ctx) => { @@ -8,7 +7,7 @@ module.exports = async (ctx) => { const response = await axios({ method: 'get', - url: `https://www.zhihu.com/people/${id}/activities`, + url: `https://www.zhihu.com/api/v4/members/${id}/activities?limit=7`, headers: { 'User-Agent': config.ua, 'Referer': `https://www.zhihu.com/people/${id}/activities`, @@ -17,24 +16,22 @@ module.exports = async (ctx) => { } }); - const $ = cheerio.load(response.data); - const data = $('#data').data('state').entities; - - const name = data.users[id].name; - const list = Object.values(data.activities).sort((a, b) => b.createdTime - a.createdTime); + const data = response.data.data; ctx.body = template({ - title: `${name}的知乎动态`, + title: `${data[0].actor.name}的知乎动态`, link: `https://www.zhihu.com/people/${id}/activities`, - description: data.users[id].headline || data.users[id].description, - item: list && list.map((item) => { - const type = item.target.schema; - const detail = data[`${type}s`][item.target.id]; + description: data[0].actor.headline || data[0].actor.description, + item: data && data.map((item) => { + const detail = item.target; let title; let description; let url; + const images = []; + let text = ''; + let link = ''; - switch (type) { + switch (item.target.type) { case 'answer': title = detail.question.title; description = detail.content; @@ -46,19 +43,16 @@ module.exports = async (ctx) => { url = `https://zhuanlan.zhihu.com/p/${detail.id}`; break; case 'pin': - title = detail.excerptTitle.length > 17 ? detail.excerptTitle.slice(0, 17) + '...' : detail.excerptTitle; - const images = []; - let text = ""; - let link = ""; - detail.content.forEach(contentItem => { - if (contentItem.type === "text") { - text = `
${contentItem.ownText}
`; - } else if (contentItem.type === "image") { + title = detail.excerpt_title.length > 17 ? detail.excerpt_title.slice(0, 17) + '...' : detail.excerpt_title; + detail.content.forEach((contentItem) => { + if (contentItem.type === 'text') { + text = `${contentItem.own_text}
`; + } else if (contentItem.type === 'image') { images.push(`${detail.intro}
${detail.intro}