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 = /