57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
const got = require('@/utils/got');
|
|
const cheerio = require('cheerio');
|
|
const { isValidHost } = require('@/utils/valid-host');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
const timezone = require('@/utils/timezone');
|
|
const { parseArticle } = require('./utils');
|
|
|
|
module.exports = async (ctx) => {
|
|
const category = ctx.params.category;
|
|
const column = ctx.params.column;
|
|
const url = `https://${column}.caixin.com/${category}`;
|
|
if (!isValidHost(column)) {
|
|
throw Error('Invalid column');
|
|
}
|
|
|
|
const response = await got(url);
|
|
|
|
const $ = cheerio.load(response.data);
|
|
const title = $('head title').text();
|
|
const entity = JSON.parse(
|
|
$('script')
|
|
.text()
|
|
.match(/var entity = (\{.*?\})/)[1]
|
|
);
|
|
|
|
const {
|
|
data: { datas: data },
|
|
} = await got('https://gateway.caixin.com/api/extapi/homeInterface.jsp', {
|
|
searchParams: {
|
|
subject: entity.id,
|
|
type: 0,
|
|
count: ctx.query.limit ? parseInt(ctx.query.limit) : 25,
|
|
picdim: '_266_177',
|
|
start: 0,
|
|
},
|
|
});
|
|
|
|
const list = data.map((item) => ({
|
|
title: item.desc,
|
|
description: item.summ,
|
|
link: item.link.replace('http://', 'https://'),
|
|
pubDate: timezone(parseDate(item.time), +8),
|
|
category: item.keyword.split(' '),
|
|
audio: item.audioUrl,
|
|
audio_image_url: item.pict.imgs[0].url,
|
|
}));
|
|
|
|
const items = await Promise.all(list.map((item) => parseArticle(item, ctx.cache.tryGet)));
|
|
|
|
ctx.state.data = {
|
|
title,
|
|
link: url,
|
|
description: '财新网 - 提供财经新闻及资讯服务',
|
|
item: items,
|
|
};
|
|
};
|