crystelf-plugin/lib/rss/screenshot.js

37 lines
1.2 KiB
JavaScript

import fs from 'fs';
import paths from './../../constants/path.js';
import puppeteer from 'puppeteer';
const screenshot = {
/**
* rss网页截图
* @param feedItem 对象
* @param savePath 保存路径
* @returns {Promise<*>}
*/
async generateScreenshot(feedItem, savePath) {
const htmlTemplate = fs.readFileSync(paths.rssHTML, 'utf-8');
const html = htmlTemplate
.replace(/{{title}}/g, feedItem.title)
.replace(/{{author}}/g, feedItem.author)
.replace(/{{content}}/g, feedItem.content)
.replace(/{{link}}/g, feedItem.link)
.replace(/{{date}}/g, new Date(feedItem.date).toLocaleString())
.replace(/{{feedTitle}}/g, feedItem.feedTitle)
.replace(/{{image}}/g, feedItem.image || '');
const browser = await puppeteer.launch({
headers: 'new',
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
await page.setContent(html, { waitUntil: 'networkidle0' });
await page.setViewport({ width: 800, height: 600 });
await page.screenshot({ path: savePath, fullPage: true });
await browser.close();
return savePath;
},
};
export default screenshot;