Added Pinky XXX, changed ethnicity tags.
|
@ -50,9 +50,9 @@ async function mounted() {
|
|||
],
|
||||
appearance: [
|
||||
'asian',
|
||||
'ebony',
|
||||
'black',
|
||||
'latina',
|
||||
'caucasian',
|
||||
'white',
|
||||
'natural-boobs',
|
||||
'fake-boobs',
|
||||
'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',
|
||||
},
|
||||
{
|
||||
name: 'ebony',
|
||||
slug: 'ebony',
|
||||
name: 'black',
|
||||
slug: 'black',
|
||||
priority: 5,
|
||||
group: 'ethnicity',
|
||||
},
|
||||
|
@ -967,8 +967,8 @@ const tags = [
|
|||
slug: 'wet',
|
||||
},
|
||||
{
|
||||
name: 'caucasian',
|
||||
slug: 'caucasian',
|
||||
name: 'white',
|
||||
slug: 'white',
|
||||
priority: 7,
|
||||
group: 'ethnicity',
|
||||
},
|
||||
|
@ -1187,8 +1187,8 @@ const aliases = [
|
|||
for: 'bisexual',
|
||||
},
|
||||
{
|
||||
name: 'black',
|
||||
for: 'ebony',
|
||||
name: 'ebony',
|
||||
for: 'black',
|
||||
},
|
||||
{
|
||||
name: 'blonde hair',
|
||||
|
@ -1824,8 +1824,8 @@ const aliases = [
|
|||
for: 'corporal-punishment',
|
||||
},
|
||||
{
|
||||
name: 'white',
|
||||
for: 'caucasian',
|
||||
name: 'caucasian',
|
||||
for: 'white',
|
||||
},
|
||||
{
|
||||
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!",
|
||||
url: 'http://www.chocolatebjs.com',
|
||||
parent: 'pervcity',
|
||||
tags: ['blowjob', 'ebony'],
|
||||
tags: ['blowjob', 'black'],
|
||||
parameters: {
|
||||
siteId: 5,
|
||||
tourId: 6,
|
||||
|
@ -5724,6 +5724,13 @@ const sites = [
|
|||
url: 'https://bcm.xxx',
|
||||
parent: 'pimpxxx',
|
||||
},
|
||||
// PINKY XXX
|
||||
{
|
||||
name: 'Pinky XXX',
|
||||
slug: 'pinkyxxx',
|
||||
url: 'https://pinkyxxx.com',
|
||||
independent: true,
|
||||
},
|
||||
// PORN CZ
|
||||
{
|
||||
name: 'Czech Sex Casting',
|
||||
|
@ -8113,7 +8120,7 @@ const sites = [
|
|||
slug: 'myblackcoeds',
|
||||
url: 'https://teencoreclub.com/browsevideos/site/302/MyBlackCoeds',
|
||||
tags: [
|
||||
'ebony',
|
||||
'black',
|
||||
],
|
||||
alias: [
|
||||
'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',
|
||||
url: 'https://www.allblackx.com',
|
||||
parent: 'xempire',
|
||||
tags: ['ebony', 'bbc'],
|
||||
tags: ['black', 'bbc'],
|
||||
},
|
||||
{
|
||||
slug: 'lesbianx',
|
||||
|
|
|
@ -605,7 +605,7 @@ const tagPosters = [
|
|||
['brunette', 0, 'Darcie Dolce for Playboy'],
|
||||
['bondage', 0, 'Veronica Leal for Her Limit'],
|
||||
['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'],
|
||||
['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'],
|
||||
|
@ -623,7 +623,7 @@ const tagPosters = [
|
|||
['dp', 3, 'Hime Marie in LegalPorno AA047'],
|
||||
['dvp', 'poster', 'Riley Reid in "Pizza That Ass" for Reid My Lips'],
|
||||
['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'],
|
||||
['facial', 0, 'Brooklyn Gray in "All About Ass 4" for Evil Angel'],
|
||||
['fake-boobs', 7, 'Charley Atwell for iCandiGirls'],
|
||||
|
@ -722,8 +722,8 @@ const tagPhotos = [
|
|||
['blowjob', 3, 'Rose Valie for Hands On Hardcore'],
|
||||
['blowjob', 2, 'Luna Kitsuen in "Gag Reflex" for Evil Angel'],
|
||||
// ['bukkake', 'poster', 'Mia Malkova in "Facialized 2" for HardX'],
|
||||
['caucasian', 0, 'Remy Lacroix for HardX'],
|
||||
['caucasian', 1, 'Sheena Shaw for Brazzers'],
|
||||
['white', 0, 'Remy Lacroix for HardX'],
|
||||
['white', 1, 'Sheena Shaw for Brazzers'],
|
||||
['creampie', 2, 'Natasha Lapiedra in "New and Ready" for 5K Porn'],
|
||||
['creampie', 'poster', 'Alina Lopez in "Making Yourself Unforgettable" for Blacked'],
|
||||
['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'],
|
||||
['dv-tp', 1, 'Adriana Chechik in "Adriana\'s Triple Anal Penetration!"'],
|
||||
['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', 'poster', 'Jynx Maze'],
|
||||
['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 pornhub = require('./pornhub');
|
||||
const pascalssubsluts = require('./pascalssubsluts'); // reserved keyword
|
||||
const pinkyxxx = require('./pinkyxxx');
|
||||
const privateNetwork = require('./private'); // reserved keyword
|
||||
const puretaboo = require('./puretaboo');
|
||||
const realitykings = require('./realitykings');
|
||||
|
@ -146,6 +147,7 @@ const scrapers = {
|
|||
perfectgonzo,
|
||||
pervcity,
|
||||
pimpxxx: cherrypimps,
|
||||
pinkyxxx,
|
||||
porncz,
|
||||
pornpros: whalemember,
|
||||
private: privateNetwork,
|
||||
|
|