const axios = require('@/utils/axios'); const dayjs = require('dayjs'); module.exports = async (ctx) => { const category = ctx.params.category; let title; let link; let path = category; switch (category) { case 'topic': title = '热门话题'; link = 'https://readhub.cn/topics'; break; case 'news': title = '科技动态'; link = 'https://readhub.cn/news'; break; case 'technews': title = '开发者资讯'; link = 'https://readhub.cn/tech'; break; case 'blockchain': title = '区块链快讯'; link = 'https://readhub.cn/blockchain'; break; case 'daily': title = '每日早报'; link = 'https://readhub.cn/daily'; break; default: break; } if (path === 'daily') { path = 'topic/daily'; } const { data: { data }, } = await axios({ method: 'get', url: `https://api.readhub.cn/${path}`, }); const out = await Promise.all( data.map(async (news) => { const id = news.id; let item; if (category === 'topic' || category === 'daily') { const link = `https://readhub.cn/topic/${id}`; const cache = await ctx.cache.get(link); if (cache) { return Promise.resolve(JSON.parse(cache)); } const { data } = await axios.get(`https://api.readhub.cn/topic/${id}`); let description = data.summary; if (data.newsArray) { description += '

媒体报道:'; for (const one of data.newsArray) { description += `
${dayjs(new Date(one.publishDate)).format('YY-MM-DD')} ${one.siteName}: ${one.title}`; } } if (data.timeline && data.timeline.topics) { let type = '相关事件'; if (data.timeline.commonEntities && data.timeline.commonEntities.length > 0) { type = '事件追踪'; } description += `

${type}:`; for (const one of data.timeline.topics) { description += `
${dayjs(new Date(one.createdAt)).format('YY-MM-DD')} ${one.title.trim()}`; } } item = { title: data.title, description: description.replace(new RegExp('\n', 'g'), '
'), pubDate: data.publishDate, guid: id, link, }; await ctx.cache.set(link, JSON.stringify(item)); } else { const description = news.summaryAuto || news.summary || news.title; item = { title: news.title, description: description.replace(new RegExp('\n', 'g'), '
'), pubDate: news.publishDate, guid: id, link: news.url || news.mobileUrl, }; } return Promise.resolve(item); }) ); ctx.state.data = { title: `Readhub - ${title}`, link, item: out, }; };