fix(route): JavBus alternative domain related links (#9336)

* fix(route): JavBus alternative domain related links

* fix: add magnets and previews in cache

* fix: remove redundant cache
This commit is contained in:
Ethan Shen
2022-03-19 20:35:00 +08:00
committed by GitHub
parent 3c8a9a3043
commit b2137fc283
21 changed files with 261 additions and 385 deletions
+8 -4
View File
@@ -399,15 +399,15 @@ BT 之家的域名会变更,本路由以 <https://www.btbtt20.com> 为默认
::: tip 提示
JavBus 有多个备用域名,本路由默认使用永久域名 <https://javbus.com> ,若该域名无法访问,可以通过在路由最后加上 `?domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://javsee.icu>,则在所有 JavBus 路由最后加上 `?domain=javsee.icu` 即可,此时路由为 [`/javbus/home?domain=javsee.icu`](https://rsshub.app/javbus/home?domain=javsee.icu)
JavBus 有多个备用域名,本路由默认使用永久域名 <https://javbus.com> ,若该域名无法访问,可以通过在路由最后加上 `?domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://javsee.icu>,则在所有 JavBus 路由最后加上 `?domain=javsee.icu` 即可,此时路由为 [`/javbus?domain=javsee.icu`](https://rsshub.app/javbus?domain=javsee.icu)
值得注意的是 **欧陆风云** 的域名与主域名有所不同,其备用域名亦然,本路由默认使用域名 <https://javbus.red> ,若该域名无法访问,可以通过在路由最后加上 `?western_domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://javsee.one>,则在所有 JavBus **欧陆风云** 路由最后加上 `?western_domain=javsee.one` 即可,此时路由为 [`/javbus/western/home?western_domain=javsee.one`](https://rsshub.app/javbus/western/home?western_domain=javsee.one)
值得注意的是 **欧陆风云** 的域名与主域名有所不同,其备用域名亦然,本路由默认使用域名 <https://javbus.red> ,若该域名无法访问,可以通过在路由最后加上 `?western_domain=<域名>` 指定路由访问的域名。如指定备用域名为 <https://javsee.one>,则在所有 JavBus **欧陆风云** 路由最后加上 `?western_domain=javsee.one` 即可,此时路由为 [`/javbus/western?western_domain=javsee.one`](https://rsshub.app/javbus/western?western_domain=javsee.one)
:::
### 首页
<Route author="MegrezZhu CoderTonyChan" example="/javbus/home" path="/javbus/home"/>
<Route author="MegrezZhu CoderTonyChan nczitzk" example="/javbus" path="/javbus"/>
### 分类
@@ -429,6 +429,10 @@ JavBus 有多个备用域名,本路由默认使用永久域名 <https://javbus
<Route author="MegrezZhu CoderTonyChan Felix2yu" example="/javbus/label/x8" path="/javbus/label/:labelid" :paramsDesc="['发行商id,详见作品右侧发行商的链接']" />
### 导演
<Route author="MegrezZhu CoderTonyChan Felix2yu" example="/javbus/director/4gv" path="/javbus/director/directorId" :paramsDesc="['导演id,详见作品右侧导演的链接']" />
### 首页 / 步兵
<Route author="MegrezZhu CoderTonyChan" example="/javbus/uncensored/home" path="/javbus/uncensored/home"/>
@@ -447,7 +451,7 @@ JavBus 有多个备用域名,本路由默认使用永久域名 <https://javbus
### 首页 / 欧陆风云
<Route author="MegrezZhu CoderTonyChan" example="/javbus/western/home" path="/javbus/western/home"/>
<Route author="MegrezZhu CoderTonyChan" example="/javbus/western" path="/javbus/western"/>
### 分类 / 欧陆风云
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
const { gid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/genre/${gid}`, ctx);
};
-5
View File
@@ -1,5 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
ctx.state.data = await getPage(getDomain(ctx), ctx);
};
+153
View File
@@ -0,0 +1,153 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const { parseDate } = require('@/utils/parse-date');
const { art } = require('@/utils/render');
const path = require('path');
module.exports = async (ctx) => {
const isWestern = /^\/western/.test(ctx.path);
const rootUrl = `https://www.${ctx.query.domain ?? 'javbus.com'}`;
const westernUrl = `https://www.${ctx.query.western_domain ?? 'javbus.red'}`;
const currentUrl = `${isWestern ? westernUrl : rootUrl}${ctx.path.replace(/^\/western/, '').replace(/\/home/, '')}`;
const response = await got({
method: 'get',
url: currentUrl,
});
const $ = cheerio.load(response.data);
let items = $('.movie-box')
.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 30)
.toArray()
.map((item) => {
item = $(item);
return {
link: item.attr('href'),
guid: item.find('date').first().text(),
pubDate: parseDate(item.find('date').last().text()),
};
});
items = await Promise.all(
items.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'get',
url: item.link,
});
const content = cheerio.load(detailResponse.data);
content('.genre').last().parent().remove();
content('input[type="checkbox"], button').remove();
const stars = content('.avatar-box span')
.toArray()
.map((s) => content(s).text());
const cache = {
author: stars.join(', '),
title: content('h3').text(),
category: content('.genre label')
.toArray()
.map((c) => content(c).text())
.concat(stars),
info: content('.row.movie').html(),
thumbs: content('.sample-box')
.toArray()
.map((i) => {
const thumbSrc = content(i).attr('href');
return /^http/.test(thumbSrc) ? thumbSrc : `${rootUrl}${thumbSrc}`;
}),
};
let magnets, videoSrc, videoPreview;
// To fetch magnets.
try {
const matches = detailResponse.data.match(/var gid = (\d+);[\s\S]*var uc = (\d+);[\s\S]*var img = '(.*)';/);
const magnetResponse = await got({
method: 'get',
url: `${rootUrl}/ajax/uncledatoolsbyajax.php`,
searchParams: {
gid: matches[1],
lang: 'zh',
img: matches[3],
uc: matches[2],
floor: 800,
},
headers: {
Referer: item.link,
},
});
const content = cheerio.load(`<table>${magnetResponse.data}</table>`);
magnets = content('tr')
.toArray()
.map((tr) => {
const td = content(tr).find('a[href]');
return {
title: td.first().text().trim(),
link: td.first().attr('href'),
size: td.eq(1).text().trim(),
date: td.last().text().trim(),
};
});
if (magnets) {
item.enclosure_url = magnets[0].link;
item.enclosure_type = 'application/x-bittorrent';
}
} catch (e) {
// no-empty
}
// If the video is not western, go fetch preview.
if (!isWestern) {
try {
const avgleResponse = await got({
method: 'get',
url: `https://api.avgle.com/v1/jav/${item.guid}/0`,
});
// full video
videoSrc = avgleResponse.data.response.videos[0]?.embedded_url ?? '';
// video preview
videoPreview = avgleResponse.data.response.videos[0]?.preview_video_url ?? '';
} catch (e) {
// no-empty
}
}
item.author = cache.author;
item.title = cache.title;
item.category = cache.category;
item.description = art(path.join(__dirname, 'templates/description.art'), {
info: cache.info,
thumbs: cache.thumbs,
magnets,
videoSrc,
videoPreview,
});
return item;
})
)
);
const title = $('head title').text();
ctx.state.data = {
title: `${/^JavBus/.test(title) ? '' : 'JavBus - '}${title.replace(/ - AV磁力連結分享/, '')}`,
link: currentUrl,
item: items,
};
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
const { labelid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/label/${labelid}`, ctx);
};
+2
View File
@@ -1,4 +1,5 @@
module.exports = {
'/': ['MegrezZhu', 'CoderTonyChan', 'nczitzk'],
'/genre/:gid': ['MegrezZhu', 'CoderTonyChan'],
'/home': ['MegrezZhu', 'CoderTonyChan'],
'/label/:labelid': ['MegrezZhu', 'CoderTonyChan', 'Felix2yu'],
@@ -9,6 +10,7 @@ module.exports = {
'/uncensored/genre/:gid': ['MegrezZhu', 'CoderTonyChan'],
'/uncensored/series/:seriesid': ['MegrezZhu', 'CoderTonyChan', 'Felix2yu'],
'/uncensored/star/:sid': ['MegrezZhu', 'CoderTonyChan'],
'/western': ['MegrezZhu', 'CoderTonyChan', 'nczitzk'],
'/western/home': ['MegrezZhu', 'CoderTonyChan'],
'/western/genre/:gid': ['MegrezZhu', 'CoderTonyChan'],
'/western/series/:seriesid': ['MegrezZhu', 'CoderTonyChan', 'Felix2yu'],
+79 -65
View File
@@ -1,3 +1,69 @@
const javbus = {
_name: 'JavBus',
www: [
{
title: '首页',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/',
target: '/javbus/home',
},
{
title: '分类',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/genre/:gid',
target: '/javbus/genre/:gid',
},
{
title: '演员',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/star/:sid',
target: '/javbus/star/:sid',
},
{
title: '系列',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/series/:seriesid',
target: '/javbus/series/:seriesid',
},
{
title: '制作商',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/studio/:studioid',
target: '/javbus/studio/:studioid',
},
{
title: '发行商',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/label/:labelid',
target: '/javbus/label/:labelid',
},
{
title: '首页 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored',
target: '/javbus/uncensored/home',
},
{
title: '分类 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/genre/:gid',
target: '/javbus/uncensored/genre/:gid',
},
{
title: '演员 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/star/:sid',
target: '/javbus/uncensored/star/:sid',
},
{
title: '系列 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/series/:seriesid',
target: '/javbus/uncensored/series/:seriesid',
},
],
};
const westernJavbus = {
_name: 'JavBus',
www: [
@@ -29,71 +95,19 @@ const westernJavbus = {
};
module.exports = {
'javbus.com': {
_name: 'JavBus',
www: [
{
title: '首页',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/',
target: '/javbus/home',
},
{
title: '分类',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/genre/:gid',
target: '/javbus/genre/:gid',
},
{
title: '演员',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/star/:sid',
target: '/javbus/star/:sid',
},
{
title: '系列',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/series/:seriesid',
target: '/javbus/series/:seriesid',
},
{
title: '制作商',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/studio/:studioid',
target: '/javbus/studio/:studioid',
},
{
title: '发行商',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/label/:labelid',
target: '/javbus/label/:labelid',
},
{
title: '首页 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored',
target: '/javbus/uncensored/home',
},
{
title: '分类 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/genre/:gid',
target: '/javbus/uncensored/genre/:gid',
},
{
title: '演员 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/star/:sid',
target: '/javbus/uncensored/star/:sid',
},
{
title: '系列 / 步兵',
docs: 'https://docs.rsshub.app/multimedia.html#javbus',
source: '/uncensored/series/:seriesid',
target: '/javbus/uncensored/series/:seriesid',
},
],
},
'javbus.com': javbus,
'javsee.club': javbus,
'javsee.icu': javbus,
'javsee.work': javbus,
'seejav.bar': javbus,
'seejav.bid': javbus,
'seejav.blog': javbus,
'seejav.cloud': javbus,
'seejav.club': javbus,
'seejav.men': javbus,
'seejav.pw': javbus,
'javbus.one': westernJavbus,
'javbus.org': westernJavbus,
'javbus.red': westernJavbus,
};
+1 -14
View File
@@ -1,16 +1,3 @@
module.exports = (router) => {
router.get('/genre/:gid', require('./genre'));
router.get('/home', require('./home'));
router.get('/label/:labelid', require('./label'));
router.get('/series/:seriesid', require('./series'));
router.get('/star/:sid', require('./star'));
router.get('/studio/:studioid', require('./studio'));
router.get('/uncensored/home', require('./uncensored/home'));
router.get('/uncensored/genre/:gid', require('./uncensored/genre'));
router.get('/uncensored/series/:seriesid', require('./uncensored/series'));
router.get('/uncensored/star/:sid', require('./uncensored/star'));
router.get('/western/home', require('./western/home'));
router.get('/western/genre/:gid', require('./western/genre'));
router.get('/western/series/:seriesid', require('./western/series'));
router.get('/western/star/:sid', require('./western/star'));
router.get(/([\w\d/-]+)?/, require('./index'));
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
const { seriesid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/series/${seriesid}`, ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
const { sid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/star/${sid}`, ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('./util');
module.exports = async (ctx) => {
const { studioid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/studio/${studioid}`, ctx);
};
+18
View File
@@ -0,0 +1,18 @@
{{@ info }}
<br>
{{if videoSrc}}
<a href="{{ videoSrc }}">觀看完整影片</a>
{{ /if }}
<br>
{{if videoPreview}}
<video controls><source src="{{ videoPreview }}" type="video/mp4"></video>
{{/if}}
<br>
<h4>磁力連結投稿</h4>
{{each magnets magnet}}
<li><a href="{{ magnet.link }}">{{ magnet.title }} [{{ magnet.size }}] ({{ magnet.date }})</a></li>
{{/each}}
<h4>樣品圖像</h4>
{{each thumbs}}
<img src="{{ $value }}">
{{/each}}
-6
View File
@@ -1,6 +0,0 @@
const { getPage, getDomain } = require('../util');
module.exports = async (ctx) => {
const { gid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/uncensored/genre/${gid}`, ctx);
};
-5
View File
@@ -1,5 +0,0 @@
const { getPage, getDomain } = require('../util');
module.exports = async (ctx) => {
ctx.state.data = await getPage(`${getDomain(ctx)}/uncensored`, ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('../util');
module.exports = async (ctx) => {
const { seriesid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/uncensored/series/${seriesid}`, ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getDomain } = require('../util');
module.exports = async (ctx) => {
const { sid } = ctx.params;
ctx.state.data = await getPage(`${getDomain(ctx)}/uncensored/star/${sid}`, ctx);
};
-211
View File
@@ -1,211 +0,0 @@
const got = require('@/utils/got');
const { load } = require('cheerio');
const { parseDate } = require('@/utils/parse-date');
exports.getDomain = (ctx) => `https://www.${ctx.query.domain ?? 'javbus.com'}`;
exports.getWesternDomain = (ctx) => `https://www.${ctx.query.western_domain ?? 'javbus.red'}`;
exports.getPage = async (url, ctx) => {
const { data } = await got(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)),
};
};
const parseItems = ($, ctx) =>
$('.movie-box')
.map((_, ele) => ({
title: $(ele).find('img').attr('title'),
thumb: $(ele).find('img').attr('src'),
link: $(ele).attr('href'),
pubDate: parseDate($(ele).find('date:nth-child(4)').text(), 'YYYY-MM-DD'),
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) => `<img src="${url}"><br />`);
}
return {
title,
link,
pubDate,
description: `
<h3>${title}</h3>
<br />
<img src="${thumb.replace(/\/thumbs?\//, '/cover/').replace('.jpg', '_b.jpg')}" />
${detail.filmId ? `<h3>識別碼 : ${detail.filmId}</h3>` : ''}
${detail.filmTime ? `<h3>发售日期 : ${detail.filmTime}</h3>` : ''}
${detail.actresses ? `<h3>女优 : ${detail.actresses}</h3>` : ''}
${detail.filmEstabName ? `<h3>發行商 : ${detail.filmEstabName}</h3>` : ''}
${detail.filmMakerbName ? `<h3>製作商 : ${detail.filmMakerbName}</h3>` : ''}
${detail.seriesName ? `<h3>系列 : ${detail.seriesName}</h3>` : ''}
${detail.filmLast ? `<h3>影片时长 : ${detail.filmLast}</h3>` : ''}
${detail.screenData ? `<h3>影片截图 : </h3>${detail.imgHTML.join('')}` : ''}
${detail.videolink ? `<h3>在线观看 : ${detail.videolink}</h3>` : ''}
${detail.magnetlinks ? `<h3>下载地址 : </h3><br />${detail.magnetlinks.join('')}` : ''}
${detail.videoplayer ? `<hr /><h3>视频预览 : </h3><br />${detail.videoplayer}` : ''}
`.trim(),
};
});
const getDetail = async (link, ctx) =>
await ctx.cache.tryGet(link, async () => {
const resp = await got(link);
const detailPage = resp.data;
// 演员
const actressReg = /<a class="avatar-box"[\s\S]*?<\/a>/g;
let match = detailPage.match(actressReg);
let actresses = [];
if (match) {
match.map((i) => {
const name = /<span>(.*?)<\/span>/.exec(i)[1];
actresses = actresses.concat(name);
return null;
});
} else {
actresses = null; // []
}
// 影片详情
// const filmCover = /<a class="bigImage" href="(.*?)"/.exec(detailPage)[1];
// const filmName = /<a class="bigImage" href="(.*?)" title="(.*?)"/.exec(detailPage)[2];
let filmId = /<span style="color:#CC0000;">([\s\S]*?)<\/span>/.exec(detailPage);
if (filmId) {
filmId = filmId[1];
} else {
filmId = null;
}
let filmTime = /<span class="header">發行日期:<\/span>([\s\S]*?)<\/p>/.exec(detailPage);
if (filmTime) {
filmTime = filmTime[1];
} else {
filmTime = null;
}
let filmLast = /<span class="header">長度:<\/span>([\s\S]*?)<\/p>/.exec(detailPage);
if (filmLast) {
const lastmins = /\d+/.exec(filmLast[1]);
if (lastmins) {
const hours = Math.floor(lastmins / 60);
let mins = lastmins % 60;
mins = mins === 0 ? '00' : mins;
filmLast = hours + ':' + mins;
} else {
filmLast = null;
}
} else {
filmLast = null;
}
let filmEstabName = /<span class="header">發行商:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage);
if (filmEstabName) {
filmEstabName = filmEstabName[2];
} else {
filmEstabName = null;
}
let filmMakerbName = /<span class="header">製作商:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage);
if (filmMakerbName) {
filmMakerbName = filmMakerbName[2];
} else {
filmMakerbName = null;
}
let seriesName = /<span class="header">系列:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage);
if (seriesName) {
seriesName = seriesName[2];
} else {
seriesName = null;
}
let directorName = /<span class="header">導演:[\s\S]*?"(.*?)">(.*?)<\/a>/.exec(detailPage);
if (directorName) {
directorName = directorName[2];
} else {
directorName = null;
}
const code = /<span class="header">識別碼:[\s\S]*?">([\s\S]*?)<\/span>/.exec(detailPage)[1];
// 影片截图
const regScreenshot = /<a class="sample-box" href="(.*?)"[\s\S]*?<img src="(.*?)">/g;
match = detailPage.match(regScreenshot);
let screenData = [];
if (match) {
screenData = match.map((i) => /<a class="sample-box" href="(.*?)"[\s\S]*?<img src="(.*?)">/g.exec(i)[1]);
} else {
screenData = null;
}
let magnetlinks = [];
try {
const filmGid = /gid = ([0-9]*?);/.exec(detailPage);
const filmUc = /uc = ([0-9]*?);/.exec(detailPage);
const filmImg = /var img = '(.*?)';/.exec(detailPage);
const filmFloor = Math.floor(Math.random() * 1000 + 1);
const apiurl = `${exports.getDomain(ctx)}/ajax/uncledatoolsbyajax.php?gid=${filmGid[1]}&lang=zh&img=${filmImg[1]}&uc=${filmUc[1]}&floor=${filmFloor}`;
const apiresp = await got({
method: 'get',
url: apiurl,
headers: {
Referer: link,
},
});
const magnettable = apiresp.data;
match = magnettable.match(/<tr onmouseover=[\s\S]*?<\/tr>/gm);
if (match) {
magnetlinks = match.map((str) => {
// magnet地址
const mlink = /td width="70%" onclick="window.open\('(magnet.*?)',/.exec(str)[1];
// console.log(str);
// 提取a链接
const mrow = str.match(/<a [\s\S]*?magnet[\s\S]*?">([\s\S]*?)</gm);
// magnet名称
const mname = /<a [\s\S]*?magnet[\s\S]*?">([\s\S]*?)</.exec(mrow[0])[1].trim();
// magnet大小
const msize = /<a [\s\S]*?magnet[\s\S]*?">([\s\S]*?)</.exec(mrow[1])[1].trim();
// return "<a href=\""+mlink+"\">"+mname+" -- "+msize+ "<\/a><textarea readonly rows=\"5\" cols=\"50\">"+ mlink + "<\/textarea><br \/>";
return '<a href="' + mlink + '">' + mname + ' -- ' + msize + '</a><br />';
});
} else {
magnetlinks = null;
}
} catch (e) {
magnetlinks = null;
}
let videolink = null;
let videoplayer = null;
const avgleurl = `https://api.avgle.com/v1/jav/${filmId}/0`;
try {
// 尝试通过Avgle接口获取视频信息
const avgleresp = await got.get(avgleurl);
// 获取到的视频数量
const videonum = avgleresp.data.response.total_videos;
// 获取到的视频地址
const videos = avgleresp.data.response.videos;
if (videonum > 0) {
// 获取完整的视频地址
const embedded_url = videos[0].embedded_url;
videolink = `<a href="${embedded_url}?referer=t66y.com">点击观看完整视频</a>`;
const preview_url = videos[0].preview_url;
if (videos[0].hasOwnProperty('preview_video_url')) {
// 获取预览视频地址
const preview_video_url = videos[0].preview_video_url;
videoplayer = `<video controls="controls" poster="${preview_url}?referer=t66y.com" src="${preview_video_url}?referer=t66y.com"> </video>`;
}
}
} catch (err) {
// 无需处理
}
const detail = { actresses, filmId, filmTime, filmLast, filmEstabName, filmMakerbName, seriesName, directorName, code, screenData, magnetlinks, videoplayer, videolink };
return detail;
});
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getWesternDomain } = require('../util');
module.exports = async (ctx) => {
const { gid } = ctx.params;
ctx.state.data = await getPage(`${getWesternDomain(ctx)}/genre/${gid}`, ctx);
};
-5
View File
@@ -1,5 +0,0 @@
const { getPage, getWesternDomain } = require('../util');
module.exports = async (ctx) => {
ctx.state.data = await getPage(getWesternDomain(ctx), ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getWesternDomain } = require('../util');
module.exports = async (ctx) => {
const { seriesid } = ctx.params;
ctx.state.data = await getPage(`${getWesternDomain(ctx)}/series/${seriesid}`, ctx);
};
-7
View File
@@ -1,7 +0,0 @@
const { getPage, getWesternDomain } = require('../util');
module.exports = async (ctx) => {
const { sid } = ctx.params;
ctx.state.data = await getPage(`${getWesternDomain(ctx)}/star/${sid}`, ctx);
};