Finished Cum Louder scraper, updated Vixen scraper. Added tag posters.
|
@ -221,8 +221,6 @@ function initUiActions(store, _router) {
|
||||||
userId: store.state.auth.user?.id,
|
userId: store.state.auth.user?.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(res.results);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
releases: res?.results.map(result => curateRelease(result.release)) || [],
|
releases: res?.results.map(result => curateRelease(result.release)) || [],
|
||||||
actors: res?.actors.map(actor => curateActor(actor)) || [],
|
actors: res?.actors.map(actor => curateActor(actor)) || [],
|
||||||
|
|
After Width: | Height: | Size: 2.9 MiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 2.9 MiB |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 1008 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 3.6 MiB |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 3.6 MiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 55 KiB |
|
@ -2161,7 +2161,7 @@ const sites = [
|
||||||
parent: 'cumlouder',
|
parent: 'cumlouder',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'FuckinVan',
|
name: 'FuckInVan',
|
||||||
slug: 'fuckinvan',
|
slug: 'fuckinvan',
|
||||||
url: 'https://www.cumlouder.com/site/fuckinvan',
|
url: 'https://www.cumlouder.com/site/fuckinvan',
|
||||||
description: "Welcome to the love van. With brand new wheels, perfect damping and provisiones of condoms, we're ready to fuck non-stop for miles. Do you want to get in?",
|
description: "Welcome to the love van. With brand new wheels, perfect damping and provisiones of condoms, we're ready to fuck non-stop for miles. Do you want to get in?",
|
||||||
|
@ -2175,7 +2175,7 @@ const sites = [
|
||||||
parent: 'cumlouder',
|
parent: 'cumlouder',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Ready or not... Here I Cum',
|
name: 'Ready Or Not... Here I Cum',
|
||||||
slug: 'readyornothereicum',
|
slug: 'readyornothereicum',
|
||||||
url: 'https://www.cumlouder.com/site/ready-or-not-here-i-cum',
|
url: 'https://www.cumlouder.com/site/ready-or-not-here-i-cum',
|
||||||
description: "Nacho Vidal arrives at CumLouder to celebrate our fourth anniversary with a new series where he's gonna demonstrate why he still is and still will be for a long time 'the leader' in what refers to Spanish porn. He'll be completely in his element by fucking around in any public place he'll feel like doing it for our series called 'Ready or not... Here I Cum'. Stay tuned and don't miss these great sex adventures in a cap, a carwash, on the highway or even in a car park. CumLouder wasn't about to quit the business and Nacho Vidal wasn't dead. Au contraire my dear friend, they're even more alive than ever before and ready to give you the best Latin porn you can find on the whole Internet for many more years.",
|
description: "Nacho Vidal arrives at CumLouder to celebrate our fourth anniversary with a new series where he's gonna demonstrate why he still is and still will be for a long time 'the leader' in what refers to Spanish porn. He'll be completely in his element by fucking around in any public place he'll feel like doing it for our series called 'Ready or not... Here I Cum'. Stay tuned and don't miss these great sex adventures in a cap, a carwash, on the highway or even in a car park. CumLouder wasn't about to quit the business and Nacho Vidal wasn't dead. Au contraire my dear friend, they're even more alive than ever before and ready to give you the best Latin porn you can find on the whole Internet for many more years.",
|
||||||
|
@ -2210,7 +2210,7 @@ const sites = [
|
||||||
parent: 'cumlouder',
|
parent: 'cumlouder',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'LivingWithaPornstar',
|
name: 'LivingWithAPornstar',
|
||||||
slug: 'livingwithapornstar',
|
slug: 'livingwithapornstar',
|
||||||
url: 'https://www.cumlouder.com/site/livingwithapornstar',
|
url: 'https://www.cumlouder.com/site/livingwithapornstar',
|
||||||
description: 'Pornstars have a life beyond porn. Do you want to know what they do from the moment they wake up until they go sleeping? We know you want to. The girls themselves are gonna tell you everything, we give them the camera and they show you all you want to know about them in the first person.',
|
description: 'Pornstars have a life beyond porn. Do you want to know what they do from the moment they wake up until they go sleeping? We know you want to. The girls themselves are gonna tell you everything, we give them the camera and they show you all you want to know about them in the first person.',
|
||||||
|
@ -2224,7 +2224,7 @@ const sites = [
|
||||||
parent: 'cumlouder',
|
parent: 'cumlouder',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Ex-girlfriends',
|
name: 'Ex-Girlfriends',
|
||||||
slug: 'exgirlfriends',
|
slug: 'exgirlfriends',
|
||||||
url: 'https://www.cumlouder.com/site/ex-girlfriends',
|
url: 'https://www.cumlouder.com/site/ex-girlfriends',
|
||||||
description: 'We converted our pornstars into erotica goddesses, into our most glamorous lovers. By undressing their beautiful and sensual bodies. By laying them softly on a bed, caressing their silky breasts, kissing them passionately and conquering them by giving these women all our tender love. We light on the fire of their volcano and take them subtly, but inoxerably, to a lustful bang and orgasms that make them shudder when experiencing intense pleasure.',
|
description: 'We converted our pornstars into erotica goddesses, into our most glamorous lovers. By undressing their beautiful and sensual bodies. By laying them softly on a bed, caressing their silky breasts, kissing them passionately and conquering them by giving these women all our tender love. We light on the fire of their volcano and take them subtly, but inoxerably, to a lustful bang and orgasms that make them shudder when experiencing intense pleasure.',
|
||||||
|
@ -2267,7 +2267,7 @@ const sites = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'POV',
|
name: 'POV',
|
||||||
slug: 'pov',
|
slug: 'cumlouderpov',
|
||||||
url: 'https://www.cumlouder.com/site/pov',
|
url: 'https://www.cumlouder.com/site/pov',
|
||||||
description: "Experience hot sex and naughty porn like you've never done before, in the first person, exclusively here on CumLouder! Enjoy this unique sexual experience where a computer screen is the only thing that separates you from the girl of your dreams... Fuck her!",
|
description: "Experience hot sex and naughty porn like you've never done before, in the first person, exclusively here on CumLouder! Enjoy this unique sexual experience where a computer screen is the only thing that separates you from the girl of your dreams... Fuck her!",
|
||||||
parent: 'cumlouder',
|
parent: 'cumlouder',
|
||||||
|
|
|
@ -608,6 +608,7 @@ const tagMedia = [
|
||||||
['airtight', 9, 'Cindy Shine in GP1658'],
|
['airtight', 9, 'Cindy Shine in GP1658'],
|
||||||
['anal', 5, 'Abella Danger', 'hardx'],
|
['anal', 5, 'Abella Danger', 'hardx'],
|
||||||
['anal', 'kira_noir_julesjordan', 'Kira Noir in "Kira Noir Opens Her Ass For Manuel"', 'julesjordan'],
|
['anal', 'kira_noir_julesjordan', 'Kira Noir in "Kira Noir Opens Her Ass For Manuel"', 'julesjordan'],
|
||||||
|
['anal', 'kelly_oliveira_teenfidelity_1', 'Kelly Oliveira in "Keep It Going"', 'teenfidelity'],
|
||||||
['anal', 'jane_wilde_evilangel_2', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'],
|
['anal', 'jane_wilde_evilangel_2', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'],
|
||||||
['anal', 'jynx_maze_evilangel', 'Jynx Maze in "Gape Me"', 'evilangel'],
|
['anal', 'jynx_maze_evilangel', 'Jynx Maze in "Gape Me"', 'evilangel'],
|
||||||
['anal', 0, 'Adriana Chechik in "Manuel Creampies Their Asses 3"', 'julesjordan'],
|
['anal', 0, 'Adriana Chechik in "Manuel Creampies Their Asses 3"', 'julesjordan'],
|
||||||
|
@ -785,13 +786,13 @@ const tagMedia = [
|
||||||
['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 SZ1490'],
|
['dv-tp', 0, 'Luna Rival in SZ1490'],
|
||||||
['facefucking', 5, 'Mia Moore B', 'throated'],
|
['facefucking', 5, 'Mia Moore B', 'throated'],
|
||||||
['facefucking', 6, 'Halle Hayes in "Towering Temptress"', '5kporn'],
|
['facefucking', 'paige_owens_julesjordan', 'Paige Owens in "Butt Slut In Anal Training"', 'julesjordan'],
|
||||||
['facefucking', 'adria_rae_throated', 'Adria Rae in "Adria Rae Sucks Cock All Day"', 'throated'],
|
['facefucking', 'adria_rae_throated', 'Adria Rae in "Adria Rae Sucks Cock All Day"', 'throated'],
|
||||||
|
['facefucking', 6, 'Halle Hayes in "Towering Temptress"', '5kporn'],
|
||||||
['facefucking', 'cathy_heaven_roccosiffredi', 'Cathy Heaven', 'roccosiffredi'],
|
['facefucking', 'cathy_heaven_roccosiffredi', 'Cathy Heaven', 'roccosiffredi'],
|
||||||
['facefucking', 1, 'Paige Owens in "Dark Meat 12"', 'evilangel'],
|
['facefucking', 2, 'Jynx Maze', 'throated'],
|
||||||
['facefucking', 7, 'Anya Olsen and Audrey Snow in "Babysitter Busted Giving A BJ"', 'mommyblowsbest'],
|
['facefucking', 7, 'Anya Olsen and Audrey Snow in "Babysitter Busted Giving A BJ"', 'mommyblowsbest'],
|
||||||
['facefucking', 0, 'Ashly Anderson in "Rough Love"', 'hookuphotshot'],
|
['facefucking', 0, 'Ashly Anderson in "Rough Love"', 'hookuphotshot'],
|
||||||
['facefucking', 2, 'Jynx Maze', 'throated'],
|
|
||||||
['facefucking', 4, 'Brooklyn Gray in "Throats Fucks 6"', 'evilangel'],
|
['facefucking', 4, 'Brooklyn Gray in "Throats Fucks 6"', 'evilangel'],
|
||||||
['facefucking', 3, 'Adriana Chechik in "Performing Magic Butt Tricks With Jules Jordan. What Will Disappear In Her Ass?"', 'julesjordan'],
|
['facefucking', 3, 'Adriana Chechik in "Performing Magic Butt Tricks With Jules Jordan. What Will Disappear In Her Ass?"', 'julesjordan'],
|
||||||
['facial', 0, 'Brooklyn Gray in "All About Ass 4"', 'evilangel'],
|
['facial', 0, 'Brooklyn Gray in "All About Ass 4"', 'evilangel'],
|
||||||
|
@ -819,6 +820,7 @@ const tagMedia = [
|
||||||
['enhanced-boobs', 'clanddi_jinkcego_ddfbusty_5', 'Clanddi Jinkcego & Rebecca Jessop', 'ddfbusty'],
|
['enhanced-boobs', 'clanddi_jinkcego_ddfbusty_5', 'Clanddi Jinkcego & Rebecca Jessop', 'ddfbusty'],
|
||||||
['enhanced-boobs', 'trudy_photodromm_1', 'Trudy', 'photodromm'],
|
['enhanced-boobs', 'trudy_photodromm_1', 'Trudy', 'photodromm'],
|
||||||
['enhanced-boobs', 'kenzie_anne_playboy', 'Miss Kenzie Anne in "Supercharged"', 'playboy'],
|
['enhanced-boobs', 'kenzie_anne_playboy', 'Miss Kenzie Anne in "Supercharged"', 'playboy'],
|
||||||
|
['enhanced-boobs', 'kelly_oliveira_teenfidelity', 'Kelly Oliveira in "Keep It Going"', 'teenfidelity'],
|
||||||
['enhanced-boobs', 9, 'Putri Cinta', 'watch4beauty'],
|
['enhanced-boobs', 9, 'Putri Cinta', 'watch4beauty'],
|
||||||
['enhanced-boobs', 3, 'Ashly Anderson', 'passionhd'],
|
['enhanced-boobs', 3, 'Ashly Anderson', 'passionhd'],
|
||||||
['enhanced-boobs', 'jennifer_mendez_bangbros', 'Jennifer Mendez', 'bangbros'],
|
['enhanced-boobs', 'jennifer_mendez_bangbros', 'Jennifer Mendez', 'bangbros'],
|
||||||
|
@ -877,10 +879,11 @@ const tagMedia = [
|
||||||
['interracial', 0, 'Jaye Summers and Prince Yahshua in "Platinum Pussy 3"', 'julesjordan'],
|
['interracial', 0, 'Jaye Summers and Prince Yahshua in "Platinum Pussy 3"', 'julesjordan'],
|
||||||
['latex', 0, 'Bianca Beauchamp in "Cherry Nun"', 'latexlair'],
|
['latex', 0, 'Bianca Beauchamp in "Cherry Nun"', 'latexlair'],
|
||||||
['latex', 1, 'Aletta Ocean in "Latex Dream"', 'alettaoceanlive'],
|
['latex', 1, 'Aletta Ocean in "Latex Dream"', 'alettaoceanlive'],
|
||||||
['latina', 3, 'Gina Valentina', 'brazzers'],
|
['latina', 'kelly_oliveira_teenfidelity_2', 'Kelly Oliveira in "Keep It Going"', 'teenfidelity'],
|
||||||
['latina', 2, 'Veronica Leal', 'herlimit'],
|
['latina', 2, 'Veronica Leal', 'herlimit'],
|
||||||
['latina', 1, 'Jynx Maze in "Big Anal Asses 2"', 'hardx'],
|
['latina', 1, 'Jynx Maze in "Big Anal Asses 2"', 'hardx'],
|
||||||
['latina', 0, 'Vienna Black', 'spizoo'],
|
['latina', 0, 'Vienna Black', 'spizoo'],
|
||||||
|
['latina', 3, 'Gina Valentina', 'brazzers'],
|
||||||
['lesbian', 'honey_gold_kaylani_lei_brazzers', 'Honey Gold and Kaylani Lei', 'brazzers'],
|
['lesbian', 'honey_gold_kaylani_lei_brazzers', 'Honey Gold and Kaylani Lei', 'brazzers'],
|
||||||
['lesbian', 0, 'Jenna Sativa and Alina Lopez in "Opposites Attract"', 'girlgirl'],
|
['lesbian', 0, 'Jenna Sativa and Alina Lopez in "Opposites Attract"', 'girlgirl'],
|
||||||
['maid', 0, 'Whitney Wright in "Dredd Up Your Ass 2"', 'julesjordan'],
|
['maid', 0, 'Whitney Wright in "Dredd Up Your Ass 2"', 'julesjordan'],
|
||||||
|
|
|
@ -218,7 +218,7 @@ async function fetchEntitiesBySlug(entitySlugs, sort = 'asc') {
|
||||||
const entitiesBySlug = entities.rows.reduce((accEntities, { entity }) => ({
|
const entitiesBySlug = entities.rows.reduce((accEntities, { entity }) => ({
|
||||||
...accEntities,
|
...accEntities,
|
||||||
[entity.slug]: accEntities[entity.slug] || curateEntity(entity, true),
|
[entity.slug]: accEntities[entity.slug] || curateEntity(entity, true),
|
||||||
[urlToSiteSlug(entity.url)]: accEntities[entity.slug] || curateEntity(entity, true),
|
[urlToSiteSlug(entity.url)]: accEntities[urlToSiteSlug(entity.url)] || curateEntity(entity, true),
|
||||||
}), {});
|
}), {});
|
||||||
|
|
||||||
return entitiesBySlug;
|
return entitiesBySlug;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
const { decode } = require('html-entities');
|
const { decode } = require('html-entities');
|
||||||
|
|
||||||
const qu = require('../utils/qu');
|
const qu = require('../utils/qu');
|
||||||
|
const slugify = require('../utils/slugify');
|
||||||
|
|
||||||
function scrapeAll(items, _channel) {
|
function scrapeAll(items, _channel) {
|
||||||
return items.map(({ query }) => {
|
return items.map(({ query }) => {
|
||||||
|
@ -25,8 +26,6 @@ function scrapeAll(items, _channel) {
|
||||||
poster,
|
poster,
|
||||||
];
|
];
|
||||||
|
|
||||||
console.log(release);
|
|
||||||
|
|
||||||
return release;
|
return release;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -53,21 +52,33 @@ function scrapeScene({ query }, channel, html) {
|
||||||
release.tags = query.cnts('.video-top .tag-link');
|
release.tags = query.cnts('.video-top .tag-link');
|
||||||
|
|
||||||
release.poster = query.poster() || html.match(/urlImg\s*=\s*'(.*)';/)?.[1];
|
release.poster = query.poster() || html.match(/urlImg\s*=\s*'(.*)';/)?.[1];
|
||||||
release.trailer = query.video() || decode(html.match(/urlVideo\s*=\s*'(.*)';/)?.[1]);
|
release.video = query.video() || decode(html.match(/urlVideo\s*=\s*'(.*)';/)?.[1]); // no trailers but full-length videos
|
||||||
|
|
||||||
release.shootId = release.poster?.match(/\/rc(\d+)/)?.[1] || release.trailer?.match(/\/episodio_(\d+)/)?.[1];
|
release.shootId = release.poster?.match(/\/rc(\d+)/)?.[1] || release.video?.match(/\/episodio_(\d+)/)?.[1];
|
||||||
|
|
||||||
console.log(release);
|
|
||||||
return release;
|
return release;
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrapeProfile({ query }) {
|
function scrapeProfile({ query, el }, channel) {
|
||||||
const profile = {};
|
const profile = {};
|
||||||
|
|
||||||
|
const bio = query.all('.data-bio li').reduce((acc, bioEl) => ({
|
||||||
|
...acc,
|
||||||
|
[slugify(query.cnt(bioEl, 'strong'), '_')]: query.text(bioEl),
|
||||||
|
}), {});
|
||||||
|
|
||||||
|
profile.nationality = bio.nationality;
|
||||||
|
profile.dateOfBirth = qu.extractDate(bio.date_of_birth, 'DD-MM-YYYY');
|
||||||
|
|
||||||
|
profile.height = Number(bio.height) * 100;
|
||||||
|
profile.weight = parseInt(bio.weight, 10);
|
||||||
|
profile.eyes = bio.eye_color;
|
||||||
|
profile.hairColor = bio.hair_color;
|
||||||
|
|
||||||
profile.description = query.cnt('.data-bio p:last-of-type');
|
profile.description = query.cnt('.data-bio p:last-of-type');
|
||||||
profile.avatar = query.img('.thumb-bio');
|
profile.avatar = query.img('.thumb-bio');
|
||||||
|
|
||||||
console.log(profile);
|
profile.scenes = scrapeAll(qu.initAll(el, '.muestra-escena'), channel);
|
||||||
|
|
||||||
return profile;
|
return profile;
|
||||||
}
|
}
|
||||||
|
@ -92,11 +103,11 @@ async function fetchScene(url, channel) {
|
||||||
return res.status;
|
return res.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchProfile(actor) {
|
async function fetchProfile(actor, channel) {
|
||||||
const res = await qu.get(`https://www.cumlouder.com/girl/${actor.slug}/`, '.listado-escenas');
|
const res = await qu.get(`https://www.cumlouder.com/girl/${actor.slug}/`, '.listado-escenas');
|
||||||
|
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
return scrapeProfile(res.item);
|
return scrapeProfile(res.item, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status;
|
return res.status;
|
||||||
|
|
|
@ -204,7 +204,7 @@ function scrapeUpcoming(scene, site) {
|
||||||
release.poster = getPosterFallbacks(scene.images.poster);
|
release.poster = getPosterFallbacks(scene.images.poster);
|
||||||
release.teaser = getTeaserFallbacks(scene.previews.poster);
|
release.teaser = getTeaserFallbacks(scene.previews.poster);
|
||||||
|
|
||||||
release.entryId = (release.poster[0] || release.teaser[0])?.match(/\/(\d+)/)?.[1];
|
release.entryId = (release.poster[0] || release.teaser[0])?.src?.match(/\/(\d+)/)?.[1];
|
||||||
|
|
||||||
return [release];
|
return [release];
|
||||||
}
|
}
|
||||||
|
|