const axios = require('../../utils/axios'); const { load } = require('cheerio'); exports.getPage = async (url, ctx) => { const { data } = await axios(url); const $ = load(data); const pageTitle = `JavBus - ${$('head > title') .text() .replace(' - JavBus', '')}`; return { title: pageTitle, link: url, description: pageTitle, item: await Promise.all(parseItems($, ctx)), }; }; exports.createHandler = (url) => async (ctx) => { ctx.state.data = await exports.getPage(url, ctx); }; const parseItems = ($, ctx) => $('.movie-box') .map((_, ele) => ({ title: $(ele) .find('img') .attr('title'), thumb: $(ele) .find('img') .attr('src'), link: $(ele).attr('href'), pubDate: new Date( $(ele) .find('date:nth-child(4)') .text() ).toUTCString(), aid: $(ele) .find('date:nth-child(3)') .text(), })) .toArray() .map(async ({ title, thumb, link, pubDate, aid }) => { const detail = await getDetail(link, ctx); title = `${aid} ${title}${detail.filmTime}`; if (detail.screenData) { detail.imgHTML = detail.screenData.map((url) => `
`); } return { title, link, pubDate, description: `

${title}


${detail.filmTime ? `

发售日期 : ${detail.filmTime}

` : ''} ${detail.actresses ? `

女优 : ${detail.actresses}

` : ''} ${detail.filmEstabName ? `

發行商 : ${detail.filmEstabName}

` : ''} ${detail.filmMakerbName ? `

製作商 : ${detail.filmMakerbName}

` : ''} ${detail.seriesName ? `

系列 : ${detail.seriesName}

` : ''} ${detail.screenData ? `

影片截图 :

${detail.imgHTML.join('')}` : ''} `.trim(), }; }); const getDetail = async (link, ctx) => { const cache = await ctx.cache.get(link); if (cache) { return JSON.parse(cache); } else { const resp = await axios(link); const detailPage = resp.data; // 演员 const actressReg = //g; let match = detailPage.match(actressReg); let actresses = []; if (match) { match.map((i) => { const name = /(.*?)<\/span>/.exec(i)[1]; actresses = actresses.concat(name); return null; }); } else { actresses = null; // [] } // 影片详情 const filmCover = /發行日期:<\/span>([\s\S]*?)<\/p>/.exec(detailPage); if (filmTime) { filmTime = filmTime[1]; } else { filmTime = null; // "????-??-??"; } let filmLast = /長度:<\/span>([\s\S]*?)<\/p>/.exec(detailPage); if (filmLast) { const lastmins = /\d+/.exec(filmLast[1]); const hours = Math.floor(lastmins / 60); let mins = lastmins % 60; mins = mins === '0' ? '00' : mins; filmLast = hours + ':' + mins; } else { filmLast = null; // "???分钟"; } let filmEstabName = /發行商:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage); if (filmEstabName) { filmEstabName = filmEstabName[2]; } else { filmEstabName = null; // "未知"; } let filmMakerbName = /製作商:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage); if (filmMakerbName) { filmMakerbName = filmMakerbName[2]; } else { filmMakerbName = null; // "未知"; } let seriesName = /系列:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage); if (seriesName) { seriesName = seriesName[2]; } else { seriesName = null; // "未知"; } let directorName = /導演:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage); if (directorName) { directorName = directorName[2]; } else { directorName = null; // "未知"; } const code = /識別碼:[\s\S]*?">([\s\S]*?)<\/span>/.exec(detailPage)[1]; // 影片截图 const regScreenshot = //g; match = detailPage.match(regScreenshot); let screenData = []; if (match) { screenData = match.map((i) => //g.exec(i)[1]); } else { screenData = null; // []; } const detail = { actresses, filmCover, filmName, filmTime, filmLast, filmEstabName, filmMakerbName, seriesName, directorName, code, screenData }; ctx.cache.set(link, JSON.stringify(detail), 24 * 60 * 60); return detail; } };