Added Cherry Pimps/Pimp.XXX.

This commit is contained in:
ThePendulum 2020-02-13 03:44:04 +01:00
parent d4a42bff90
commit c9c7a33585
27 changed files with 1682 additions and 1582 deletions

View File

@ -52,7 +52,10 @@
<h3>Misc</h3> <h3>Misc</h3>
<div class="tiles"> <div
v-if="tags.misc"
class="tiles"
>
<Tag <Tag
v-for="tag in tags.misc.concat(tags.body)" v-for="tag in tags.misc.concat(tags.body)"
:key="`tag-${tag.id}`" :key="`tag-${tag.id}`"

View File

@ -56,10 +56,20 @@ module.exports = {
'21sextury', '21sextury',
'julesjordan', 'julesjordan',
'naughtyamerica', 'naughtyamerica',
'legalporno', [
'cherrypimps',
'drilledxxx',
'wildoncam',
'bcmxxx',
'familyxxx',
'petitexxx',
'confessionsxxx',
'cuckedxxx',
],
'kellymadison', 'kellymadison',
'bangbros', 'bangbros',
'ddfnetwork', 'ddfnetwork',
'legalporno',
'score', 'score',
'boobpedia', 'boobpedia',
'pornhub', 'pornhub',

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

File diff suppressed because it is too large Load Diff

View File

@ -60,6 +60,12 @@ const networks = [
url: 'https://www.brazzers.com', url: 'https://www.brazzers.com',
description: 'Brazzers homepage is updated daily with official HD porn scenes. Our hottest videos and sex series are filled with big tits, sexy milf, top pornstars and special events.', description: 'Brazzers homepage is updated daily with official HD porn scenes. Our hottest videos and sex series are filled with big tits, sexy milf, top pornstars and special events.',
}, },
{
slug: 'cherrypimps',
name: 'Cherry Pimps',
url: 'https://www.cherrypimps.com',
description: 'CherryPimps your premium porn site to Download and Stream the hottest and most exclusive 4K HD videos and pictures on your phone, tablet, TV or console.',
},
{ {
slug: 'ddfnetwork', slug: 'ddfnetwork',
name: 'DDF Network', name: 'DDF Network',
@ -202,6 +208,12 @@ const networks = [
url: 'https://www.pervcity.com', url: 'https://www.pervcity.com',
description: '', description: '',
}, },
{
slug: 'pimpxxx',
name: 'Pimp.XXX',
url: 'https://www.pimp.xxx',
description: 'PIMP.XXX is the NEWEST and HOTTEST site featuring Exclusive Ultra High Definition 4k videos updated daily! Featuring the newest and the biggest pornstars with Big Tits, Tight Asses, and more!',
},
{ {
slug: 'pornpros', slug: 'pornpros',
name: 'Porn Pros', name: 'Porn Pros',

View File

@ -1171,6 +1171,33 @@ const sites = [
description: "Giant black dicks paired with round asses and garnished with the tightest pussies of all colors. Butts and Blacks delivers on its name sake, only the biggest dicks rocking the thickest chicks. These round honeys can take it all in and bounce around like it's a pogo stick. Come check out these soft round asses getting the attention they deserve.", description: "Giant black dicks paired with round asses and garnished with the tightest pussies of all colors. Butts and Blacks delivers on its name sake, only the biggest dicks rocking the thickest chicks. These round honeys can take it all in and bounce around like it's a pogo stick. Come check out these soft round asses getting the attention they deserve.",
network: 'brazzers', network: 'brazzers',
}, },
// CHERRY PIMPS
{
slug: 'cherrypimps',
name: 'Cherry Pimps',
url: 'https://cherrypimps.com',
description: 'CherryPimps your premium porn site to Download and Stream the hottest and most exclusive 4K HD videos and pictures on your phone, tablet, TV or console.',
network: 'cherrypimps',
parameters: {
extract: true,
},
},
{
slug: 'wildoncam',
name: 'Wild On Cam',
url: 'https://wildoncam.com',
tags: ['live'],
network: 'cherrypimps',
},
{
slug: 'britneyamber',
name: 'Britney Amber',
url: 'https://www.britneyamber.com',
network: 'cherrypimps',
parameters: {
extract: true,
},
},
// DDF NETWORK // DDF NETWORK
{ {
slug: 'ddfbusty', slug: 'ddfbusty',
@ -3081,6 +3108,46 @@ const sites = [
network: 'pervcity', network: 'pervcity',
parameters: { tourId: 9 }, parameters: { tourId: 9 },
}, },
// PIMP XXX
{
slug: 'drilledxxx',
name: 'Drilled.XXX',
url: 'https://drilled.xxx',
tags: ['anal'],
network: 'pimpxxx',
},
{
slug: 'cuckedxxx',
name: 'Cucked.XXX',
url: 'https://cucked.xxx',
tags: ['cuckold'],
network: 'pimpxxx',
},
{
slug: 'familyxxx',
name: 'Family.XXX',
url: 'https://family.xxx',
tags: ['family'],
network: 'pimpxxx',
},
{
slug: 'petitexxx',
name: 'Petite.XXX',
url: 'https://petite.xxx',
network: 'pimpxxx',
},
{
slug: 'confessionsxxx',
name: 'Confessions.XXX',
url: 'https://confessions.xxx',
network: 'pimpxxx',
},
{
slug: 'bcmxxx',
name: 'BCM.XXX',
url: 'https://bcm.xxx',
network: 'pimpxxx',
},
// PORN PROS // PORN PROS
{ {
name: 'Real Ex Girlfriends', name: 'Real Ex Girlfriends',

140
src/scrapers/cherrypimps.js Normal file
View File

@ -0,0 +1,140 @@
'use strict';
const { get, geta, ctxa, fd } = require('../utils/q');
const slugify = require('../utils/slugify');
function scrapeAll(scenes, site) {
return scenes.map(({ q, qa, qu, qd, ql, qi, qt }) => {
const url = qu('.text-thumb a');
const { pathname } = new URL(url);
const channelUrl = qu('.badge');
if (site?.parameters?.extract && q('.badge', true) !== site.name) {
return null;
}
const release = {};
release.url = channelUrl ? `${channelUrl}${pathname}` : url;
release.entryId = pathname.match(/\/\d+/)[0].slice(1);
release.title = q('.text-thumb a', true);
release.date = qd('.date', 'YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/);
release.duration = ql('.date', /(\d{2}:)?\d{2}:\d{2}/);
release.actors = qa('.category a', true);
release.poster = qi('img.video_placeholder, .video-images img');
release.teaser = { src: qt() };
return release;
}).filter(Boolean);
}
function scrapeScene({ q, qd, qa }, url, _site, baseRelease) {
const release = { url };
const { pathname } = new URL(url);
release.entryId = pathname.match(/\/\d+/)[0].slice(1);
release.title = q('.trailer-block_title', true);
release.description = q('.info-block:nth-child(3) .text', true);
release.date = qd('.info-block_data .text', 'MMMM D, YYYY', /\w+ \d{1,2}, \d{4}/);
const duration = baseRelease?.duration || Number(q('.info-block_data .text', true).match(/(\d+)\s+min/)?.[1]) * 60;
if (duration) release.duration = duration;
release.actors = qa('.info-block_data a[href*="/models"]', true);
release.tags = qa('.info-block a[href*="/categories"]', true);
const posterEl = q('.update_thumb');
const poster = posterEl.getAttribute('src0_3x') || posterEl.getAttribute('src0_2x') || posterEl.dataset.src;
if (poster && baseRelease?.poster) release.photos = [poster];
else if (poster) release.poster = poster;
return release;
}
function scrapeProfile({ q, qa, qtx }) {
const profile = {};
const keys = qa('.model-descr_line:not(.model-descr_rait) p.text span', true);
const values = qa('.model-descr_line:not(.model-descr_rait) p.text').map(el => qtx(el));
const bio = keys.reduce((acc, key, index) => ({ ...acc, [slugify(key, { delimiter: '_' })]: values[index] }), {});
if (bio.height) profile.height = Number(bio.height.match(/\((\d+)cm\)/)[1]);
if (bio.weight) profile.weight = Number(bio.weight.match(/\((\d+)kg\)/)[1]);
if (bio.race) profile.ethnicity = bio.race;
if (bio.date_of_birth) profile.birthdate = fd(bio.date_of_birth, 'MMMM D, YYYY');
if (bio.birthplace) profile.birthPlace = bio.birthplace;
if (bio.measurements) {
const [bust, waist, hip] = bio.measurements.split('-');
if (!/\?/.test(bust)) profile.bust = bust;
if (!/\?/.test(waist)) profile.waist = waist;
if (!/\?/.test(hip)) profile.hip = hip;
}
if (bio.hair) profile.hair = bio.hair;
if (bio.eyes) profile.eyes = bio.eyes;
if (/various/i.test(bio.tattoos)) profile.hasTattoos = true;
else if (/none/i.test(bio.tattoos)) profile.hasTattoos = false;
else if (bio.tattoos) {
profile.hasTattoos = true;
profile.tattoos = bio.tattoos;
}
if (/various/i.test(bio.piercings)) profile.hasPiercings = true;
else if (/none/i.test(bio.piercings)) profile.hasPiercings = false;
else if (bio.piercings) {
profile.hasPiercings = true;
profile.piercings = bio.piercings;
}
if (bio.aliases) profile.aliases = bio.aliases.split(',').map(alias => alias.trim());
const avatar = q('.model-img img');
profile.avatar = avatar.getAttribute('src0_3x') || avatar.getAttribute('src0_2x') || avatar.dataset.src;
const releases = qa('.video-thumb');
profile.releases = scrapeAll(ctxa(releases));
return profile;
}
async function fetchLatest(site, page = 1) {
const url = site.parameters?.extract
? `https://cherrypimps.com/categories/movies_${page}.html`
: `${site.url}/categories/movies_${page}.html`;
const qLatest = await geta(url, 'div.video-thumb');
return qLatest && scrapeAll(qLatest, site);
}
async function fetchScene(url, site, release) {
const qScene = await get(url);
return qScene && scrapeScene(qScene, url, site, release);
}
async function fetchProfile(actorName, scraperSlug) {
const actorSlug = slugify(actorName);
const actorSlug2 = slugify(actorName, { delimiter: '' });
const [url, url2] = ['cherrypimps', 'wildoncam'].includes(scraperSlug)
? [`https://${scraperSlug}.com/models/${actorSlug}.html`, `https://${scraperSlug}.com/models/${actorSlug2}.html`]
: [`https://${scraperSlug.replace('xxx', '')}.xxx/models/${actorSlug}.html`, `https://${scraperSlug.replace('xxx', '')}.xxx/models/${actorSlug2}.html`];
const qActor = await get(url) || await get(url2);
return qActor && scrapeProfile(qActor);
}
module.exports = {
fetchLatest,
fetchScene,
fetchProfile,
};

View File

@ -8,6 +8,7 @@ const bangbros = require('./bangbros');
const blowpass = require('./blowpass'); const blowpass = require('./blowpass');
const boobpedia = require('./boobpedia'); const boobpedia = require('./boobpedia');
const brazzers = require('./brazzers'); const brazzers = require('./brazzers');
const cherrypimps = require('./cherrypimps');
const ddfnetwork = require('./ddfnetwork'); const ddfnetwork = require('./ddfnetwork');
const digitalplayground = require('./digitalplayground'); const digitalplayground = require('./digitalplayground');
const dogfart = require('./dogfart'); const dogfart = require('./dogfart');
@ -65,6 +66,7 @@ module.exports = {
bangbros, bangbros,
blowpass, blowpass,
brazzers, brazzers,
cherrypimps,
ddfnetwork, ddfnetwork,
digitalplayground, digitalplayground,
dogfart, dogfart,
@ -90,6 +92,7 @@ module.exports = {
nubiles, nubiles,
perfectgonzo, perfectgonzo,
pervcity, pervcity,
pimpxxx: cherrypimps,
pornpros, pornpros,
private: privateNetwork, private: privateNetwork,
puretaboo, puretaboo,
@ -112,6 +115,7 @@ module.exports = {
boobpedia, boobpedia,
brattysis: nubiles, brattysis: nubiles,
brazzers, brazzers,
cherrypimps,
ddfnetwork, ddfnetwork,
deeplush: nubiles, deeplush: nubiles,
digitalplayground, digitalplayground,
@ -134,6 +138,7 @@ module.exports = {
nubilefilms: nubiles, nubilefilms: nubiles,
nubiles, nubiles,
nubilesporn: nubiles, nubilesporn: nubiles,
pimpxxx: cherrypimps,
pornhub, pornhub,
realitykings, realitykings,
score, score,

View File

@ -25,7 +25,7 @@ function scrapeLatest(scenes, site) {
}); });
} }
function scrapeScene(({ q }), _site) { function scrapeScene({ q }, _site) {
const release = {}; const release = {};
console.log(release); console.log(release);
@ -47,4 +47,5 @@ async function fetchScene(url, site) {
module.exports = { module.exports = {
fetchLatest, fetchLatest,
fetchScene,
}; };