RSSHub/lib/routes/gvm/index.js

95 lines
2.7 KiB
JavaScript

const got = require('got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const category = ctx.params.category || 'newest';
let suffix = '/newest';
const options = {
newest: '最新文章',
recommend: '你可能會喜歡',
opinion: '名家專欄',
topic: '專題',
news: '時事熱點',
politics: '政治',
society: '社會',
figure: '人物報導',
world: '國際',
world_focus: '全球焦點',
cross_strait_politics: '兩岸',
money: '金融理財',
investment: '投資理財',
insurance: '保險規劃',
retire: '退休理財',
fintech: '金融Fintech',
real_estate: '房地產',
economy: '總體經濟',
tech: '科技',
tech_trend: '科技趨勢',
energy: '能源',
business: '產經',
industry: '傳產',
service: '消費服務',
medical: '生技醫藥',
family_business_succession: '傳承轉型',
startup: '創業新創',
management: '管理',
agriculture: '農業',
education: '教育',
higher_education: '高教',
technological: '技職',
parent: '親子教育',
world_education: '國際文教',
sports: '體育',
life: '好享生活',
art: '時尚設計',
self_growth: '心靈成長',
film: '藝文影視',
travel: '旅遊',
environment: '環境生態',
health: '健康',
food: '美食',
career: '職場生涯',
survey: '調查',
county: '縣市',
csr: 'CSR',
};
if (category !== 'newest' && category !== 'recommend') {
suffix = `/category/${category}`;
}
const response = await got({
method: 'get',
url: 'https://www.gvm.com.tw' + suffix,
});
const $ = cheerio.load(response.body);
const articles = $('#article_list .article-list-item .article-list-item__intro')
.map((index, ele) => ({
title: $('a', ele).text(),
link: $('a', ele).attr('href'),
pubDate: new Date($('.time', ele).text()),
author: $('.author', ele).text(),
}))
.get();
const item = await Promise.all(
articles.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const res = await got.get(item.link);
const content = cheerio.load(res.body);
item.description = content('.article-content').html();
return item;
})
)
);
ctx.state.data = {
title: `遠見 - ${options[category]}`,
link: 'https://www.gvm.com.tw' + suffix,
item,
};
};