Compare commits

..

No commits in common. "5481b6e0a6e4b6104c0b4bdec51c18c8148b1ff9" and "7caa325c5f827c1a1e54c3c3df0757912fa48c8e" have entirely different histories.

47 changed files with 18 additions and 104 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.231.31", "version": "1.231.30",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "traxxx", "name": "traxxx",
"version": "1.231.31", "version": "1.231.30",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@casl/ability": "^5.2.2", "@casl/ability": "^5.2.2",

View File

@ -1,6 +1,6 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.231.31", "version": "1.231.30",
"description": "All the latest porn releases in one place", "description": "All the latest porn releases in one place",
"main": "src/app.js", "main": "src/app.js",
"scripts": { "scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -855,10 +855,6 @@ const tags = [
name: 'pissing', name: 'pissing',
slug: 'pissing', slug: 'pissing',
}, },
{
name: 'pole dancing',
slug: 'pole-dancing',
},
{ {
name: 'POV', name: 'POV',
slug: 'pov', slug: 'pov',
@ -2427,10 +2423,6 @@ const aliases = [
name: 'coroas', name: 'coroas',
for: 'milf', for: 'milf',
}, },
{
name: 'strip pole dancing',
for: 'strip-pole-dancing',
},
]; ];
const priorities = [ // higher index is higher priority const priorities = [ // higher index is higher priority

View File

@ -323,11 +323,6 @@ const networks = [
name: 'First Anal Quest', name: 'First Anal Quest',
url: 'http://www.firstanalquest.com', url: 'http://www.firstanalquest.com',
}, },
{
slug: 'theflourish',
name: 'The Flourish',
url: 'https://theflourish.io',
},
{ {
slug: 'forbondage', slug: 'forbondage',
name: 'ForBondage', name: 'ForBondage',

View File

@ -717,9 +717,6 @@ const sites = [
slug: 'archangel', slug: 'archangel',
name: 'ArchAngel', name: 'ArchAngel',
url: 'https://www.archangelvideo.com', url: 'https://www.archangelvideo.com',
parameters: {
path: '/tour',
},
}, },
// ASSYLUM // ASSYLUM
{ {
@ -3845,39 +3842,6 @@ const sites = [
layout: 'c', layout: 'c',
}, },
}, },
// FLOURISH
{
slug: 'theflourishxxx',
name: 'The Flourish XXX',
url: 'https://tour.theflourishxxx.com',
parent: 'theflourish',
},
{
slug: 'theflourishamateurs',
name: 'The Flourish Amateurs',
url: 'https://tour.theflourishamateurs.com',
parent: 'theflourish',
},
{
slug: 'theflourishfetish',
name: 'The Flourish Fetish',
url: 'https://tour.theflourishfetish.com',
parent: 'theflourish',
},
{
slug: 'theflourishpov',
name: 'The Flourish POV',
url: 'https://tour.theflourishxxx.com',
tags: ['pov'],
parent: 'theflourish',
},
{
slug: 'milfcandy',
name: 'MILF Candy',
url: 'https://tour.milfcandy.com',
tags: ['milf'],
parent: 'theflourish',
},
// FOR BONDAGE // FOR BONDAGE
{ {
name: 'Crowd Bondage', name: 'Crowd Bondage',

View File

@ -1,7 +1,5 @@
'use strict'; 'use strict';
// ALSO USED BY THE FLOURISH
const unprint = require('unprint'); const unprint = require('unprint');
const slugify = require('../utils/slugify'); const slugify = require('../utils/slugify');
@ -31,27 +29,12 @@ function scrapeAll(scenes) {
})); }));
const poster = query.img('img.mainThumb'); const poster = query.img('img.mainThumb');
const previewCount = query.number('img.mainThumb', { attribute: 'cnt' });
if (poster && !placeholder.test(poster)) { if (poster && !placeholder.test(poster)) {
const posterFallbacks = [ release.poster = poster;
poster.replace('-1x', '-3x'),
poster.replace('-1x', '-2x'),
poster.replace('-1x', '-4x'),
poster,
];
release.poster = posterFallbacks;
} }
if (previewCount) { release.photoCount = query.number('.timeDate');
release.photos = Array.from(
{ length: previewCount - 1 },
(value, index) => [3, 2, 4, 1].map((scale) => unprint.prefixUrl(query.img('img.mainThumb', { attribute: `src${index + 1}_${scale}x` }))).filter(Boolean), // 4x is unnecessarily big and possibly upscaled
).filter(Boolean);
}
release.photoCount = query.number('.timeDate', { match: /(\d+) photos/i, matchIndex: 1 });
release.entryId = getEntryId(release); release.entryId = getEntryId(release);
@ -59,7 +42,7 @@ function scrapeAll(scenes) {
}); });
} }
function scrapeScene({ query, html }, { url, entity, baseRelease }) { function scrapeScene({ query, html }, { url }) {
const release = { url }; const release = { url };
release.title = query.content('.title h2'); release.title = query.content('.title h2');
@ -73,35 +56,18 @@ function scrapeScene({ query, html }, { url, entity, baseRelease }) {
url: unprint.query.url(actorEl, null), url: unprint.query.url(actorEl, null),
})); }));
const poster = unprint.prefixUrl(query.img('.update_thumb') || html.match(/poster="(.*\.jpg)"/)?.[1], entity.url); const poster = query.img('.update_thumb') || html.match(/poster="(.*\.jpg)"/)?.[1];
if (poster && !placeholder.test(poster)) { if (poster && !placeholder.test(poster)) {
const posterFallbacks = [ release.poster = poster;
poster.replace('-1x', '-3x'),
poster.replace('-1x', '-2x'),
poster.replace('-1x', '-4x'),
poster,
];
// scene page poster usually different from overview page, don't replace
if (baseRelease?.poster && baseRelease.poster !== poster) {
release.photos = baseRelease.photos
? [posterFallbacks, ...baseRelease.photos]
: [posterFallbacks];
} else {
release.poster = posterFallbacks;
}
} }
const trailer = html.match(/src="(.*\.mp4)"/)?.[1]; release.trailer = html.match(/src="(.*\.mp4)"/)?.[1];
if (trailer) { release.photoCount = query.number('.info', { match: /(\d+) photos/i, matchIndex: 1 });
release.trailer = unprint.prefixUrl(encodeURI(trailer), entity.url);
}
release.tags = query.contents('.info .tags a'); release.tags = query.contents('.info .tags a');
release.photoCount = query.number('.info', { match: /(\d+) photos/i, matchIndex: 1 });
release.entryId = getEntryId(release); release.entryId = getEntryId(release);
return release; return release;
@ -163,8 +129,8 @@ function scrapeProfile({ query, element }, { url, entity }) {
return profile; return profile;
} }
async function fetchLatest(channel, page = 1, context) { async function fetchLatest(channel, page = 1) {
const url = `${channel.url}${context.parameters.path || ''}/categories/movies_${page}_d.html`; const url = `${channel.url}/tour/categories/movies_${page}_d.html`;
const res = await unprint.get(url, { selectAll: '.item-video' }); const res = await unprint.get(url, { selectAll: '.item-video' });
if (res.ok) { if (res.ok) {
@ -174,11 +140,11 @@ async function fetchLatest(channel, page = 1, context) {
return res.status; return res.status;
} }
async function fetchProfile({ name: actorName, url: actorUrl }, { entity, include, parameters }) { async function fetchProfile({ name: actorName, url: actorUrl }, { entity, include }) {
const res = await [ const res = await [
actorUrl, actorUrl,
`${entity.url}${parameters.path || ''}/models/${slugify(actorName, '-')}.html`, `${entity.url}/tour/models/${slugify(actorName, '-')}.html`,
`${entity.url}${parameters.path || ''}/models/${slugify(actorName, '')}.html`, `${entity.url}/tour/models/${slugify(actorName, '')}.html`,
].reduce(async (chain, url) => { ].reduce(async (chain, url) => {
const prevRes = await chain; const prevRes = await chain;

View File

@ -153,7 +153,6 @@ const scrapers = {
sexyhub: mindgeek, sexyhub: mindgeek,
spizoo, spizoo,
swallowsalon: julesjordan, swallowsalon: julesjordan,
theflourish: archangel,
teencoreclub, teencoreclub,
teenmegaworld, teenmegaworld,
teamskeet, teamskeet,
@ -295,11 +294,6 @@ const scrapers = {
silviasaint: famedigital, silviasaint: famedigital,
spizoo, spizoo,
swallowed: mikeadriano, swallowed: mikeadriano,
milfcandy: archangel,
theflourishamateurs: archangel,
theflourishpov: archangel,
theflourishfetish: archangel,
theflourishxxx: archangel,
teamskeet, teamskeet,
teencoreclub, teencoreclub,
teenmegaworld, teenmegaworld,

View File

@ -90,6 +90,9 @@ function scrapeProfile({ query }, url, entity) {
profile.avatar = query.img('.model-profile-image-picture source', { origin: entity.url, attribute: 'srcset' }) || query.img('.model-profile-image-picture img', { origin: entity.url }); profile.avatar = query.img('.model-profile-image-picture source', { origin: entity.url, attribute: 'srcset' }) || query.img('.model-profile-image-picture img', { origin: entity.url });
profile.scenes = scrapeAll(unprint.initAll(query.all('.video-list .thumb')), entity); profile.scenes = scrapeAll(unprint.initAll(query.all('.video-list .thumb')), entity);
console.log(bio);
console.log(profile);
return profile; return profile;
} }