From 209a81ef71738ed578de858147237e6dd7eec5ae Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Sun, 1 Mar 2026 19:58:35 +0100 Subject: [PATCH] Removed Vivid wrapper, updated channel URLs. --- seeds/01_networks.js | 1 - seeds/02_sites.js | 102 ++++++++--------------------- src/scrapers/releases.js | 2 - src/scrapers/vivid.js | 134 --------------------------------------- 4 files changed, 26 insertions(+), 213 deletions(-) delete mode 100755 src/scrapers/vivid.js diff --git a/seeds/01_networks.js b/seeds/01_networks.js index a23157a0..a31fa0ad 100755 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -559,7 +559,6 @@ const networks = [ slug: 'jayrock', name: 'JayRock Productions', url: 'http://jayrockcontent.com', - parent: 'gamma', }, { slug: 'julesjordan', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 89e1e235..4bd1d893 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -15036,12 +15036,12 @@ const sites = [ name: 'Vivid Celeb', url: 'https://www.vividceleb.com', parent: 'vivid', - parameters: { - referer: 'https://www.thebrats.com', - deep: 'https://www.thebrats.com/en/video', - scene: false, - lastNative: new Date('2018-03-25'), - }, + }, + { + slug: 'vivid', + name: 'Vivid', + url: 'https://www.vivid.com/en/videos/sites/vivid', + parent: 'vivid', }, { slug: 'thebrats', @@ -15058,122 +15058,72 @@ const sites = [ { slug: 'nineteen', name: 'Nineteen', - url: 'http://www.nineteen.com', + url: 'https://www.vivid.com/en/videos/sites/nineteen', 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', name: 'Nasty Step Family', - url: 'http://www.nastystepfamily.com', + url: 'https://www.vivid.com/en/videos/sites/nastystepfamily', + tags: ['family'], 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', name: 'Girls Who Fuck Girls', - url: 'http://www.girlswhofuckgirls.com', + url: 'https://www.vivid.com/en/videos/sites/girlswhofuckgirls', + tags: ['lesbian'], 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', name: 'Petited', - url: 'http://www.petited.com', + url: 'https://www.vivid.com/en/videos/sites/petited', 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', name: 'Orgy Train', - url: 'http://www.orgytrain.com', + url: 'https://www.vivid.com/en/videos/sites/orgytrain', 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', name: 'Mom Is A MILF', - url: 'http://www.momisamilf.com', + url: 'https://www.vivid.com/en/videos/sites/momisamilf', 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', name: 'Black White Fuck Fest', - url: 'http://www.blackwhitefuckfest.com', + url: 'https://www.vivid.com/en/videos/sites/blackwhitefuckfest', 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', name: '65 Inch Huge Asses', - url: 'http://www.65inchhugeasses.com', + url: 'https://www.vivid.com/en/videos/sites/65inchhugeasses', 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', name: 'Brand New Faces', - url: 'http://www.brandnewfaces.com', + url: 'https://www.vivid.com/en/videos/sites/brandnewfaces', 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', 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', - parameters: { - referer: 'https://www.thebrats.com', - deep: 'https://www.thebrats.com/en/video', - scene: false, - lastNative: new Date('2016-06-29'), - }, }, // VIXEN { diff --git a/src/scrapers/releases.js b/src/scrapers/releases.js index 3071b97c..680a93a7 100644 --- a/src/scrapers/releases.js +++ b/src/scrapers/releases.js @@ -74,7 +74,6 @@ const tokyohot = require('./tokyohot'); // const topwebmodels = require('./topwebmodels'); const traxxx = require('./traxxx'); const virtualtaboo = require('./virtualtaboo'); -const vivid = require('./vivid'); const vixen = require('./vixen'); const wankzvr = require('./wankzvr'); const whalemember = require('./whalemember'); @@ -180,7 +179,6 @@ module.exports = { traxxx, vipsexvault: porndoe, virtualtaboo, - vivid, vixen, wankzvr, westcoastproductions: adultempire, diff --git a/src/scrapers/vivid.js b/src/scrapers/vivid.js deleted file mode 100755 index 3ec53bf1..00000000 --- a/src/scrapers/vivid.js +++ /dev/null @@ -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, -};