diff --git a/docs/README.md b/docs/README.md index 985e5b86df..8e7e469a3d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2782,23 +2782,23 @@ board 和 build 可在[这里](http://api.ineal.me/tss/status)查看 ### JavBus - + - + - + - + - + - + - + - + - + ### 虎嗅 diff --git a/lib/routes/javbus/genre.js b/lib/routes/javbus/genre.js index fcab4b2cb8..ce0f56bd2a 100644 --- a/lib/routes/javbus/genre.js +++ b/lib/routes/javbus/genre.js @@ -3,5 +3,5 @@ const { getPage } = require('./util'); module.exports = async (ctx) => { const { gid } = ctx.params; - ctx.state.data = await getPage(`https://www.javbus.com/genre/${gid}`); + ctx.state.data = await getPage(`https://www.javbus.com/genre/${gid}`, ctx); }; diff --git a/lib/routes/javbus/star.js b/lib/routes/javbus/star.js index fd73d80926..097d70e778 100644 --- a/lib/routes/javbus/star.js +++ b/lib/routes/javbus/star.js @@ -3,5 +3,5 @@ const { getPage } = require('./util'); module.exports = async (ctx) => { const { sid } = ctx.params; - ctx.state.data = await getPage(`https://www.javbus.com/star/${sid}`); + ctx.state.data = await getPage(`https://www.javbus.com/star/${sid}`, ctx); }; diff --git a/lib/routes/javbus/uncensored/genre.js b/lib/routes/javbus/uncensored/genre.js index 4bd49fd171..15fc4c92dc 100644 --- a/lib/routes/javbus/uncensored/genre.js +++ b/lib/routes/javbus/uncensored/genre.js @@ -2,6 +2,5 @@ const { getPage } = require('../util'); module.exports = async (ctx) => { const { gid } = ctx.params; - - ctx.state.data = await getPage(`https://www.javbus.com/uncensored/genre/${gid}`); + ctx.state.data = await getPage(`https://www.javbus.com/uncensored/genre/${gid}`, ctx); }; diff --git a/lib/routes/javbus/uncensored/star.js b/lib/routes/javbus/uncensored/star.js index dcac28e544..07e87a4f1f 100644 --- a/lib/routes/javbus/uncensored/star.js +++ b/lib/routes/javbus/uncensored/star.js @@ -3,5 +3,5 @@ const { getPage } = require('../util'); module.exports = async (ctx) => { const { sid } = ctx.params; - ctx.state.data = await getPage(`https://www.javbus.com/uncensored/star/${sid}`); + ctx.state.data = await getPage(`https://www.javbus.com/uncensored/star/${sid}`, ctx); }; diff --git a/lib/routes/javbus/util.js b/lib/routes/javbus/util.js index c1ae13243e..88c4e222c4 100644 --- a/lib/routes/javbus/util.js +++ b/lib/routes/javbus/util.js @@ -1,8 +1,8 @@ const axios = require('../../utils/axios'); const { load } = require('cheerio'); -exports.getPage = async (url) => { - const { data } = await axios.get(url); +exports.getPage = async (url, ctx) => { + const { data } = await axios(url); const $ = load(data); const pageTitle = `JavBus - ${$('head > title') @@ -13,15 +13,15 @@ exports.getPage = async (url) => { title: pageTitle, link: url, description: pageTitle, - item: parseItems($), + item: await Promise.all(parseItems($, ctx)), }; }; exports.createHandler = (url) => async (ctx) => { - ctx.state.data = await exports.getPage(url); + ctx.state.data = await exports.getPage(url, ctx); }; -const parseItems = ($) => +const parseItems = ($, ctx) => $('.movie-box') .map((_, ele) => ({ title: $(ele) @@ -41,15 +41,108 @@ const parseItems = ($) => .text(), })) .toArray() - .map(render); - -const render = ({ title, thumb, link, pubDate, aid }) => ({ - title, - link, - pubDate, - description: ` -

${aid} - ${title}

+ .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; + } +}; diff --git a/lib/routes/javbus/western/genre.js b/lib/routes/javbus/western/genre.js index a498ba720b..faca0e5e36 100644 --- a/lib/routes/javbus/western/genre.js +++ b/lib/routes/javbus/western/genre.js @@ -3,5 +3,5 @@ const { getPage } = require('../util'); module.exports = async (ctx) => { const { gid } = ctx.params; - ctx.state.data = await getPage(`https://www.javbus.work/genre/${gid}`); + ctx.state.data = await getPage(`https://www.javbus.work/genre/${gid}`, ctx); }; diff --git a/lib/routes/javbus/western/star.js b/lib/routes/javbus/western/star.js index 17f5f66172..5793ecc897 100644 --- a/lib/routes/javbus/western/star.js +++ b/lib/routes/javbus/western/star.js @@ -3,5 +3,5 @@ const { getPage } = require('../util'); module.exports = async (ctx) => { const { sid } = ctx.params; - ctx.state.data = await getPage(`https://www.javbus.work/star/${sid}`); + ctx.state.data = await getPage(`https://www.javbus.work/star/${sid}`, ctx); };