Added Pinky XXX, changed ethnicity tags.
|
@ -50,9 +50,9 @@ async function mounted() {
|
||||||
],
|
],
|
||||||
appearance: [
|
appearance: [
|
||||||
'asian',
|
'asian',
|
||||||
'ebony',
|
'black',
|
||||||
'latina',
|
'latina',
|
||||||
'caucasian',
|
'white',
|
||||||
'natural-boobs',
|
'natural-boobs',
|
||||||
'fake-boobs',
|
'fake-boobs',
|
||||||
'blonde',
|
'blonde',
|
||||||
|
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 581 KiB After Width: | Height: | Size: 581 KiB |
Before Width: | Height: | Size: 471 KiB After Width: | Height: | Size: 471 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 782 KiB After Width: | Height: | Size: 782 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
@ -407,8 +407,8 @@ const tags = [
|
||||||
group: 'clothing',
|
group: 'clothing',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ebony',
|
name: 'black',
|
||||||
slug: 'ebony',
|
slug: 'black',
|
||||||
priority: 5,
|
priority: 5,
|
||||||
group: 'ethnicity',
|
group: 'ethnicity',
|
||||||
},
|
},
|
||||||
|
@ -967,8 +967,8 @@ const tags = [
|
||||||
slug: 'wet',
|
slug: 'wet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'caucasian',
|
name: 'white',
|
||||||
slug: 'caucasian',
|
slug: 'white',
|
||||||
priority: 7,
|
priority: 7,
|
||||||
group: 'ethnicity',
|
group: 'ethnicity',
|
||||||
},
|
},
|
||||||
|
@ -1187,8 +1187,8 @@ const aliases = [
|
||||||
for: 'bisexual',
|
for: 'bisexual',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'black',
|
name: 'ebony',
|
||||||
for: 'ebony',
|
for: 'black',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'blonde hair',
|
name: 'blonde hair',
|
||||||
|
@ -1824,8 +1824,8 @@ const aliases = [
|
||||||
for: 'corporal-punishment',
|
for: 'corporal-punishment',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'white',
|
name: 'caucasian',
|
||||||
for: 'caucasian',
|
for: 'white',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'work',
|
name: 'work',
|
||||||
|
|
|
@ -5666,7 +5666,7 @@ const sites = [
|
||||||
description: "You've just won the golden ticket to the best Chocolate BJs on the planet! We've sought far and wide to bring you the most beautiful black and ethnic pornstars. And they're in our members' area now! They can't wait to suck your white lollipop and lick the thick cream shooting from your big dick. Of course, no matter how sweet the booty or juicy the big tits, these brown foxes aren't all sugar and spice. In fact, when it comes to giving head, these big ass ebony babes know what they want: huge white cocks filling their throats!",
|
description: "You've just won the golden ticket to the best Chocolate BJs on the planet! We've sought far and wide to bring you the most beautiful black and ethnic pornstars. And they're in our members' area now! They can't wait to suck your white lollipop and lick the thick cream shooting from your big dick. Of course, no matter how sweet the booty or juicy the big tits, these brown foxes aren't all sugar and spice. In fact, when it comes to giving head, these big ass ebony babes know what they want: huge white cocks filling their throats!",
|
||||||
url: 'http://www.chocolatebjs.com',
|
url: 'http://www.chocolatebjs.com',
|
||||||
parent: 'pervcity',
|
parent: 'pervcity',
|
||||||
tags: ['blowjob', 'ebony'],
|
tags: ['blowjob', 'black'],
|
||||||
parameters: {
|
parameters: {
|
||||||
siteId: 5,
|
siteId: 5,
|
||||||
tourId: 6,
|
tourId: 6,
|
||||||
|
@ -5724,6 +5724,13 @@ const sites = [
|
||||||
url: 'https://bcm.xxx',
|
url: 'https://bcm.xxx',
|
||||||
parent: 'pimpxxx',
|
parent: 'pimpxxx',
|
||||||
},
|
},
|
||||||
|
// PINKY XXX
|
||||||
|
{
|
||||||
|
name: 'Pinky XXX',
|
||||||
|
slug: 'pinkyxxx',
|
||||||
|
url: 'https://pinkyxxx.com',
|
||||||
|
independent: true,
|
||||||
|
},
|
||||||
// PORN CZ
|
// PORN CZ
|
||||||
{
|
{
|
||||||
name: 'Czech Sex Casting',
|
name: 'Czech Sex Casting',
|
||||||
|
@ -8113,7 +8120,7 @@ const sites = [
|
||||||
slug: 'myblackcoeds',
|
slug: 'myblackcoeds',
|
||||||
url: 'https://teencoreclub.com/browsevideos/site/302/MyBlackCoeds',
|
url: 'https://teencoreclub.com/browsevideos/site/302/MyBlackCoeds',
|
||||||
tags: [
|
tags: [
|
||||||
'ebony',
|
'black',
|
||||||
],
|
],
|
||||||
alias: [
|
alias: [
|
||||||
'mbc',
|
'mbc',
|
||||||
|
@ -9200,7 +9207,7 @@ const sites = [
|
||||||
description: 'AllBlackX.com features the hottest ebony pornstar beauties in hardcore black on black gonzo porn. From director Mason, watch 4k ultra HD videos inside',
|
description: 'AllBlackX.com features the hottest ebony pornstar beauties in hardcore black on black gonzo porn. From director Mason, watch 4k ultra HD videos inside',
|
||||||
url: 'https://www.allblackx.com',
|
url: 'https://www.allblackx.com',
|
||||||
parent: 'xempire',
|
parent: 'xempire',
|
||||||
tags: ['ebony', 'bbc'],
|
tags: ['black', 'bbc'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'lesbianx',
|
slug: 'lesbianx',
|
||||||
|
|
|
@ -605,7 +605,7 @@ const tagPosters = [
|
||||||
['brunette', 0, 'Darcie Dolce for Playboy'],
|
['brunette', 0, 'Darcie Dolce for Playboy'],
|
||||||
['bondage', 0, 'Veronica Leal for Her Limit'],
|
['bondage', 0, 'Veronica Leal for Her Limit'],
|
||||||
['bukkake', 0, 'Jaye Summers in "Facialized 5" for HardX'],
|
['bukkake', 0, 'Jaye Summers in "Facialized 5" for HardX'],
|
||||||
['caucasian', 2, 'Kenzie Reeves for Bang'],
|
['white', 2, 'Kenzie Reeves for Bang'],
|
||||||
['creampie', 1, 'Eveline Dellai for Nubiles'],
|
['creampie', 1, 'Eveline Dellai for Nubiles'],
|
||||||
['cum-in-mouth', 1, 'Sarah Vandella in "Blow Bang Vandella" for HardX'],
|
['cum-in-mouth', 1, 'Sarah Vandella in "Blow Bang Vandella" for HardX'],
|
||||||
['cum-on-butt', 0, 'Jynx Maze in "Don\'t Make Me Beg 4" for Evil Angel'],
|
['cum-on-butt', 0, 'Jynx Maze in "Don\'t Make Me Beg 4" for Evil Angel'],
|
||||||
|
@ -623,7 +623,7 @@ const tagPosters = [
|
||||||
['dp', 3, 'Hime Marie in LegalPorno AA047'],
|
['dp', 3, 'Hime Marie in LegalPorno AA047'],
|
||||||
['dvp', 'poster', 'Riley Reid in "Pizza That Ass" for Reid My Lips'],
|
['dvp', 'poster', 'Riley Reid in "Pizza That Ass" for Reid My Lips'],
|
||||||
['dv-tp', 'poster', 'Juelz Ventura in "Gangbanged 5" for Elegant Angel'],
|
['dv-tp', 'poster', 'Juelz Ventura in "Gangbanged 5" for Elegant Angel'],
|
||||||
['ebony', 2, 'Nia Nacci for Sweetheart Video'],
|
['black', 2, 'Nia Nacci for Sweetheart Video'],
|
||||||
['facefucking', 5, 'Mia Moore B for Throated'],
|
['facefucking', 5, 'Mia Moore B for Throated'],
|
||||||
['facial', 0, 'Brooklyn Gray in "All About Ass 4" for Evil Angel'],
|
['facial', 0, 'Brooklyn Gray in "All About Ass 4" for Evil Angel'],
|
||||||
['fake-boobs', 7, 'Charley Atwell for iCandiGirls'],
|
['fake-boobs', 7, 'Charley Atwell for iCandiGirls'],
|
||||||
|
@ -722,8 +722,8 @@ const tagPhotos = [
|
||||||
['blowjob', 3, 'Rose Valie for Hands On Hardcore'],
|
['blowjob', 3, 'Rose Valie for Hands On Hardcore'],
|
||||||
['blowjob', 2, 'Luna Kitsuen in "Gag Reflex" for Evil Angel'],
|
['blowjob', 2, 'Luna Kitsuen in "Gag Reflex" for Evil Angel'],
|
||||||
// ['bukkake', 'poster', 'Mia Malkova in "Facialized 2" for HardX'],
|
// ['bukkake', 'poster', 'Mia Malkova in "Facialized 2" for HardX'],
|
||||||
['caucasian', 0, 'Remy Lacroix for HardX'],
|
['white', 0, 'Remy Lacroix for HardX'],
|
||||||
['caucasian', 1, 'Sheena Shaw for Brazzers'],
|
['white', 1, 'Sheena Shaw for Brazzers'],
|
||||||
['creampie', 2, 'Natasha Lapiedra in "New and Ready" for 5K Porn'],
|
['creampie', 2, 'Natasha Lapiedra in "New and Ready" for 5K Porn'],
|
||||||
['creampie', 'poster', 'Alina Lopez in "Making Yourself Unforgettable" for Blacked'],
|
['creampie', 'poster', 'Alina Lopez in "Making Yourself Unforgettable" for Blacked'],
|
||||||
['cum-drunk', 0, 'Ashly Anderson in "Rough Love" for Hookup Hotshot'],
|
['cum-drunk', 0, 'Ashly Anderson in "Rough Love" for Hookup Hotshot'],
|
||||||
|
@ -791,7 +791,7 @@ const tagPhotos = [
|
||||||
['dvp', 0, 'Aaliyah Hadid in "Squirting From Double Penetration With Anal" for Bang Bros'],
|
['dvp', 0, 'Aaliyah Hadid in "Squirting From Double Penetration With Anal" for Bang Bros'],
|
||||||
['dv-tp', 1, 'Adriana Chechik in "Adriana\'s Triple Anal Penetration!"'],
|
['dv-tp', 1, 'Adriana Chechik in "Adriana\'s Triple Anal Penetration!"'],
|
||||||
['dv-tp', 0, 'Luna Rival in LegalPorno SZ1490'],
|
['dv-tp', 0, 'Luna Rival in LegalPorno SZ1490'],
|
||||||
['ebony', 1, 'Ana Foxxx in "DP Me 4" for HardX'],
|
['black', 1, 'Ana Foxxx in "DP Me 4" for HardX'],
|
||||||
['facial', 3, 'Paige Owens in "Oral Restraint" for Babes'],
|
['facial', 3, 'Paige Owens in "Oral Restraint" for Babes'],
|
||||||
['facial', 'poster', 'Jynx Maze'],
|
['facial', 'poster', 'Jynx Maze'],
|
||||||
['facial', 2, 'Ashly Anderson for Hookup Hotshot'],
|
['facial', 2, 'Ashly Anderson for Hookup Hotshot'],
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const qu = require('../utils/qu');
|
||||||
|
const http = require('../utils/http');
|
||||||
|
|
||||||
|
async function getTrailer(entryId, channel) {
|
||||||
|
const videoLinksRes = await http.post('https://pinkyxxx.com/wp-admin/admin-ajax.php', {
|
||||||
|
action: 'vidplay',
|
||||||
|
vid: entryId,
|
||||||
|
type: 'promo',
|
||||||
|
}, {
|
||||||
|
encodeJSON: false,
|
||||||
|
decodeJSON: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!videoLinksRes.ok || !videoLinksRes.body.size1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const scriptUrl = qu.extract(videoLinksRes.body.size1)?.query.url('script', 'src', { origin: channel.url });
|
||||||
|
const videoScriptRes = await http.get(scriptUrl);
|
||||||
|
|
||||||
|
if (!videoScriptRes.ok) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const videoDataString = videoScriptRes.body.match(/"clip":({.*"})/)?.[1];
|
||||||
|
const videoData = videoDataString && JSON.parse(videoDataString);
|
||||||
|
|
||||||
|
const posterUrlString = videoScriptRes.body.match(/src="(.*poster.*?)"/)?.[1];
|
||||||
|
const posterUrlEl = videoScriptRes.document.createElement('span');
|
||||||
|
|
||||||
|
posterUrlEl.innerHTML = posterUrlString;
|
||||||
|
|
||||||
|
return {
|
||||||
|
trailer: videoData?.url || null,
|
||||||
|
poster: posterUrlEl.textContent || null,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrapeAll(scenes) {
|
||||||
|
return scenes.map((scene) => {
|
||||||
|
const release = {};
|
||||||
|
|
||||||
|
release.entryId = scene.ID;
|
||||||
|
release.url = scene.permalink;
|
||||||
|
|
||||||
|
release.title = scene.title;
|
||||||
|
release.description = scene.description;
|
||||||
|
|
||||||
|
release.date = qu.extractDate(scene.info?.post_date, 'YYYY-MM-DD HH:mm:ss') || qu.extractDate(scene.date, 'MMMM D, YYYY'); // eslint-disable-line camelcase
|
||||||
|
|
||||||
|
release.poster = scene.poster[0];
|
||||||
|
release.photos = Object.entries(scene).reduce((acc, [key, data]) => {
|
||||||
|
if (/thumb/.test(key)) {
|
||||||
|
return [...acc, data.url];
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return release;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function scrapeScene({ query }, channel) {
|
||||||
|
const release = {};
|
||||||
|
|
||||||
|
release.title = query.cnt('.title');
|
||||||
|
release.description = query.cnt('.description');
|
||||||
|
|
||||||
|
release.entryId = query.q('body', 'class').match(/postid-(\d+)/)?.[1];
|
||||||
|
|
||||||
|
const { poster, trailer } = await getTrailer(release.entryId, channel) || {};
|
||||||
|
|
||||||
|
release.poster = poster;
|
||||||
|
release.trailer = trailer;
|
||||||
|
|
||||||
|
return release;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchLatest(channel, page) {
|
||||||
|
const res = await http.post('https://pinkyxxx.com/wp-admin/admin-ajax.php', {
|
||||||
|
action: 'vls',
|
||||||
|
limit: 10,
|
||||||
|
offset: (page - 1) * 10,
|
||||||
|
}, {
|
||||||
|
encodeJSON: false,
|
||||||
|
decodeJSON: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
return scrapeAll(res.body.listings);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchScene(url, channel) {
|
||||||
|
const res = await qu.get(url);
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
return scrapeScene(res.item, channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
fetchLatest,
|
||||||
|
fetchScene,
|
||||||
|
};
|
|
@ -56,6 +56,7 @@ const pervcity = require('./pervcity');
|
||||||
const porncz = require('./porncz');
|
const porncz = require('./porncz');
|
||||||
const pornhub = require('./pornhub');
|
const pornhub = require('./pornhub');
|
||||||
const pascalssubsluts = require('./pascalssubsluts'); // reserved keyword
|
const pascalssubsluts = require('./pascalssubsluts'); // reserved keyword
|
||||||
|
const pinkyxxx = require('./pinkyxxx');
|
||||||
const privateNetwork = require('./private'); // reserved keyword
|
const privateNetwork = require('./private'); // reserved keyword
|
||||||
const puretaboo = require('./puretaboo');
|
const puretaboo = require('./puretaboo');
|
||||||
const realitykings = require('./realitykings');
|
const realitykings = require('./realitykings');
|
||||||
|
@ -146,6 +147,7 @@ const scrapers = {
|
||||||
perfectgonzo,
|
perfectgonzo,
|
||||||
pervcity,
|
pervcity,
|
||||||
pimpxxx: cherrypimps,
|
pimpxxx: cherrypimps,
|
||||||
|
pinkyxxx,
|
||||||
porncz,
|
porncz,
|
||||||
pornpros: whalemember,
|
pornpros: whalemember,
|
||||||
private: privateNetwork,
|
private: privateNetwork,
|
||||||
|
|