RSSHub/lib/v2/iqiyi/video.js

53 lines
1.9 KiB
JavaScript

const cheerio = require('cheerio');
const config = require('@/config').value;
const { parseDate } = require('@/utils/parse-date');
const logger = require('@/utils/logger');
// /iqiyi/user/video/:uid
// http://localhost:1200/iqiyi/user/video/2289191062
module.exports = async (ctx) => {
const uid = ctx.params.uid;
const link = `https://www.iqiyi.com/u/${uid}/videos`;
// Use puppeteer because iqiyi page has a delay.
const browser = await require('@/utils/puppeteer')();
const data = await ctx.cache.tryGet(
link,
async () => {
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', (request) => {
request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort();
});
logger.debug(`Requesting ${link}`);
await page.goto(link, {
waitUntil: 'domcontentloaded',
});
await page.waitForSelector('li.pic-txt-li');
const html = await page.content();
const $ = cheerio.load(html);
const list = $('li.pic-txt-li');
return {
title: $('title').text(),
link,
item:
list &&
list
.map((index, item) => ({
title: $(item).attr('title'),
// description: `<img src="${$(item).find('.li-pic img').attr('src')}">`,
pubDate: parseDate($(item).find('.li-sub span.sub-date').text(), 'YYYY-MM-DD'),
link: $(item).find('.li-dec a').attr('href'),
}))
.get(),
};
},
config.cache.routeExpire,
false
);
browser.close();
ctx.state.data = data;
};