const url = require('url');
const cheerio = require('cheerio');
const got = require('hooman');
const dateUtil = require('@/utils/date');
// 通过传入不同的ctx.state.data.link 返回javlibrary 不同link的rss
exports.template = async function template(ctx) {
const link = ctx.state.data.link;
const response = await got.get(link);
const $ = cheerio.load(response.body);
const list = $('.videothumblist .video').get();
const items = await Promise.all(
list.map(async (item) => {
item = $(item);
const itemLink = url.resolve(link, item.find('a').attr('href'));
const simple = {
title: `[${item.find('.id').text()}]${item.find('.title').text()}`,
link: itemLink,
};
const details = await ctx.cache.tryGet(itemLink, async () => {
const response = await got.get(itemLink);
const $ = cheerio.load(response.body);
$('#video_info #video_review .icon').remove();
return {
author: $('.star').text(),
description: `
${$('#video_info').html()}`,
};
});
return Promise.resolve(Object.assign({}, simple, details));
})
);
ctx.state.data = {
title: `Javlibrary - ${$('.boxtitle').text()}`,
link: link,
item: items,
};
};
exports.getVideoComments = async function getVideoComments(link) {
const response = await got.get(link);
const $ = cheerio.load(response.body);
const list = $('#video_comments > table');
return (
list &&
list
.map((index, item) => {
item = $(item);
// 文章内容只能抓取到 td.t textarea,若含有图片则替换[img]image-link[/img] =>
let comments = item.find('textarea').text();
comments = comments.replace(new RegExp('\\[img\\]', 'g'), '
');
return {
title: item.find('tbody > tr:nth-child(1) > td:nth-child(2)').text(),
link: item.find('tbody > tr:nth-child(1) > td:nth-child(2) > a').attr('href'),
description: `
| ${item.find('tbody > tr:nth-child(1) > td:nth-child(2)').html()} |
| ${comments} |