40 lines
1.7 KiB
JavaScript
40 lines
1.7 KiB
JavaScript
const got = require('@/utils/got');
|
|
const cheerio = require('cheerio');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
const { art } = require('@/utils/render');
|
|
const { join } = require('path');
|
|
|
|
module.exports = async (ctx) => {
|
|
const baseUrl = 'https://netflav.com';
|
|
const { data } = await got(baseUrl);
|
|
|
|
const $ = cheerio.load(data);
|
|
const nextData = JSON.parse($('#__NEXT_DATA__').text());
|
|
const {
|
|
head,
|
|
props: { initialState },
|
|
} = nextData;
|
|
|
|
const items = [...initialState.censored.docs, ...initialState.uncensored.docs, ...initialState.chinese.docs, ...initialState.trending.docs].map((item) => ({
|
|
title: item.title,
|
|
description: art(join(__dirname, 'templates/description.art'), {
|
|
description: item.description,
|
|
images: [...new Set([item.preview_hp, item.preview, item.previewImagesUrl, ...(item.previewImages || [])])].filter(Boolean),
|
|
}),
|
|
link: `https://netflav.com/video?id=${item.videoId}`,
|
|
pubDate: parseDate(item.sourceDate),
|
|
author: [...new Set(item.actors.map((a) => a.replace(/^(\w{2}:)/, '')))].join(', '),
|
|
category: [...new Set(item.tags?.map((t) => t.replace(/^(\w{2}:)/, '')))],
|
|
}));
|
|
|
|
ctx.state.data = {
|
|
title: head.find((h) => h[0] === 'title')[1].children,
|
|
description: head.find((h) => h[0] === 'meta' && h[1].name === 'description')[1].content,
|
|
logo: `${baseUrl}${head.find((h) => h[0] === 'meta' && h[1].property === 'og:image')[1].content}`,
|
|
image: `${baseUrl}${head.find((h) => h[0] === 'meta' && h[1].property === 'og:image')[1].content}`,
|
|
link: baseUrl,
|
|
item: items,
|
|
allowEmpty: true,
|
|
};
|
|
};
|