Moved LetsDoeIt to Aylo, updated PornDoe scraper.

This commit is contained in:
DebaucheryLibrarian 2024-11-18 23:58:55 +01:00
parent 6d69f098f5
commit b679ae95f2
5 changed files with 44 additions and 40 deletions

View File

@ -464,8 +464,8 @@ const networks = [
{ {
slug: 'letsdoeit', slug: 'letsdoeit',
name: 'LetsDoeIt', name: 'LetsDoeIt',
url: 'https://letsdoeit.com', url: 'https://www.letsdoeit.com',
parent: 'porndoe', parent: 'aylo',
}, },
{ {
slug: 'littlecapricedreams', slug: 'littlecapricedreams',

View File

@ -12691,111 +12691,114 @@ const sites = [
{ {
name: 'The White Boxxx', name: 'The White Boxxx',
slug: 'thewhiteboxxx', slug: 'thewhiteboxxx',
url: 'https://letsdoeit.com/channels/the-white-boxxx.en.html', url: 'https://letsdoeit.com/sites/the-white-boxxx',
tags: ['glamcore'], tags: ['glamcore'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'A Girl Knows', name: 'A Girl Knows',
slug: 'agirlknows', slug: 'agirlknows',
url: 'https://letsdoeit.com/channels/a-girl-knows.en.html', url: 'https://letsdoeit.com/sites/a-girl-knows',
tags: ['lesbian'], tags: ['lesbian'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Her Limit', name: 'Her Limit',
slug: 'herlimit', slug: 'herlimit',
url: 'https://letsdoeit.com/channels/her-limit.en.html', url: 'https://letsdoeit.com/sites/her-limit',
tags: ['rough'], tags: ['rough'],
parent: 'letsdoeit', parent: 'letsdoeit',
parameters: {
siteId: 118091,
},
}, },
{ {
name: 'Horny Hostel', name: 'Horny Hostel',
slug: 'hornyhostel', slug: 'hornyhostel',
url: 'https://letsdoeit.com/channels/horny-hostel.en.html', url: 'https://letsdoeit.com/sites/horny-hostel',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'xChimera', name: 'xChimera',
slug: 'xchimera', slug: 'xchimera',
url: 'https://letsdoeit.com/channels/xchimera.en.html', url: 'https://letsdoeit.com/sites/xchimera',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Scam Angels', name: 'Scam Angels',
slug: 'scamangels', slug: 'scamangels',
url: 'https://letsdoeit.com/channels/scam-angels.en.html', url: 'https://letsdoeit.com/sites/scam-angels',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Bitches Abroad', name: 'Bitches Abroad',
slug: 'bitchesabroad', slug: 'bitchesabroad',
url: 'https://letsdoeit.com/channels/bitches-abroad.en.html', url: 'https://letsdoeit.com/sites/bitches-abroad',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Porno Academie', name: 'Porno Academie',
slug: 'pornoacademie', slug: 'pornoacademie',
url: 'https://letsdoeit.com/channels/porno-academie.en.html', url: 'https://letsdoeit.com/sites/porno-academie',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Bums Bus', name: 'Bums Bus',
slug: 'bumsbus', slug: 'bumsbus',
url: 'https://letsdoeit.com/channels/bums-bus.en.html', url: 'https://letsdoeit.com/sites/bums-bus',
tags: ['van'], tags: ['van'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'XXX Shades', name: 'XXX Shades',
slug: 'xxxshades', slug: 'xxxshades',
url: 'https://letsdoeit.com/channels/xxx-shades.en.html', url: 'https://letsdoeit.com/sites/xxx-shades',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Doe Projects', name: 'Doe Projects',
slug: 'doeprojects', slug: 'doeprojects',
url: 'https://letsdoeit.com/channels/doe-projects.en.html', url: 'https://letsdoeit.com/sites/doe-projects',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Relaxxxed', name: 'Relaxxxed',
slug: 'relaxxxed', slug: 'relaxxxed',
url: 'https://letsdoeit.com/channels/relaxxxed.en.html', url: 'https://letsdoeit.com/sites/relaxxxed',
tags: ['van'], tags: ['van'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Kinky Inlaws', name: 'Kinky Inlaws',
slug: 'kinkyinlaws', slug: 'kinkyinlaws',
url: 'https://letsdoeit.com/channels/kinky-inlaws.en.html', url: 'https://letsdoeit.com/sites/kinky-inlaws',
tags: ['family'], tags: ['family'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'My Naughty Album', name: 'My Naughty Album',
slug: 'mynaughtyalbum', slug: 'mynaughtyalbum',
url: 'https://letsdoeit.com/channels/my-naughty-album.en.html', url: 'https://letsdoeit.com/sites/my-naughty-album',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Bums Buero', name: 'Bums Buero',
slug: 'bumsbuero', slug: 'bumsbuero',
url: 'https://letsdoeit.com/channels/bums-buero.en.html', url: 'https://letsdoeit.com/sites/bums-buero',
tags: ['office'], tags: ['office'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Quest For Orgasm', name: 'Quest For Orgasm',
slug: 'questfororgasm', slug: 'questfororgasm',
url: 'https://letsdoeit.com/channels/quest-for-orgasm.en.html', url: 'https://letsdoeit.com/sites/quest-for-orgasm',
tags: ['solo'], tags: ['solo'],
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
{ {
name: 'Bums Besuch', name: 'Bums Besuch',
slug: 'bumsbesuch', slug: 'bumsbesuch',
url: 'https://letsdoeit.com/channels/bums-besuch.en.html', url: 'https://letsdoeit.com/sites/bums-besuch',
parent: 'letsdoeit', parent: 'letsdoeit',
}, },
// LITTLE CAPRICE // LITTLE CAPRICE

View File

@ -204,7 +204,7 @@ function getUrl(site) {
return `${site.parent.url}/scenes?site=${site.parameters.siteId}`; return `${site.parent.url}/scenes?site=${site.parameters.siteId}`;
} }
throw new Error(`Mind Geek site '${site.name}' (${site.url}) not supported`); throw new Error(`Aylo site '${site.name}' (${site.url}) not supported`);
} }
async function getSession(site, parameters, url) { async function getSession(site, parameters, url) {
@ -241,7 +241,7 @@ async function getSession(site, parameters, url) {
} }
} }
throw new Error(`Failed to acquire MindGeek session (${res.statusCode})`); throw new Error(`Failed to acquire Aylo session (${res.statusCode})`);
} }
async function fetchLatest(site, page = 1, options) { async function fetchLatest(site, page = 1, options) {

View File

@ -1,6 +1,7 @@
'use strict'; 'use strict';
const qu = require('../utils/qu'); const unprint = require('unprint');
const slugify = require('../utils/slugify'); const slugify = require('../utils/slugify');
function scrapeAll(scenes) { function scrapeAll(scenes) {
@ -43,14 +44,15 @@ function scrapeScene({ query }, url) {
release.description = query.meta('name=description') || query.q('read-even-more', true); release.description = query.meta('name=description') || query.q('read-even-more', true);
release.date = query.date('.h5-published', 'MMM DD, YYYY', /\w{3} \d{1,2}, \d{4}/); release.date = query.date('.-mvd-grid-stats', 'MMM DD, YYYY', /\w{3} \d{1,2}, \d{4}/);
release.actors = query.all('.video-top-details .actors a[href*="/models"]').map((el) => ({
release.actors = query.all('.video-top-details a[href*="/models"]').map((el) => ({
name: query.cnt(el), name: query.cnt(el),
url: query.url(el, null), url: query.url(el, null),
})); }));
release.duration = query.dur('meta[itemprop="duration"]', null, 'content'); release.duration = query.dur('meta[itemprop="duration"]', null, 'content');
release.tags = query.all('.video-top-details a[href*="/categories"], .video-top-details a[href*="/tags"]', true); release.tags = query.all('.-vpta-bottom a[href*="/categories"], .-vpta-bottom a[href*="/tags"]', true);
release.poster = query.img('.poster img') || query.meta('itemprop=thumbnailUrl'); release.poster = query.img('.poster img') || query.meta('itemprop=thumbnailUrl');
release.photos = query.imgs('#gallery-thumbs [class*="thumb"]', 'data-bg').slice(1).map((photo) => [ // first image is poster release.photos = query.imgs('#gallery-thumbs [class*="thumb"]', 'data-bg').slice(1).map((photo) => [ // first image is poster
@ -60,17 +62,17 @@ function scrapeScene({ query }, url) {
release.trailer = query.meta('itemprop=contentURL'); release.trailer = query.meta('itemprop=contentURL');
release.channel = slugify(query.q('.video-top-details .actors a[href*="/channels"] strong', true), ''); release.channel = slugify(query.q('.video-top-details a[href*="/channels"]', true), '');
return release; return release;
} }
async function fetchActorReleases({ query }, url, page = 1, accReleases = []) { async function fetchActorReleases({ query }, url, page = 1, accReleases = []) {
const releases = scrapeAll(qu.initAll(query.all('.main-content .card-video, .main-content .global-video-card'))); const releases = scrapeAll(unprint.initAll(query.all('.main-content .card-video, .main-content .global-video-card')));
const hasNextPage = query.exists('.pages a.active + a'); const hasNextPage = query.exists('.pages a.active + a');
if (hasNextPage) { if (hasNextPage) {
const res = await qu.get(`${url}?page=${page + 1}`); const res = await unprint.get(`${url}?page=${page + 1}`);
if (res.ok) { if (res.ok) {
return fetchActorReleases(res.item, url, page + 1, accReleases.concat(releases)); return fetchActorReleases(res.item, url, page + 1, accReleases.concat(releases));
@ -85,10 +87,10 @@ async function scrapeProfile({ query }, url, include) {
const bio = query.all('[class*="list"] [class*="list-item"]').reduce((acc, el) => ({ const bio = query.all('[class*="list"] [class*="list-item"]').reduce((acc, el) => ({
...acc, ...acc,
[slugify(query.text(el), '_')]: query.cnt(el, 'span'), [slugify(unprint.query.text(el), '_')]: unprint.query.content(el, 'span'),
}), {}); }), {});
const tags = query.cnts(` const tags = query.contents(`
[class$="description"] [class*="more-less"] a[href*="/categories"], [class$="description"] [class*="more-less"] a[href*="/categories"],
[class$="description"] [class*="more-less"] a[href*="/tags"], [class$="description"] [class*="more-less"] a[href*="/tags"],
[class*="seo-text"] a[href*="/categories"], [class*="seo-text"] a[href*="/categories"],
@ -97,8 +99,9 @@ async function scrapeProfile({ query }, url, include) {
profile.nationality = bio.nationality; profile.nationality = bio.nationality;
profile.placeOfBirth = bio.birth_place; profile.placeOfBirth = bio.birth_place;
profile.age = unprint.extractNumber(bio.age);
profile.dateOfBirth = qu.extractDate(bio.birth_date, 'MMM D, YYYY'); profile.dateOfBirth = unprint.extractDate(bio.birth_date, 'MMM D, YYYY');
if (/enhanced/i.test(bio.tits_type)) profile.naturalBoobs = false; if (/enhanced/i.test(bio.tits_type)) profile.naturalBoobs = false;
if (/natural/i.test(bio.tits_type)) profile.naturalBoobs = true; if (/natural/i.test(bio.tits_type)) profile.naturalBoobs = true;
@ -120,22 +123,22 @@ async function scrapeProfile({ query }, url, include) {
} }
async function fetchLatest(channel, page = 1) { async function fetchLatest(channel, page = 1) {
const res = await qu.getAll(`${channel.url}?page=${page}`, '.main-content .card-video, .main-content .global-video-card'); const res = await unprint.get(`${channel.url}?page=${page}`, { selectAll: '.main-content .card-video, .main-content .global-video-card' });
return res.ok ? scrapeAll(res.items, channel) : res.status; return res.ok ? scrapeAll(res.context, channel) : res.status;
} }
async function fetchScene(url, channel) { async function fetchScene(url, channel) {
const res = await qu.get(url, '.main-content'); const res = await unprint.get(url, { select: '.main-content' });
return res.ok ? scrapeScene(res.item, url, channel) : res.status; return res.ok ? scrapeScene(res.context, url, channel) : res.status;
} }
async function fetchProfile({ name: actorName }, entity, include) { async function fetchProfile({ name: actorName }, entity, include) {
const url = `http://letsdoeit.com/models/${slugify(actorName)}.en.html`; const url = `${entity.url}/models/${slugify(actorName)}.en.html`;
const res = await qu.get(url); const res = await unprint.get(url);
return res.ok ? scrapeProfile(res.item, url, include) : res.status; return res.ok ? scrapeProfile(res.context, url, include) : res.status;
} }
module.exports = { module.exports = {

View File

@ -137,7 +137,6 @@ const scrapers = {
kinkvr: badoink, kinkvr: badoink,
// analvids, // analvids,
analvids: pornbox, analvids: pornbox,
letsdoeit: porndoe,
littlecapricedreams, littlecapricedreams,
loveherfilms, loveherfilms,
mamacitaz: porndoe, mamacitaz: porndoe,
@ -270,7 +269,6 @@ const scrapers = {
shelovesblack: loveherfilms, shelovesblack: loveherfilms,
// analvids, // analvids,
analvids: pornbox, analvids: pornbox,
letsdoeit: porndoe,
littlecapricedreams, littlecapricedreams,
mamacitaz: porndoe, mamacitaz: porndoe,
men: aylo, men: aylo,