rsshub
Version:
Make RSS Great Again!
63 lines (59 loc) • 2.16 kB
JavaScript
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const category = ctx.params.category || 'energy-resources-industrials';
const options = {
consumer: {
icid: 'top_consumer',
label: '消费行业',
},
'energy-resources-industrials': {
icid: 'top_energy-resources-industrials',
label: '能源、资源及工业行业',
},
'financial-services': {
icid: 'top_financial-services',
label: '金融服务行业',
},
'government-public-services': {
icid: 'top_government-public-services',
label: '政府及公共服务',
},
'life-sciences-healthcare': {
icid: 'top_life-sciences-healthcare',
label: '生命科学与医疗行业',
},
'technology-media-telecommunications': {
icid: 'top_technology-media-telecommunications',
label: '科技、传媒及电信行业',
},
};
const response = await got({
url: 'https://www2.deloitte.com/cn/zh/industries/energy-resources-industrials.html',
searchParams: {
icid: options[category].icid,
},
});
const $ = cheerio.load(response.data);
const articles = $('.featuredpromo a.promo-focus')
.map((index, ele) => ({
title: $(ele).text().trim(),
link: $(ele).attr('href'),
}))
.get();
const item = await Promise.all(
articles.slice(0, 10).map((item) =>
ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got.get(`https://www2.deloitte.com/${item.link}`);
const s = cheerio.load(detailResponse.data);
item.description = s('.two-columns-c0').html();
return item;
})
)
);
ctx.state.data = {
title: `Deloitte - ${options[category].label}`,
link: `https://www2.deloitte.com/cn/zh/industries/energy-resources-industrials.html?icid=top_energy-resources-`,
item,
};
};