diff --git a/package-lock.json b/package-lock.json index 46be58eb..5d5c33e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -89,7 +89,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.37", "undici": "^5.28.1", - "unprint": "^0.14.3", + "unprint": "^0.15.0", "url-pattern": "^1.0.3", "v-tooltip": "^2.1.3", "video.js": "^8.6.1", @@ -18312,9 +18312,9 @@ } }, "node_modules/unprint": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.14.3.tgz", - "integrity": "sha512-frhe+/Cc9YzDhPmWB9oyTRWl6PPgtr91ayQkPx0J+5O1UlRd/cIcqF8RdhZnjl6DjibYB5aCX7+kmXGsQnqXLg==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.15.0.tgz", + "integrity": "sha512-F/nfsSAPoQFfZCYGsxOxaNX05jfzQTP/lLo3BUeOPotp9RaRfcI6ylf6ts6GqFoMAD1Y6I7M31MiriDc+SgNDQ==", "dependencies": { "axios": "^0.27.2", "bottleneck": "^2.19.5", diff --git a/package.json b/package.json index 62613836..fe3bcd54 100755 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.37", "undici": "^5.28.1", - "unprint": "^0.14.3", + "unprint": "^0.15.0", "url-pattern": "^1.0.3", "v-tooltip": "^2.1.3", "video.js": "^8.6.1", diff --git a/seeds/01_networks.js b/seeds/01_networks.js index fac4c61d..6ebf9ab1 100755 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -331,7 +331,7 @@ const networks = [ }, { slug: 'fakehub', - name: 'Fake Hub', + name: 'FakeHub', url: 'https://www.fakehub.com', description: 'Wherever they go, there is porn. Hospital, Taxis, Casting… Maybe fucking to a fake cop, fake agent or fake taxi driver. And we record it all.', parameters: { @@ -739,6 +739,11 @@ const networks = [ url: 'https://vipsexvault.com', parent: 'porndoe', }, + { + slug: 'virtualtaboo', + name: 'Virtual Taboo', + url: 'https://virtualtaboo.com', + }, { slug: 'vivid', name: 'Vivid', @@ -748,7 +753,7 @@ const networks = [ }, { slug: 'vixen', - name: 'Vixen', + name: 'VIXEN', url: 'https://www.vixen.com', description: 'Vixen.com features the world’s finest cinematic adult films with 4K quality and high-end erotic photography.', }, diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 22528e50..873daecd 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -5311,7 +5311,7 @@ const sites = [ }, { slug: '5kporn', - name: '5K Porn', + name: '5Kporn', url: 'https://www.5kporn.com', tags: ['5k'], parent: 'kellymadison', @@ -5322,7 +5322,7 @@ const sites = [ }, { slug: '5kteens', - name: '5K Teens', + name: '5Kteens', url: 'https://www.5kteens.com', tags: ['5k'], parent: 'kellymadison', @@ -20507,6 +20507,37 @@ const sites = [ url: 'https://vipsexvault.com/channels/pinup-sex.en.html', parent: 'vipsexvault', }, + // VIRTUAL TABOO + { + slug: 'virtualtaboo', + name: 'Virtual Taboo', + url: 'https://www.virtualtaboo.com', + tags: ['vr'], + parent: 'virtualtaboo', + parameters: { + latest: '/videos', + }, + }, + { + slug: 'onlytarts', + name: 'OnlyTarts', + url: 'https://www.onlytarts.com', + parent: 'virtualtaboo', + }, + { + slug: 'oopsfamily', + name: 'Oops Family', + url: 'https://www.oopsfamily.com', + tags: ['family'], + parent: 'virtualtaboo', + }, + { + slug: 'darkroomvr', + name: 'Dark Room VR', + url: 'https://www.darkroomvr.com', + tags: ['vr'], + parent: 'virtualtaboo', + }, // VIVID { slug: 'vividceleb', @@ -20655,14 +20686,14 @@ const sites = [ // VIXEN { slug: 'vixen', - name: 'Vixen', + name: 'VIXEN', description: 'Vixen.com features the world’s finest cinematic adult films with 4K quality and high-end erotic photography.', url: 'https://www.vixen.com', parent: 'vixen', }, { slug: 'blacked', - name: 'Blacked', + name: 'BLACKED', description: 'Porn videos of beautiful girls in first time interracial porn videos. BLACKED has the hottest pornstars in HD sex videos.', url: 'https://www.blacked.com', tags: ['interracial', 'bbc'], @@ -20670,7 +20701,7 @@ const sites = [ }, { slug: 'tushy', - name: 'Tushy', + name: 'TUSHY', description: 'Watch the world\'s best HD Anal videos! Featuring beautiful, never before seen girls in first time anal. Exclusively on Tushy.com', url: 'https://www.tushy.com', tags: ['anal'], @@ -20678,7 +20709,7 @@ const sites = [ }, { slug: 'blackedraw', - name: 'Blacked Raw', + name: 'BLACKED RAW', description: 'Experience real women in interracial sex videos. Passionate sex with beautiful pornstars. No photoshop just the highest quality porn. Everything you see is real.', url: 'https://www.blackedraw.com', tags: ['interracial', 'bbc'], @@ -20686,7 +20717,7 @@ const sites = [ }, { slug: 'tushyraw', - name: 'Tushy Raw', + name: 'TUSHY RAW', description: 'Anal sex videos with beautiful models and pornstars being fucked in the ass. TUSHY RAW features famous pornstars in high quality anal porn videos.', url: 'https://www.tushyraw.com', tags: ['anal'], @@ -20694,14 +20725,14 @@ const sites = [ }, { slug: 'deeper', - name: 'Deeper', + name: 'DEEPER', description: 'Porn videos from DEEPER.com featuring Passionate sex, light kink and BDSM with plenty of erotic sex videos featuring beautiful models.', url: 'https://www.deeper.com', parent: 'vixen', }, { slug: 'slayed', - name: 'Slayed', + name: 'SLAYED', description: 'Watch Lesbian porn videos with the highest quality all girl on girl sex videos featuring SLAYED pornstars and models. Only the highest quality lesbian sex videos exclusive to SLAYED.com', url: 'https://www.slayed.com', parent: 'vixen', @@ -20709,7 +20740,7 @@ const sites = [ }, { slug: 'milfy', - name: 'Milfy', + name: 'MILFY', url: 'https://www.milfy.com', parent: 'vixen', tags: ['milf'], diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js index 0353175f..78ef2cc4 100755 --- a/src/scrapers/julesjordan.js +++ b/src/scrapers/julesjordan.js @@ -328,7 +328,7 @@ async function fetchUpcoming(site) { if (site.parameters?.upcoming === false) return null; const url = site.parameters?.upcoming ? util.format(site.parameters.upcoming) : `${site.url}/trial/index.php`; - const res = await unprint.get(url, { selectAll: '//img[contains(@alt, "Coming Soon")]/parent::div' }); + const res = await unprint.get(url, { selectAll: '//img[contains(@alt, "Coming Soon")]/ancestor::div' }); if (res.ok) { return scrapeUpcoming(res.context, site); diff --git a/src/scrapers/kellymadison.js b/src/scrapers/kellymadison.js index f9434b03..ca5b220e 100755 --- a/src/scrapers/kellymadison.js +++ b/src/scrapers/kellymadison.js @@ -31,7 +31,7 @@ function scrapeLatest(scenes, site) { release.date = query.date('.card-meta .text-left, .row .col-4:first-child, .card-footer-item:first-child', ['MMM D', 'MMM D, YYYY'], /\w+ \d+(, \w+)?/); release.actors = query.cnts('.models a, .ep-models a, a[href*="models/"]'); - // older scenes do not have a working scene page on their native site, only on Porn Fidelity + // older scenes do not have a working scene page on their native site, but they (often, not always) do on Porn Fidelity // scenes older than year do not show a date; this is not when the URLs stop working, but it's a rough guideline release.url = site.parameters.archive && !release.date ? `${site.parameters.archive}${pathname}` diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index c39c7751..bdcc0736 100755 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -74,6 +74,7 @@ const testedefudelidade = require('./testedefudelidade'); 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 vogov = require('./vogov'); @@ -179,6 +180,7 @@ const scrapers = { transbella: porndoe, traxxx, vipsexvault: porndoe, + virtualtaboo, vivid, vixen, vogov, diff --git a/src/tools/manticore-movies.js b/src/tools/manticore-movies.js index a6051e68..908bd192 100644 --- a/src/tools/manticore-movies.js +++ b/src/tools/manticore-movies.js @@ -106,6 +106,8 @@ async function init() { const movies = await fetchMovies(); + console.log(movies.toSorted((movieA, movieB) => movieA.dupe_index - movieB.dupe_index)); + const docs = movies.map((movie) => { const combinedTags = Object.values(Object.fromEntries(movie.tags.concat(movie.movie_tags).map((tag) => [tag.f1, { id: tag.f1,