Files
RSSHub/lib/routes/iplay/utils.js
2019-06-03 18:03:05 +08:00

58 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const got = require('@/utils/got');
const cheerio = require('cheerio');
const url = require('url');
async function load(link) {
const response = await got.get(link);
const $ = cheerio.load(response.data);
// 处理日期
const datestr = $('.entry-meta li')
.text()
.match(/生产日期:异次纪元 ([\s\S]*?秒)/)[1]
.match(/(\d{1,2})/gm);
for (let i = 1; i < datestr.length; i++) {
datestr[i] = datestr[i].padStart(2, '0');
}
const date = new Date('20' + datestr[0] + '-' + datestr[1] + '-' + datestr[2] + ' ' + datestr[3] + ':' + datestr[4] + ':' + datestr[5]);
const timeZone = 8;
const serverOffset = date.getTimezoneOffset() / 60;
const pubDate = new Date(date.getTime() - 60 * 60 * 1000 * (timeZone + serverOffset)).toUTCString();
// 提取详情
let description = $('.entry-content').html();
// 去除data-srcsetsrcset将data-src替换成src以正常显示图片
description = description.replace(/(data-){0,1}srcset="[\s\S]*?"/g, '');
description = description.replace(/data-src/g, 'src');
return { description, pubDate };
}
const ProcessFeed = async (list, caches) => {
const host = 'https://www.iplaysoft.com/';
return await Promise.all(
list.map(async (item) => {
const $ = cheerio.load(item);
const $title = $('.entry-title a');
// 还原相对链接为绝对链接
const itemUrl = url.resolve(host, $title.attr('href'));
// 列表上提取到的信息
const single = {
title: $title.text(),
link: itemUrl,
// author: $('.nickname').text(),
guid: itemUrl,
};
// 使用tryGet方法从缓存获取内容。
// 当缓存中无法获取到链接内容的时候则使用load方法加载文章内容。
const other = await caches.tryGet(itemUrl, async () => await load(itemUrl));
// 合并解析后的结果集作为该篇文章最终的输出结果
return Promise.resolve(Object.assign({}, single, other));
})
);
};
module.exports = {
ProcessFeed,
};