RSSHub/lib/v2/ielts/index.js

65 lines
2.1 KiB
JavaScript

const cheerio = require('cheerio');
const got = require('@/utils/got');
const timezone = require('@/utils/timezone');
const { parseDate } = require('@/utils/parse-date');
const targetUrl = 'https://ielts.neea.cn/allnews?locale=zh_CN';
const config = require('@/config').value;
module.exports = async (ctx) => {
const html = await ctx.cache.tryGet(
targetUrl,
async () => {
const browser = await require('@/utils/puppeteer')({ stealth: true });
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', (request) => {
request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort();
});
await page.goto(targetUrl, {
waitUntil: 'domcontentloaded',
});
await page.waitForSelector('div.container');
const html = await page.evaluate(() => document.documentElement.innerHTML);
browser.close();
return html;
},
config.cache.routeExpire,
false
);
const $ = cheerio.load(html);
const list = $('#newsListUl li')
.get()
.map((elem) => {
const $elem = $(elem);
return {
title: $elem.find('a').text(),
link: $elem.find('a').attr('href'),
pubDate: timezone(parseDate($elem.find('span').eq(-1).text().replace(/[[\]]/g, '').trim(), +8)),
};
});
const items = await Promise.all(
list.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const $ = cheerio.load(detailResponse.data);
item.description = $('.content').html();
return item;
})
)
);
ctx.state.data = {
title: 'IELTS雅思最新消息',
link: targetUrl,
item: items,
};
};