RSSHub/lib/routes/mp4er/index.js

84 lines
2.9 KiB
JavaScript

const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const type = ctx.params.type || 'all';
const caty = ctx.params.caty || 'all';
const area = ctx.params.area || 'all';
const year = ctx.params.year || 'all';
const order = ctx.params.order || '0';
const rootUrl = 'https://www.mp4er.com';
const currentUrl = `${rootUrl}/s/${caty}?${type === 'all' ? '' : '&type=' + type}${area === 'all' ? '' : '&area=' + area}${year === 'all' ? '' : '&year=' + year}&order=${order}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
let jsessionid = '';
const list = $('.card a')
.slice(0, 15)
.map((_, item) => {
item = $(item);
const link = item.attr('href').split(';jsessionid=');
jsessionid = link[1];
return {
title: item.attr('title'),
link: `${rootUrl}${link[0]}`,
pubDate: Date.parse(item.parent().find('.meta span').text()),
};
})
.get();
const headers = {
cookie: `JSESSIONID=${jsessionid}`,
};
const items = await Promise.all(
list.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
headers,
});
const downloadResponse = await got({
method: 'get',
url: `${rootUrl}/downloadInfo/list?mid=${item.link.split('/')[4].split('.')[0]}`,
headers,
});
const content = cheerio.load(detailResponse.data);
let downloadLinks = '';
for (const downloadLink of downloadResponse.data) {
downloadLinks += `<div class="item"><div class="content">${downloadLink.downloadCategory.name}: <a href="${downloadLink.url}">${downloadLink.url}</a></div></div>`;
}
const torrents = content('#torrent-list .list');
item.description = `
${content('.info0').html()}
<div>
<b>下载地址:</b>
${downloadLinks}
</div>
${torrents.html() ? `<div><b>种子列表:</b>${torrents.html()}</div>` : ''}
`.replace(/\n +/gm, ''); // Minify the string.
item.enclosure_url = torrents.html() ? `${rootUrl}${torrents.find('a.header').last().attr('href')}` : downloadResponse.data.pop().url;
item.enclosure_type = 'application/x-bittorrent';
return item;
})
)
);
ctx.state.data = {
title: '哔嘀影视',
link: currentUrl,
item: items,
};
};