Removed Vivid wrapper, updated channel URLs.
This commit is contained in:
@@ -559,7 +559,6 @@ const networks = [
|
|||||||
slug: 'jayrock',
|
slug: 'jayrock',
|
||||||
name: 'JayRock Productions',
|
name: 'JayRock Productions',
|
||||||
url: 'http://jayrockcontent.com',
|
url: 'http://jayrockcontent.com',
|
||||||
parent: 'gamma',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'julesjordan',
|
slug: 'julesjordan',
|
||||||
|
|||||||
@@ -15036,12 +15036,12 @@ const sites = [
|
|||||||
name: 'Vivid Celeb',
|
name: 'Vivid Celeb',
|
||||||
url: 'https://www.vividceleb.com',
|
url: 'https://www.vividceleb.com',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
},
|
||||||
referer: 'https://www.thebrats.com',
|
{
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
slug: 'vivid',
|
||||||
scene: false,
|
name: 'Vivid',
|
||||||
lastNative: new Date('2018-03-25'),
|
url: 'https://www.vivid.com/en/videos/sites/vivid',
|
||||||
},
|
parent: 'vivid',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'thebrats',
|
slug: 'thebrats',
|
||||||
@@ -15058,122 +15058,72 @@ const sites = [
|
|||||||
{
|
{
|
||||||
slug: 'nineteen',
|
slug: 'nineteen',
|
||||||
name: 'Nineteen',
|
name: 'Nineteen',
|
||||||
url: 'http://www.nineteen.com',
|
url: 'https://www.vivid.com/en/videos/sites/nineteen',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-23'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'nastystepfamily',
|
slug: 'nastystepfamily',
|
||||||
name: 'Nasty Step Family',
|
name: 'Nasty Step Family',
|
||||||
url: 'http://www.nastystepfamily.com',
|
url: 'https://www.vivid.com/en/videos/sites/nastystepfamily',
|
||||||
|
tags: ['family'],
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-29'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'girlswhofuckgirls',
|
slug: 'girlswhofuckgirls',
|
||||||
name: 'Girls Who Fuck Girls',
|
name: 'Girls Who Fuck Girls',
|
||||||
url: 'http://www.girlswhofuckgirls.com',
|
url: 'https://www.vivid.com/en/videos/sites/girlswhofuckgirls',
|
||||||
|
tags: ['lesbian'],
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-05-21'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'petited',
|
slug: 'petited',
|
||||||
name: 'Petited',
|
name: 'Petited',
|
||||||
url: 'http://www.petited.com',
|
url: 'https://www.vivid.com/en/videos/sites/petited',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-28'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'orgytrain',
|
slug: 'orgytrain',
|
||||||
name: 'Orgy Train',
|
name: 'Orgy Train',
|
||||||
url: 'http://www.orgytrain.com',
|
url: 'https://www.vivid.com/en/videos/sites/orgytrain',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-09'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'momisamilf',
|
slug: 'momisamilf',
|
||||||
name: 'Mom Is A MILF',
|
name: 'Mom Is A MILF',
|
||||||
url: 'http://www.momisamilf.com',
|
url: 'https://www.vivid.com/en/videos/sites/momisamilf',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-25'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'blackwhitefuckfest',
|
slug: 'blackwhitefuckfest',
|
||||||
name: 'Black White Fuck Fest',
|
name: 'Black White Fuck Fest',
|
||||||
url: 'http://www.blackwhitefuckfest.com',
|
url: 'https://www.vivid.com/en/videos/sites/blackwhitefuckfest',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-01-30'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: '65inchhugeasses',
|
slug: '65inchhugeasses',
|
||||||
name: '65 Inch Huge Asses',
|
name: '65 Inch Huge Asses',
|
||||||
url: 'http://www.65inchhugeasses.com',
|
url: 'https://www.vivid.com/en/videos/sites/65inchhugeasses',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2019-05-18'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'brandnewfaces',
|
slug: 'brandnewfaces',
|
||||||
name: 'Brand New Faces',
|
name: 'Brand New Faces',
|
||||||
url: 'http://www.brandnewfaces.com',
|
url: 'https://www.vivid.com/en/videos/sites/brandnewfaces',
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2018-02-28'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'vividclassic',
|
slug: 'vividclassic',
|
||||||
name: 'Vivid Classic',
|
name: 'Vivid Classic',
|
||||||
url: 'http://www.vividclassic.com',
|
url: 'https://www.vivid.com/en/videos/sites/vividclassic',
|
||||||
|
parent: 'vivid',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
slug: 'tsdivas',
|
||||||
|
name: 'TS Divas',
|
||||||
|
url: 'https://www.vivid.com/en/videos/sites/tsdivas',
|
||||||
|
tags: ['transsexual'],
|
||||||
|
hasLogo: false,
|
||||||
parent: 'vivid',
|
parent: 'vivid',
|
||||||
parameters: {
|
|
||||||
referer: 'https://www.thebrats.com',
|
|
||||||
deep: 'https://www.thebrats.com/en/video',
|
|
||||||
scene: false,
|
|
||||||
lastNative: new Date('2016-06-29'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
// VIXEN
|
// VIXEN
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ const tokyohot = require('./tokyohot');
|
|||||||
// const topwebmodels = require('./topwebmodels');
|
// const topwebmodels = require('./topwebmodels');
|
||||||
const traxxx = require('./traxxx');
|
const traxxx = require('./traxxx');
|
||||||
const virtualtaboo = require('./virtualtaboo');
|
const virtualtaboo = require('./virtualtaboo');
|
||||||
const vivid = require('./vivid');
|
|
||||||
const vixen = require('./vixen');
|
const vixen = require('./vixen');
|
||||||
const wankzvr = require('./wankzvr');
|
const wankzvr = require('./wankzvr');
|
||||||
const whalemember = require('./whalemember');
|
const whalemember = require('./whalemember');
|
||||||
@@ -180,7 +179,6 @@ module.exports = {
|
|||||||
traxxx,
|
traxxx,
|
||||||
vipsexvault: porndoe,
|
vipsexvault: porndoe,
|
||||||
virtualtaboo,
|
virtualtaboo,
|
||||||
vivid,
|
|
||||||
vixen,
|
vixen,
|
||||||
wankzvr,
|
wankzvr,
|
||||||
westcoastproductions: adultempire,
|
westcoastproductions: adultempire,
|
||||||
|
|||||||
@@ -1,134 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
/* eslint-disable no-unused-vars */
|
|
||||||
const { get, ed } = require('../utils/q');
|
|
||||||
const { fetchApiLatest, fetchApiUpcoming, fetchScene, fetchApiProfile } = require('./gamma');
|
|
||||||
const http = require('../utils/http');
|
|
||||||
const slugify = require('../utils/slugify');
|
|
||||||
|
|
||||||
function scrapeLatestNative(scenes, site) {
|
|
||||||
return scenes.map((scene) => {
|
|
||||||
const release = {};
|
|
||||||
|
|
||||||
release.entryId = scene.id;
|
|
||||||
release.url = `${site.url}${scene.url}`;
|
|
||||||
|
|
||||||
release.title = scene.name;
|
|
||||||
release.date = ed(scene.release_date, 'YYYY-MM-DD');
|
|
||||||
release.duration = parseInt(scene.runtime, 10) * 60;
|
|
||||||
|
|
||||||
release.actors = scene.cast?.map((actor) => ({
|
|
||||||
name: actor.stagename,
|
|
||||||
gender: actor.gender.toLowerCase(),
|
|
||||||
avatar: actor.placard,
|
|
||||||
})) || [];
|
|
||||||
|
|
||||||
release.stars = Number(scene.rating);
|
|
||||||
release.poster = scene.placard_800 || scene.placard;
|
|
||||||
|
|
||||||
return release;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrapeSceneNative({ html, q, qa }, url, _site) {
|
|
||||||
const release = { url };
|
|
||||||
|
|
||||||
release.entryId = new URL(url).pathname.split('/')[2]; // eslint-disable-line prefer-destructuring
|
|
||||||
|
|
||||||
release.title = q('.scene-h2-heading', true);
|
|
||||||
release.description = q('.indie-model-p', true);
|
|
||||||
|
|
||||||
const dateString = qa('h5').find((el) => /Released/.test(el.textContent)).textContent;
|
|
||||||
release.date = ed(dateString, 'MMM DD, YYYY', /\w+ \d{1,2}, \d{4}/);
|
|
||||||
|
|
||||||
const duration = qa('h5').find((el) => /Runtime/.test(el.textContent)).textContent;
|
|
||||||
const [hours, minutes] = duration.match(/\d+/g);
|
|
||||||
|
|
||||||
if (minutes) release.duration = (hours * 3600) + (minutes * 60);
|
|
||||||
else release.duration = hours * 60; // scene shorter that 1hr, hour match are minutes
|
|
||||||
|
|
||||||
release.actors = qa('h4 a[href*="/stars"], h4 a[href*="/celebs"]', true);
|
|
||||||
release.tags = qa('h5 a[href*="/categories"]', true);
|
|
||||||
|
|
||||||
const [poster, trailer] = html.match(/https:\/\/content.vivid.com(.*)(.jpg|.mp4)/g);
|
|
||||||
release.poster = poster;
|
|
||||||
|
|
||||||
if (trailer) {
|
|
||||||
release.trailer = {
|
|
||||||
src: trailer,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const channel = q('h5 a[href*="/sites"]', true);
|
|
||||||
if (channel) release.channel = channel.replace(/\.\w+/, '');
|
|
||||||
|
|
||||||
return release;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchLatestNative(site, page = 1) {
|
|
||||||
if (site.parameters?.useGamma) {
|
|
||||||
return fetchApiLatest(site, page);
|
|
||||||
}
|
|
||||||
|
|
||||||
const apiUrl = `${site.url}/videos/api/?limit=50&offset=${(page - 1) * 50}&sort=datedesc`;
|
|
||||||
const res = await http.get(apiUrl, {
|
|
||||||
decodeJSON: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (res.statusCode === 200 && res.body.code === 200) {
|
|
||||||
return scrapeLatestNative(res.body.responseData, site);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchUpcomingNative(site) {
|
|
||||||
if (site.parameters?.useGamma) {
|
|
||||||
return fetchApiUpcoming(site);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchSceneNative(url, site, release) {
|
|
||||||
if (site.parameters?.useGamma) {
|
|
||||||
return fetchScene(url, site, release);
|
|
||||||
}
|
|
||||||
|
|
||||||
const res = await get(url);
|
|
||||||
|
|
||||||
return res.ok ? scrapeSceneNative(res.item, url, site) : res.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchSceneWrapper(url, site, release) {
|
|
||||||
const scene = await fetchScene(url, site, release);
|
|
||||||
|
|
||||||
if (scene.date - new Date(site.parameters?.lastNative) <= 0) {
|
|
||||||
// scene is probably still available on Vivid site, use search API to get URL and original date
|
|
||||||
const searchUrl = `${site.url}/videos/api/?limit=10&sort=datedesc&search=${encodeURI(scene.title)}`;
|
|
||||||
const searchRes = await http.get(searchUrl, {
|
|
||||||
decodeJSON: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (searchRes.statusCode === 200 && searchRes.body.code === 200) {
|
|
||||||
const sceneMatch = searchRes.body.responseData.find((item) => slugify(item.name) === slugify(scene.title));
|
|
||||||
|
|
||||||
if (sceneMatch) {
|
|
||||||
return {
|
|
||||||
...scene,
|
|
||||||
url: `${site.url}${sceneMatch.url}`,
|
|
||||||
date: ed(sceneMatch.release_date, 'YYYY-MM-DD'),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return scene;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
fetchLatest: fetchApiLatest,
|
|
||||||
fetchProfile: fetchApiProfile,
|
|
||||||
fetchUpcoming: fetchApiUpcoming,
|
|
||||||
fetchScene: fetchSceneWrapper,
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user