diff --git a/public/img/logos/21naturals/21eroticanal.png b/public/img/logos/21naturals/21eroticanal.png new file mode 100644 index 00000000..1ab8a0b8 Binary files /dev/null and b/public/img/logos/21naturals/21eroticanal.png differ diff --git a/public/img/logos/21naturals/21footart.png b/public/img/logos/21naturals/21footart.png new file mode 100644 index 00000000..e48c6f30 Binary files /dev/null and b/public/img/logos/21naturals/21footart.png differ diff --git a/public/img/logos/21naturals/21naturals.png b/public/img/logos/21naturals/21naturals.png new file mode 100644 index 00000000..890918d2 Binary files /dev/null and b/public/img/logos/21naturals/21naturals.png differ diff --git a/public/img/logos/21naturals/favicon.png b/public/img/logos/21naturals/favicon.png index abcec559..668fb1bf 100644 Binary files a/public/img/logos/21naturals/favicon.png and b/public/img/logos/21naturals/favicon.png differ diff --git a/public/img/logos/21naturals/network.png b/public/img/logos/21naturals/network.png index 58fda3e6..890918d2 100644 Binary files a/public/img/logos/21naturals/network.png and b/public/img/logos/21naturals/network.png differ diff --git a/public/img/logos/21sextreme/creampiereality.png b/public/img/logos/21sextreme/creampiereality.png new file mode 100644 index 00000000..fb239322 Binary files /dev/null and b/public/img/logos/21sextreme/creampiereality.png differ diff --git a/public/img/logos/21sextreme/cummingmatures.png b/public/img/logos/21sextreme/cummingmatures.png new file mode 100644 index 00000000..6e997038 Binary files /dev/null and b/public/img/logos/21sextreme/cummingmatures.png differ diff --git a/public/img/logos/21sextreme/mandyiskinky.png b/public/img/logos/21sextreme/mandyiskinky.png new file mode 100644 index 00000000..8b034374 Binary files /dev/null and b/public/img/logos/21sextreme/mandyiskinky.png differ diff --git a/public/img/logos/21sextreme/peeandblow.png b/public/img/logos/21sextreme/peeandblow.png new file mode 100644 index 00000000..58e4195a Binary files /dev/null and b/public/img/logos/21sextreme/peeandblow.png differ diff --git a/public/img/logos/21sextreme/speculumplays.png b/public/img/logos/21sextreme/speculumplays.png new file mode 100644 index 00000000..15193fba Binary files /dev/null and b/public/img/logos/21sextreme/speculumplays.png differ diff --git a/seeds/01_sites.js b/seeds/01_sites.js index c3803189..3eb9af88 100644 --- a/seeds/01_sites.js +++ b/seeds/01_sites.js @@ -2,6 +2,31 @@ const upsert = require('../src/utils/upsert'); /* eslint-disable max-len */ 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 { slug: 'grandpasfuckteens', @@ -50,6 +75,7 @@ const sites = [ parameters: { scene: 'https://21sextreme.com/en/video', }, + scrape: false, }, { slug: 'dominatedgirls', @@ -59,6 +85,7 @@ const sites = [ parameters: { scene: 'https://21sextreme.com/en/video', }, + scrape: false, }, { slug: 'homepornreality', @@ -68,6 +95,57 @@ const sites = [ parameters: { 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 { diff --git a/src/scrapers/gamma.js b/src/scrapers/gamma.js index 17978e46..ba608698 100644 --- a/src/scrapers/gamma.js +++ b/src/scrapers/gamma.js @@ -91,6 +91,10 @@ async function getPhotos(albumPath, site) { async function scrapeApiReleases(json, site) { return json.map((scene) => { + if (site.parameters?.extract && scene.sitename !== site.parameters.extract) { + return null; + } + const release = { entryId: scene.clip_id, title: scene.title, @@ -125,7 +129,7 @@ async function scrapeApiReleases(json, site) { release.movie = `${site.url}/en/movie/${scene.url_movie_title}/${scene.movie_id}`; return release; - }); + }).filter(Boolean); } function scrapeAll(html, site, networkUrl, hasTeaser = true) { diff --git a/src/scrapers/teamskeet.js b/src/scrapers/teamskeet.js index 8bc5659f..6e17590c 100644 --- a/src/scrapers/teamskeet.js +++ b/src/scrapers/teamskeet.js @@ -51,7 +51,7 @@ function scrapeLatest(html, site) { }); } -function scrapeScene(html, site) { +function scrapeScene(html, site, url) { const { document } = new JSDOM(html).window; const release = { site }; @@ -59,6 +59,7 @@ function scrapeScene(html, site) { 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()); + release.url = url; release.title = title; release.actors = extractActors(actors); release.channel = channel.toLowerCase(); @@ -166,11 +167,11 @@ async function fetchScene(url, site) { const session = bhttp.session(); // resolve redirects 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 scrapeScene(res.body.toString(), site); + return scrapeScene(res.body.toString(), site, url); } module.exports = { diff --git a/src/sites.js b/src/sites.js index b7632d4a..7ae9f667 100644 --- a/src/sites.js +++ b/src/sites.js @@ -111,9 +111,9 @@ async function fetchSitesFromArgv() { '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', ) - .where('sites.scrape', true) .whereIn('sites.slug', argv.sites || []) .orWhereIn('networks.slug', argv.networks || []) + .where('sites.scrape', true) .leftJoin('networks', 'sites.network_id', 'networks.id'); const curatedSites = await curateSites(rawSites, true); @@ -132,7 +132,6 @@ 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', ) .leftJoin('networks', 'sites.network_id', 'networks.id') - .where('sites.scrape', true) .where((builder) => { if (config.include) { builder