From c711d73cd08d93afdd4236a00479b5230f579a43 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Tue, 20 Jan 2026 05:59:42 +0100 Subject: [PATCH] Added Full Porn Network sites. --- seeds/00_tags.js | 5 + seeds/02_sites.js | 209 +++++++++++++++++++++++++++++--- src/entities.js | 5 +- src/scrapers/actors.js | 15 +-- src/scrapers/fullpornnetwork.js | 11 +- tests/profiles.js | 4 +- 6 files changed, 210 insertions(+), 39 deletions(-) diff --git a/seeds/00_tags.js b/seeds/00_tags.js index be736a76..5e9f2694 100755 --- a/seeds/00_tags.js +++ b/seeds/00_tags.js @@ -879,6 +879,11 @@ const tags = [ slug: 'outdoors', group: 'location', }, + { + name: 'public', + slug: 'public', + group: 'location', + }, { name: 'indoors', slug: 'indoors', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index d23414d8..8641441e 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -4465,7 +4465,7 @@ const sites = [ { slug: 'analviolation', name: 'Anal Violation', - url: 'https://analviolation.com', + url: 'https://analized.com/channels/anal-violation', tags: ['anal'], parent: 'fullpornnetwork', }, @@ -4476,14 +4476,6 @@ const sites = [ tags: ['anal'], parent: 'fullpornnetwork', }, - { - slug: 'baddaddypov', - name: 'Bad Daddy POV', - alias: ['bdpov'], - url: 'https://baddaddypov.com', - tags: ['pov', 'family'], - parent: 'fullpornnetwork', - }, { slug: 'dtfsluts', name: 'DTF Sluts', @@ -4500,14 +4492,15 @@ const sites = [ { slug: 'hergape', name: 'Her Gape', - url: 'https://hergape.com', + url: 'https://analized.com/channels/her-gape', tags: ['anal'], parent: 'fullpornnetwork', }, { - slug: 'homemadeanalwhores', - name: 'Homemade Anal Whores', - url: 'https://homemadeanalwhores.com', + slug: 'analamateur', + rename: 'homemadeanalwhores', + name: 'Anal Amateur', + url: 'https://analamateur.com', tags: ['anal'], parent: 'fullpornnetwork', }, @@ -4520,20 +4513,20 @@ const sites = [ { slug: 'onlyprince', name: 'Only Prince', - url: 'https://onlyprince.com', + url: 'https://fullpornnetwork.com/channels/only-prince', tags: ['bbc'], parent: 'fullpornnetwork', }, { slug: 'pervertgallery', name: 'Pervert Gallery', - url: 'http://pervertgallery.com', + url: 'https://fullpornnetwork.com/channels/pervert-gallery', parent: 'fullpornnetwork', }, { slug: 'povperverts', name: 'POV Perverts', - url: 'http://povperverts.net', + url: 'https://fullpornnetwork.com/channels/pov-perverts', tags: ['pov'], parent: 'fullpornnetwork', }, @@ -4544,16 +4537,70 @@ const sites = [ tags: ['anal'], parent: 'fullpornnetwork', }, + { + slug: 'lesbiananalsluts', + name: 'Lesbian Anal Sluts', + url: 'https://analized.com/channels/lesbian-anal-sluts', + tags: ['lesbian'], + parent: 'fullpornnetwork', + }, + { + slug: 'teenagecorruption', + name: 'Teenage Corruption', + url: 'https://fullpornnetwork.com/channels/teenagecorruption', + tags: ['teen'], + parent: 'fullpornnetwork', + }, + { + slug: 'teenagetryouts', + name: 'Teenage Tryouts', + url: 'https://teenagetryouts.com', + tags: ['teen'], + parent: 'fullpornnetwork', + }, { slug: 'twistedvisual', name: 'Twisted Visual', url: 'https://twistedvisual.com', parent: 'fullpornnetwork', }, + { + slug: 'slutinspection', + name: 'Slut Inspection', + url: 'https://slutinspection.com', + parent: 'fullpornnetwork', + }, + { + slug: 'slutsbts', + name: 'Sluts BTS', + url: 'https://slutinspection.com/channels/slutsbtscom', + tags: ['bts'], + parent: 'fullpornnetwork', + }, + { + slug: 'slutspov', + name: 'Sluts POV', + url: 'https://slutinspection.com/channels/slutspovcom', + tags: ['pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'wifespov', + name: 'Wife\'s POV', + url: 'https://slutinspection.com/channels/wifespovcom', + tags: ['pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'pornforce', + name: 'Porn Force', + url: 'https://pornforce.com', + parent: 'fullpornnetwork', + }, { slug: 'yourmomdoesanal', name: 'Your Mom Does Anal', - url: 'http://yourmomdoesanal.com', + url: 'https://yourmomdoesporn.com/channels/your-mom-does-anal', tags: ['anal', 'milf'], parent: 'fullpornnetwork', }, @@ -4564,13 +4611,139 @@ const sites = [ tags: ['milf'], parent: 'fullpornnetwork', }, + { + slug: 'mommyjoi', + name: 'Mommy JOI', + url: 'https://yourmomdoesporn.com/channels/mommy-joi', + tags: ['milf'], + parent: 'fullpornnetwork', + }, + { + slug: 'milfpornsite', + name: 'MILF Porn Site', + url: 'https://yourmomdoesporn.com/channels/MILF-porn-site/', + tags: ['milf'], + parent: 'fullpornnetwork', + }, { slug: 'mugfucked', name: 'Mugfucked', - url: 'https://mugfucked.com', + url: 'https://fullpornnetwork.com/channels/mugfucked', tags: ['facefucking', 'blowjob'], parent: 'fullpornnetwork', }, + { + slug: 'badfamilypov', + name: 'Bad Family POV', + url: 'https://badfamilypov.com', + tags: ['family', 'pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'badmommypov', + name: 'Bad Mommy POV', + url: 'https://badmommypov.com', + tags: ['milf', 'pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'baddaddypov', + name: 'Bad Daddy POV', + alias: ['bdpov'], + url: 'https://baddaddypov.com', + tags: ['pov', 'family'], + parent: 'fullpornnetwork', + }, + { + slug: 'badsisterpov', + name: 'Bad Sister POV', + url: 'https://badfamilypov.com/channels/bad-sister-pov', + tags: ['family', 'pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'badbrotherpov', + name: 'Bad Brother POV', + url: 'https://badfamilypov.com/channels/bad-brother-pov', + tags: ['family', 'pov'], + parent: 'fullpornnetwork', + }, + { + slug: 'sisterjoi', + name: 'Sister JOI', + url: 'https://badfamilypov.com/channels/sister-joi', + tags: ['family', 'joi'], + parent: 'fullpornnetwork', + }, + { + slug: 'daughterjoi', + name: 'Daughter JOI', + url: 'https://badfamilypov.com/channels/daughter-joi', + tags: ['family', 'joi'], + parent: 'fullpornnetwork', + }, + { + slug: 'publicsexdate', + name: 'Public Sex Date', + url: 'https://publicsexdate.com', + tags: ['public'], + parent: 'fullpornnetwork', + }, + { + slug: 'abbiemaley', + name: 'Abbie Maley', + url: 'https://abbiemaley.com', + parent: 'fullpornnetwork', + }, + { + slug: 'sluttybbws', + name: 'Slutty BBWs', + url: 'https://sluttybbws.com', + parent: 'fullpornnetwork', + }, + { + slug: 'teasingandpleasing', + name: 'Teasing And Pleasing', + url: 'https://teasingandpleasing.com', + tags: ['lesbian'], + parent: 'fullpornnetwork', + }, + { + slug: 'brokensluts', + name: 'Broken Sluts', + url: 'https://brokensluts.net', + parent: 'fullpornnetwork', + }, + { + slug: 'cumdumpsterteens', + name: 'Cum Dumpster Teens', + url: 'https://cumdumpsterteens.com', + parent: 'fullpornnetwork', + }, + { + slug: 'downtofuckdating', + name: 'Down To Fuck Dating', + url: 'https://publicsexdate.com/channels/downtofuckdating', + parent: 'fullpornnetwork', + }, + { + slug: 'porkvendors', + name: 'Pork Vendors', + url: 'https://porkvendors.com', + parent: 'fullpornnetwork', + }, + { + slug: 'realfuckingdating', + name: 'Real Fucking Dating', + url: 'https://publicsexdate.com/channels/realfuckingdating', + parent: 'fullpornnetwork', + }, + { + slug: 'shefucksonthefirstdate', + name: 'She Fucks On The First Date', + url: 'https://publicsexdate.com/channels/shefucksonthefirstdate', + parent: 'fullpornnetwork', + }, // GAYWIRE { name: 'Bait Bus', diff --git a/src/entities.js b/src/entities.js index 28484417..39086c60 100755 --- a/src/entities.js +++ b/src/entities.js @@ -32,11 +32,14 @@ function curateEntity(entity, includeParameters = false) { || (entity.parent && { logo: `${entity.parent.slug}/${entity.slug}.png`, thumbnail: `${entity.parent.slug}/thumbs/${entity.slug}.png`, favicon: `${entity.parent.slug}/favicon.png` }))) || null; + const url = entity.url && new URL(entity.url); + const curatedEntity = entity.id ? { id: entity.id, name: entity.name, url: entity.url, - origin: entity.url && new URL(entity.url).origin, + origin: url?.origin, + pathname: url?.pathname, description: entity.description, slug: entity.slug, type: entity.type, diff --git a/src/scrapers/actors.js b/src/scrapers/actors.js index 342e4572..55d722ea 100644 --- a/src/scrapers/actors.js +++ b/src/scrapers/actors.js @@ -178,23 +178,10 @@ module.exports = { naughtyamerica, tonightsgirlfriend: naughtyamerica, // full porn network - analbbc: fullpornnetwork, - analized: fullpornnetwork, - analviolation: fullpornnetwork, - archangel: fullpornnetwork, - baddaddypov: fullpornnetwork, - dtfsluts: fullpornnetwork, - girlfaction: fullpornnetwork, - hergape: fullpornnetwork, - homemadeanalwhores: fullpornnetwork, - jamesdeen: fullpornnetwork, - mugfucked: fullpornnetwork, - onlyprince: fullpornnetwork, - pervertgallery: fullpornnetwork, - povperverts: fullpornnetwork, // etc '18vr': badoink, theflourishxxx: theflourish, + fullpornnetwork, adultempire, allherluv: missax, americanpornstar, diff --git a/src/scrapers/fullpornnetwork.js b/src/scrapers/fullpornnetwork.js index a2d3a077..848d5328 100755 --- a/src/scrapers/fullpornnetwork.js +++ b/src/scrapers/fullpornnetwork.js @@ -21,10 +21,13 @@ function scrapeAll(scenes, channel) { url: unprint.query.url(actorEl, null, { origin: channel.url }), })); - release.poster = query.img('.thumbnail img'); - + const poster = query.img('.thumbnail img'); const teaser = query.video('.thumbnail img', { attribute: 'data-vid' }); // not a mistake, video source is on img tag + if (!poster?.includes('blur')) { // seemingly global SFW + release.poster = poster; + } + if (!teaser?.includes('blur')) { // seemingly global SFW release.teaser = teaser; } @@ -34,7 +37,9 @@ function scrapeAll(scenes, channel) { } async function fetchLatest(channel, page = 1) { - const url = `${channel.url}/porn-categories/movies/?page=${page}&sort=most-recent`; // parameter order matters for some reason! + const section = channel.pathname?.match(/\/channels\/([\w-]+)/)?.[1] || 'movies'; + + const url = `${channel.origin}/porn-categories/${section}/?page=${page}&sort=most-recent`; // parameter order matters for some reason! const res = await unprint.get(url, { selectAll: '.content div[data-setid]' }); if (res.ok) { diff --git a/tests/profiles.js b/tests/profiles.js index 0bb1d2b3..17f26bc7 100644 --- a/tests/profiles.js +++ b/tests/profiles.js @@ -182,11 +182,8 @@ const actors = [ // missax { entity: 'missax', name: 'Alexis Fawx', fields: ['avatar', 'description'] }, { entity: 'allherluv', name: 'Krissy Lynn', fields: ['avatar', 'description'] }, - // full porn network - { entity: 'povperverts', name: 'Krissy Lynn', fields: ['avatar', 'description'] }, // etc. { entity: 'analvids', name: 'Veronica Leal', fields: ['avatar', 'gender', 'birthCountry', 'nationality', 'age', 'aliases', 'nationality'] }, - { entity: 'archangel', name: 'Summer Brielle', fields: ['avatar', 'description', 'dateOfBirth', 'age', 'measurements', 'height', 'aliases'] }, { entity: 'bangbros', name: 'Kira Perez', fields: ['avatar', 'gender', 'ethnicity', 'hairColor'] }, { entity: 'hookuphotshot', name: 'Kenzie Reeves', fields: ['avatar', 'description'] }, { entity: 'julesjordan', name: 'Vanna Bardot', fields: ['height', 'dateOfBirth', 'measurements', 'description', 'avatar'] }, @@ -208,6 +205,7 @@ const actors = [ { entity: 'tonightsgirlfriend', name: 'Abella Danger', fields: ['avatar'] }, { entity: 'mariskax', name: 'Honey Demon', fields: ['avatar', 'gender', 'dateOfBirth', 'placeOfBirth', 'measurements', 'height', 'weight', 'hairColor', 'eyes'] }, { entity: 'pornhub', name: 'Lexi Luna', fields: ['avatar', 'gender', 'ethnicity', 'description', 'birthPlace', 'measurements', 'naturalBoobs', 'height', 'weight', 'hairColor', 'hasPiercings', 'hasTattoos'] }, + { entity: 'fullpornnetwork', name: 'Kenzie Reeves', fields: ['avatar', 'description'] }, ]; const actorScrapers = scrapers.actors;