Added MOFOS to default rate limit config, added light logos.
|
@ -302,6 +302,10 @@ module.exports = {
|
||||||
interval: 1000,
|
interval: 1000,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
},
|
},
|
||||||
|
'www.mofos.com': {
|
||||||
|
interval: 1000,
|
||||||
|
concurrency: 1,
|
||||||
|
},
|
||||||
'westcoastproductions.com': {
|
'westcoastproductions.com': {
|
||||||
interval: 100,
|
interval: 100,
|
||||||
concurrency: 1,
|
concurrency: 1,
|
||||||
|
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
@ -4702,7 +4702,7 @@ const sites = [
|
||||||
slug: 'boundgangbangs',
|
slug: 'boundgangbangs',
|
||||||
name: 'Bound Gangbangs',
|
name: 'Bound Gangbangs',
|
||||||
alias: ['bgb', 'bgbs'],
|
alias: ['bgb', 'bgbs'],
|
||||||
url: 'https://www.kink.com/channel/boundgangbangs',
|
url: 'https://www.kink.com/channel/bound-gangbangs',
|
||||||
description: 'Powerless whores tied in bondage and stuffed with a cock in every hole. At BoundGangbangs women get surprise extreme gangbangs, blindfolds, deepthroat blowjobs, sex punishment, bondage, double penetration and interracial sex.',
|
description: 'Powerless whores tied in bondage and stuffed with a cock in every hole. At BoundGangbangs women get surprise extreme gangbangs, blindfolds, deepthroat blowjobs, sex punishment, bondage, double penetration and interracial sex.',
|
||||||
parent: 'kink',
|
parent: 'kink',
|
||||||
},
|
},
|
||||||
|
@ -4807,7 +4807,7 @@ const sites = [
|
||||||
{
|
{
|
||||||
slug: 'hardcoregangbang',
|
slug: 'hardcoregangbang',
|
||||||
name: 'Hardcore Gangbang',
|
name: 'Hardcore Gangbang',
|
||||||
url: 'https://www.kink.com/channel/hardcoregangbang',
|
url: 'https://www.kink.com/channel/hardcore-gangbang',
|
||||||
description: "Where all women's hardcore gangbang fantasies come true. Watch extreme, brutal gangbangs with pornstars, models, & MILFs that crave cock in every hole. HardcoreGangbang.com has the best creampie gang bangs online.",
|
description: "Where all women's hardcore gangbang fantasies come true. Watch extreme, brutal gangbangs with pornstars, models, & MILFs that crave cock in every hole. HardcoreGangbang.com has the best creampie gang bangs online.",
|
||||||
parent: 'kink',
|
parent: 'kink',
|
||||||
},
|
},
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
const Promise = require('bluebird');
|
const Promise = require('bluebird');
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
|
|
||||||
|
const logger = require('../logger')(__filename);
|
||||||
const http = require('../utils/http');
|
const http = require('../utils/http');
|
||||||
const slugify = require('../utils/slugify');
|
const slugify = require('../utils/slugify');
|
||||||
|
|
||||||
|
@ -141,24 +142,67 @@ async function getTrailer(scene, channel, url) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getPhotos(url) {
|
async function getPhotosLegacy(url) {
|
||||||
const htmlRes = await http.get(url, {
|
const htmlRes = await http.get(url, {
|
||||||
extract: {
|
extract: {
|
||||||
runScripts: 'dangerously',
|
runScripts: 'dangerously',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const state = htmlRes?.window.__APOLLO_STATE__;
|
try {
|
||||||
const key = Object.values(state.ROOT_QUERY).find((query) => query?.__ref)?.__ref;
|
const state = htmlRes?.window?.__APOLLO_STATE__;
|
||||||
const data = state[key];
|
|
||||||
|
|
||||||
console.log(data);
|
if (!state) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
if (!data) {
|
const key = Object.values(state?.ROOT_QUERY).find((query) => query?.__ref)?.__ref;
|
||||||
|
const data = state[key];
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.carousel.slice(1).map((photo) => photo.main?.[0].src).filter(Boolean);
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(`Failed to retrieve Vixen images: ${error.message}`);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return data.carousel.slice(1).map((photo) => photo.main?.[0].src).filter(Boolean);
|
async function getPhotos(url) {
|
||||||
|
const htmlRes = await http.get(url, {
|
||||||
|
parse: true,
|
||||||
|
extract: {
|
||||||
|
runScripts: 'dangerously',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const state = htmlRes?.window?.__APOLLO_STATE__;
|
||||||
|
|
||||||
|
console.log('state', state);
|
||||||
|
|
||||||
|
if (!state) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const key = Object.values(state?.ROOT_QUERY).find((query) => query?.__ref)?.__ref;
|
||||||
|
const data = state[key];
|
||||||
|
|
||||||
|
console.log('data', data);
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(data.carousel);
|
||||||
|
|
||||||
|
return data.carousel.slice(1).map((photo) => photo.main?.[0].src).filter(Boolean);
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(`Failed to retrieve Vixen images: ${error.message}`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function scrapeAll(scenes, site, origin) {
|
function scrapeAll(scenes, site, origin) {
|
||||||
|
|