Adapted Karups scraper for BoyFun.

This commit is contained in:
DebaucheryLibrarian 2026-02-01 03:28:17 +01:00
parent 2f7ddd277d
commit 82c436f663
4 changed files with 34 additions and 12 deletions

View File

@ -6120,29 +6120,37 @@ const sites = [
},
// KARUPS
{
slug: 'karupsprivatecollection',
name: 'Private Collection',
slug: 'privatecollection',
rename: 'karupsprivatecollection',
alias: ['kpc'],
url: 'https://www.karups.com/site/kpc',
hasLogo: false,
parent: 'karups',
},
{
slug: 'karupshometownamateurs',
name: 'Hometown Amateurs',
slug: 'hometownamateurs',
rename: 'karupshometownamateurs',
alias: ['kha'],
url: 'https://www.karups.com/site/kha',
hasLogo: false,
parent: 'karups',
},
{
slug: 'karupsolderwomen',
name: 'Older Women',
slug: 'olderwomen',
rename: 'karupsolderwomen',
alias: ['kow'],
url: 'https://www.karups.com/site/kow',
hasLogo: false,
parent: 'karups',
},
{
name: 'BoyFun',
slug: 'boyfun',
url: 'https://www.boyfun.com',
parent: 'karups',
independent: true,
tags: ['gay'],
},
// KELLY MADISON MEDIA / 5K / 8K
{
slug: 'teenfidelity',

View File

@ -220,6 +220,7 @@ module.exports = {
inthecrack,
jerkaoke: modelmedia,
karups,
boyfun: karups,
kellymadison,
'8kmembers': kellymadison,
// analvids,

View File

@ -18,7 +18,7 @@ function scrapeAll(scenes) {
release.entryId = new URL(release.url).pathname.match(/(\d+)\.html/)?.[1];
release.title = query.content('.title');
release.date = query.date('.date', 'MMM Do, YYYY');
release.date = query.date('.date', ['MMM Do, YYYY', 'DD MMM YYYY'], { match: null });
release.channel = channelSlugs[query.content('.site')];
@ -84,7 +84,19 @@ function scrapeScene({ query }, { url }) {
function scrapeProfile({ query }, entity) {
const profile = {};
profile.gender = 'female';
const bio = Object.fromEntries(query.all('.model-table .item').map((bioEl) => [
slugify(unprint.query.content(bioEl, '.label'), '_'),
unprint.query.content(bioEl, '.value'),
]));
profile.age = unprint.extractNumber(bio.date_of_birth); // seemingly only used on Boyfun and always age
profile.height = unprint.extractNumber(bio.height);
profile.weight = unprint.extractNumber(bio.height);
profile.penisLength = unprint.extractNumber(bio.dick_size);
if (bio.cut_uncut?.toLowerCase() === 'cut') profile.isCircumcised = true;
if (bio.cut_uncut?.toLowerCase() === 'uncut') profile.isCircumcised = false;
profile.avatar = query.img('.model-thumb img[src*=".jpg"]');
profile.scenes = scrapeAll(unprint.initAll(query.all('.listing-videos .item')), entity);
@ -92,12 +104,12 @@ function scrapeProfile({ query }, entity) {
return profile;
}
async function getActorUrl(actor) {
async function getActorUrl(actor, entity) {
if (actor.url) {
return actor.url;
}
const res = await unprint.get(`https://www.karups.com/models/search/${actor.slug}/`, {
const res = await unprint.get(`${entity.origin}/models/search/${actor.slug}/`, {
selectAll: '.listing-models .item',
cookies: {
warningHidden: 'hide',
@ -114,7 +126,7 @@ async function getActorUrl(actor) {
}
async function fetchProfile(actor, entity) {
const actorUrl = await getActorUrl(actor);
const actorUrl = await getActorUrl(actor, entity);
if (!actorUrl) {
return null;

View File

@ -227,7 +227,8 @@ const actors = [
{ 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'] },
{ entity: 'meidenvanholland', name: 'Izzy Bizzy Bang Bang', fields: ['avatar', 'description'] },
{ entity: 'karups', name: 'Peach Lollypop', fields: ['avatar', 'gender'] },
{ entity: 'karups', name: 'Peach Lollypop', fields: ['avatar'] },
{ entity: 'boyfun', name: 'Amahd Passer', fields: ['avatar', 'age', 'height', 'weight', 'penisLength', 'isCircumcised'] },
];
const actorScrapers = scrapers.actors;