Added Porn+.

This commit is contained in:
DebaucheryLibrarian 2025-02-26 04:09:22 +01:00
parent a8f0c25b50
commit f5ffc002f0
4 changed files with 221 additions and 2 deletions

View File

@ -617,6 +617,15 @@ const networks = [
description: 'Watch the best HD exclusive movies and videos on Porn Pros. All the hottest new Pornstar and amateur girls in High Definition updated daily.',
parent: 'whalemember',
},
{
slug: 'pornplus',
name: 'Porn+',
url: 'https://pornplus.com',
parent: 'whalemember',
parameters: {
layout: 'plus',
},
},
{
slug: 'private',
name: 'Private',

View File

@ -13788,6 +13788,7 @@ const sites = [
id: 'shag-street',
},
},
/*
{
slug: 'stayhomemilf',
name: 'StayHomeMilf',
@ -13797,6 +13798,7 @@ const sites = [
id: 'stay-home-milf',
},
},
*/
// MYLF cross-over
{
slug: 'mylfxadultprime',
@ -15859,6 +15861,164 @@ const sites = [
parent: 'pornpros',
hasLogo: false,
},
// PORN PLUS PORN+
{
name: 'Passion Fuck',
slug: 'passionfuck',
url: 'https://pornplus.com/series/passion-fuck',
parent: 'pornplus',
},
{
name: 'Creepy Pa',
slug: 'creepypa',
url: 'https://pornplus.com/series/creepy-pa',
parent: 'pornplus',
},
{
name: 'Property Exploits',
slug: 'propertyexploits',
url: 'https://pornplus.com/series/property-exploits',
parent: 'pornplus',
},
{
name: 'Asians Exploited',
slug: 'asiansexploited',
url: 'https://pornplus.com/series/asians-exploited',
parent: 'pornplus',
},
{
name: 'Shower 4K',
slug: 'shower4k',
url: 'https://pornplus.com/series/shower-4k',
parent: 'pornplus',
},
{
name: 'Squirt Bomb',
slug: 'squirtbomb',
url: 'https://pornplus.com/series/squirt-bomb',
parent: 'pornplus',
},
{
name: 'Kinky Sluts 4K',
slug: 'kinkysluts4k',
url: 'https://pornplus.com/series/kinky-sluts-4k',
parent: 'pornplus',
},
{
name: 'School of Cock',
slug: 'schoolofcock',
url: 'https://pornplus.com/series/school-of-cock',
parent: 'pornplus',
},
{
name: 'Facials Galore',
slug: 'facialsgalore',
url: 'https://pornplus.com/series/facials-galore',
parent: 'pornplus',
},
{
name: 'Game On',
slug: 'gameon',
url: 'https://pornplus.com/series/game-on',
parent: 'pornplus',
},
{
name: 'Waxxxed',
slug: 'waxxxed',
url: 'https://pornplus.com/series/waxxxed',
parent: 'pornplus',
},
{
name: 'Double Trouble',
slug: 'doubletrouble',
url: 'https://pornplus.com/series/double-trouble',
parent: 'pornplus',
},
{
name: 'Boobs 4K',
slug: 'boobs4k',
url: 'https://pornplus.com/series/boobs4k',
parent: 'pornplus',
},
{
name: 'BBC POVD',
slug: 'bbcpovd',
url: 'https://pornplus.com/series/bbc-povd',
parent: 'pornplus',
},
{
name: 'Sexercise',
slug: 'sexercise',
url: 'https://pornplus.com/series/sexercise',
parent: 'pornplus',
},
{
name: 'Strip Club Tryouts',
slug: 'stripclubtryouts',
url: 'https://pornplus.com/series/strip-club-tryouts',
parent: 'pornplus',
},
{
name: 'Pornstars in Cars',
slug: 'pornstarsincars',
url: 'https://pornplus.com/series/pornstars-in-cars',
parent: 'pornplus',
},
{
name: 'RV Adventures',
slug: 'rvadventures',
url: 'https://pornplus.com/series/rv-adventures',
parent: 'pornplus',
},
{
name: 'Bikini Smash',
slug: 'bikinismash',
alias: ['bikini splash'],
url: 'https://pornplus.com/series/bikini-splash',
parent: 'pornplus',
},
{
name: 'Momcum',
slug: 'momcum',
url: 'https://pornplus.com/series/momcum',
parent: 'pornplus',
},
{
name: 'Caged Sex',
slug: 'cagedsex',
url: 'https://pornplus.com/series/caged-sex',
parent: 'pornplus',
},
{
name: 'Glory Hole 4K',
slug: 'gloryhole4k',
url: 'https://pornplus.com/series/glory-hole-4k',
parent: 'pornplus',
},
{
name: 'Facials4K',
slug: 'facials4kpro',
url: 'https://pornplus.com/series/facials4k',
parent: 'pornplus',
},
{
name: 'My Very First Time',
slug: 'myveryfirsttimepro',
url: 'https://pornplus.com/series/my-very-first-time',
parent: 'pornplus',
},
{
name: 'Mom 4K',
slug: 'mom4k',
url: 'https://pornplus.com/series/mom-4k',
parent: 'pornplus',
},
{
name: 'Nanny Spy',
slug: 'nannyspypro',
url: 'https://pornplus.com/series/nannyspy',
parent: 'pornplus',
},
// PRIVATE
{
slug: 'analintroductions',
@ -21020,7 +21180,6 @@ const sites = [
},
];
/*
sites.reduce((acc, site) => {
if (acc.has(site.slug)) {
console.log('DUPLICATE!', site.slug);
@ -21030,7 +21189,6 @@ sites.reduce((acc, site) => {
return acc;
}, new Set());
*/
/* eslint-disable max-len */
exports.seed = (knex) => Promise.resolve()

View File

@ -160,6 +160,7 @@ const scrapers = {
pinkyxxx,
porncz,
pornpros: whalemember,
pornplus: whalemember,
private: privateNetwork,
purgatoryx,
radical,

View File

@ -44,6 +44,40 @@ function scrapeLatest(scenes, channel) {
});
}
function scrapeLatestPlus(scenes, channel) {
return scenes.map(({ query, _element }) => {
const release = {};
release.title = query.content('.title');
release.date = query.date('.video-thumbnail-footer', 'MM/DD/YYYY');
const slug = slugify(release.title);
release.url = `${new URL(channel.url).origin}/video/${slug}`;
release.entryId = slug;
release.actors = query.all('.actor-list a').map((actorEl) => ({
name: unprint.query.content(actorEl),
url: unprint.query.url(actorEl, null, { origin: channel.url }),
}));
const poster = query.poster() || query.img('a[data-video-thumbnail-single-image-target] img');
if (poster) {
release.poster = [
stripQuery(poster),
poster,
];
}
release.teaser = query.video('source', { attribute: 'data-src' });
release.channel = slugify(query.attribute('.series-link img', 'alt'), '');
return release;
});
}
function scrapeScene({ query }, { url, entity }) {
const release = {};
@ -70,6 +104,8 @@ function scrapeScene({ query }, { url, entity }) {
release.teaser = query.video('#player-wrapper source');
release.qualities = query.contents('#trailer_player .resolution').map((resolution) => Number(resolution.split('x')[1])).filter(Boolean);
console.log(release);
return release;
}
@ -84,7 +120,22 @@ async function fetchLatest(channel, page = 1) {
return res.status;
}
async function fetchLatestPlus(channel, page = 1) {
const url = `${channel.url}?page=${page}`;
const res = await unprint.get(url, { selectAll: '.video-thumbnail' });
if (res.status === 200) {
return scrapeLatestPlus(res.context, channel);
}
return res.status;
}
module.exports = {
fetchLatest,
scrapeScene,
plus: {
fetchLatest: fetchLatestPlus,
scrapeScene,
},
};