Compare commits
No commits in common. "114e2e03b22acd91ac0077748bbef08fc0052453" and "c411979edbbd40cd2d87035c8c4af5261fe5d551" have entirely different histories.
114e2e03b2
...
c411979edb
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.86.0",
|
"version": "1.85.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.86.0",
|
"version": "1.85.2",
|
||||||
"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": {
|
||||||
|
|
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 75 KiB |
|
@ -2,31 +2,6 @@ const upsert = require('../src/utils/upsert');
|
||||||
|
|
||||||
/* eslint-disable max-len */
|
/* eslint-disable max-len */
|
||||||
const sites = [
|
const sites = [
|
||||||
// 21NATURALS
|
|
||||||
{
|
|
||||||
slug: '21naturals',
|
|
||||||
name: '21Naturals',
|
|
||||||
url: 'https://www.21naturals.com',
|
|
||||||
network: '21naturals',
|
|
||||||
parameters: {
|
|
||||||
extract: '21naturals',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: '21footart',
|
|
||||||
name: '21 Foot Art',
|
|
||||||
url: 'https://21footart.21naturals.com',
|
|
||||||
network: '21naturals',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: '21eroticanal',
|
|
||||||
name: '21 Erotic Anal',
|
|
||||||
url: 'https://21eroticanal.21naturals.com',
|
|
||||||
network: '21naturals',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21naturals.com/en/video',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
// 21SEXTREME
|
// 21SEXTREME
|
||||||
{
|
{
|
||||||
slug: 'grandpasfuckteens',
|
slug: 'grandpasfuckteens',
|
||||||
|
@ -75,7 +50,6 @@ const sites = [
|
||||||
parameters: {
|
parameters: {
|
||||||
scene: 'https://21sextreme.com/en/video',
|
scene: 'https://21sextreme.com/en/video',
|
||||||
},
|
},
|
||||||
scrape: false,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'dominatedgirls',
|
slug: 'dominatedgirls',
|
||||||
|
@ -85,7 +59,6 @@ const sites = [
|
||||||
parameters: {
|
parameters: {
|
||||||
scene: 'https://21sextreme.com/en/video',
|
scene: 'https://21sextreme.com/en/video',
|
||||||
},
|
},
|
||||||
scrape: false,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'homepornreality',
|
slug: 'homepornreality',
|
||||||
|
@ -95,57 +68,6 @@ const sites = [
|
||||||
parameters: {
|
parameters: {
|
||||||
scene: 'https://21sextreme.com/en/video',
|
scene: 'https://21sextreme.com/en/video',
|
||||||
},
|
},
|
||||||
scrape: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: 'peeandblow',
|
|
||||||
name: 'Pee and Blow',
|
|
||||||
url: 'https://peeandblow.21sextreme.com',
|
|
||||||
network: '21sextreme',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21sextreme.com/en/video',
|
|
||||||
},
|
|
||||||
scrape: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: 'cummingmatures',
|
|
||||||
name: 'Cumming Matures',
|
|
||||||
url: 'https://cummingmatures.21sextreme.com',
|
|
||||||
network: '21sextreme',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21sextreme.com/en/video',
|
|
||||||
},
|
|
||||||
scrape: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: 'mandyiskinky',
|
|
||||||
name: 'Mandy Is Kinky',
|
|
||||||
url: 'https://mandyiskinky.21sextreme.com',
|
|
||||||
network: '21sextreme',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21sextreme.com/en/video',
|
|
||||||
},
|
|
||||||
scrape: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: 'speculumplays',
|
|
||||||
name: 'Speculum Plays',
|
|
||||||
url: 'https://speculumplays.21sextreme.com',
|
|
||||||
network: '21sextreme',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21sextreme.com/en/video',
|
|
||||||
},
|
|
||||||
scrape: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
slug: 'creampiereality',
|
|
||||||
name: 'Creampie Reality',
|
|
||||||
url: 'https://creampiereality.21sextreme.com',
|
|
||||||
network: '21sextreme',
|
|
||||||
parameters: {
|
|
||||||
scene: 'https://21sextreme.com/en/video',
|
|
||||||
},
|
|
||||||
scrape: false,
|
|
||||||
},
|
},
|
||||||
// 21SEXTURY
|
// 21SEXTURY
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,10 +91,6 @@ async function getPhotos(albumPath, site) {
|
||||||
|
|
||||||
async function scrapeApiReleases(json, site) {
|
async function scrapeApiReleases(json, site) {
|
||||||
return json.map((scene) => {
|
return json.map((scene) => {
|
||||||
if (site.parameters?.extract && scene.sitename !== site.parameters.extract) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const release = {
|
const release = {
|
||||||
entryId: scene.clip_id,
|
entryId: scene.clip_id,
|
||||||
title: scene.title,
|
title: scene.title,
|
||||||
|
@ -129,7 +125,7 @@ async function scrapeApiReleases(json, site) {
|
||||||
release.movie = `${site.url}/en/movie/${scene.url_movie_title}/${scene.movie_id}`;
|
release.movie = `${site.url}/en/movie/${scene.url_movie_title}/${scene.movie_id}`;
|
||||||
|
|
||||||
return release;
|
return release;
|
||||||
}).filter(Boolean);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrapeAll(html, site, networkUrl, hasTeaser = true) {
|
function scrapeAll(html, site, networkUrl, hasTeaser = true) {
|
||||||
|
|
|
@ -51,7 +51,7 @@ function scrapeLatest(html, site) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrapeScene(html, site, url) {
|
function scrapeScene(html, site) {
|
||||||
const { document } = new JSDOM(html).window;
|
const { document } = new JSDOM(html).window;
|
||||||
const release = { site };
|
const release = { site };
|
||||||
|
|
||||||
|
@ -59,7 +59,6 @@ function scrapeScene(html, site, url) {
|
||||||
release.description = document.querySelector('#story-and-tags td:nth-child(2) div').textContent;
|
release.description = document.querySelector('#story-and-tags td:nth-child(2) div').textContent;
|
||||||
const [actors, title, channel] = document.querySelector('title').textContent.split('|').map(item => item.trim());
|
const [actors, title, channel] = document.querySelector('title').textContent.split('|').map(item => item.trim());
|
||||||
|
|
||||||
release.url = url;
|
|
||||||
release.title = title;
|
release.title = title;
|
||||||
release.actors = extractActors(actors);
|
release.actors = extractActors(actors);
|
||||||
release.channel = channel.toLowerCase();
|
release.channel = channel.toLowerCase();
|
||||||
|
@ -167,11 +166,11 @@ async function fetchScene(url, site) {
|
||||||
const session = bhttp.session(); // resolve redirects
|
const session = bhttp.session(); // resolve redirects
|
||||||
const res = await session.get(url);
|
const res = await session.get(url);
|
||||||
|
|
||||||
if (site.parameters?.scraper === 'A') {
|
if (site.parameters.scraper === 'A') {
|
||||||
return scrapeSceneA(res.body.toString(), site, null, url);
|
return scrapeSceneA(res.body.toString(), site, null, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
return scrapeScene(res.body.toString(), site, url);
|
return scrapeScene(res.body.toString(), site);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
|
@ -111,9 +111,9 @@ async function fetchSitesFromArgv() {
|
||||||
'sites.*',
|
'sites.*',
|
||||||
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as network_description', 'networks.parameters as network_parameters',
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as network_description', 'networks.parameters as network_parameters',
|
||||||
)
|
)
|
||||||
|
.where('sites.scrape', true)
|
||||||
.whereIn('sites.slug', argv.sites || [])
|
.whereIn('sites.slug', argv.sites || [])
|
||||||
.orWhereIn('networks.slug', argv.networks || [])
|
.orWhereIn('networks.slug', argv.networks || [])
|
||||||
.where('sites.scrape', true)
|
|
||||||
.leftJoin('networks', 'sites.network_id', 'networks.id');
|
.leftJoin('networks', 'sites.network_id', 'networks.id');
|
||||||
|
|
||||||
const curatedSites = await curateSites(rawSites, true);
|
const curatedSites = await curateSites(rawSites, true);
|
||||||
|
@ -132,6 +132,7 @@ async function fetchSitesFromConfig() {
|
||||||
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as network_description', 'networks.parameters as network_parameters',
|
'networks.name as network_name', 'networks.slug as network_slug', 'networks.url as network_url', 'networks.description as network_description', 'networks.parameters as network_parameters',
|
||||||
)
|
)
|
||||||
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
.leftJoin('networks', 'sites.network_id', 'networks.id')
|
||||||
|
.where('sites.scrape', true)
|
||||||
.where((builder) => {
|
.where((builder) => {
|
||||||
if (config.include) {
|
if (config.include) {
|
||||||
builder
|
builder
|
||||||
|
|