Updated Hentaied, added new sites.
This commit is contained in:
@@ -186,6 +186,8 @@ module.exports = {
|
|||||||
'voyeurcams',
|
'voyeurcams',
|
||||||
'wifesluts',
|
'wifesluts',
|
||||||
'wishescumtrue',
|
'wishescumtrue',
|
||||||
|
// hentaied
|
||||||
|
'somegore',
|
||||||
],
|
],
|
||||||
networks: [
|
networks: [
|
||||||
// dummy network for testing
|
// dummy network for testing
|
||||||
|
|||||||
8
package-lock.json
generated
8
package-lock.json
generated
@@ -94,7 +94,7 @@
|
|||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
"ua-parser-js": "^1.0.37",
|
"ua-parser-js": "^1.0.37",
|
||||||
"undici": "^5.28.1",
|
"undici": "^5.28.1",
|
||||||
"unprint": "^0.18.26",
|
"unprint": "^0.18.27",
|
||||||
"url-pattern": "^1.0.3",
|
"url-pattern": "^1.0.3",
|
||||||
"v-tooltip": "^2.1.3",
|
"v-tooltip": "^2.1.3",
|
||||||
"video.js": "^8.6.1",
|
"video.js": "^8.6.1",
|
||||||
@@ -20380,9 +20380,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/unprint": {
|
"node_modules/unprint": {
|
||||||
"version": "0.18.26",
|
"version": "0.18.27",
|
||||||
"resolved": "https://registry.npmjs.org/unprint/-/unprint-0.18.26.tgz",
|
"resolved": "https://registry.npmjs.org/unprint/-/unprint-0.18.27.tgz",
|
||||||
"integrity": "sha512-E9DAwwBtwZmg+2A6y7Ili94XGCkjuyl5saVA+G5oEy6lnFvum58aubOtfQO1Qasiy/xVeBZbwk5QZ/VPzGIchw==",
|
"integrity": "sha512-XYLwX0vZPs9b+pK2h9P5dO3AWk8BUe41dnmbWSLU4qVGm8LYi5bBz7PP9wnaaPZJdAB8neaoZymFX4/WCjMR7g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bottleneck": "^2.19.5",
|
"bottleneck": "^2.19.5",
|
||||||
"cookie": "^1.1.1",
|
"cookie": "^1.1.1",
|
||||||
|
|||||||
@@ -153,7 +153,7 @@
|
|||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
"ua-parser-js": "^1.0.37",
|
"ua-parser-js": "^1.0.37",
|
||||||
"undici": "^5.28.1",
|
"undici": "^5.28.1",
|
||||||
"unprint": "^0.18.26",
|
"unprint": "^0.18.27",
|
||||||
"url-pattern": "^1.0.3",
|
"url-pattern": "^1.0.3",
|
||||||
"v-tooltip": "^2.1.3",
|
"v-tooltip": "^2.1.3",
|
||||||
"video.js": "^8.6.1",
|
"video.js": "^8.6.1",
|
||||||
|
|||||||
@@ -245,9 +245,10 @@ const networks = [
|
|||||||
parent: 'porndoe',
|
parent: 'porndoe',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'amnesiac',
|
slug: 'hentaied',
|
||||||
name: 'Amnesiac',
|
rename: 'amnesiac',
|
||||||
hasLogo: true,
|
name: 'Hentaied',
|
||||||
|
url: 'https://hentaied.pro',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'analvids',
|
slug: 'analvids',
|
||||||
@@ -945,7 +946,7 @@ exports.seed = (knex) => Promise.resolve()
|
|||||||
alias: network.alias,
|
alias: network.alias,
|
||||||
url: network.url,
|
url: network.url,
|
||||||
description: network.description,
|
description: network.description,
|
||||||
has_logo: network.hasLogo,
|
has_logo: network.hasLogo ?? true,
|
||||||
showcased: typeof network.showcased === 'boolean' ? network.showcased : true,
|
showcased: typeof network.showcased === 'boolean' ? network.showcased : true,
|
||||||
parameters: network.parameters,
|
parameters: network.parameters,
|
||||||
parent_id: grandParentNetworksBySlug[network.parent] || null,
|
parent_id: grandParentNetworksBySlug[network.parent] || null,
|
||||||
@@ -961,7 +962,7 @@ exports.seed = (knex) => Promise.resolve()
|
|||||||
alias: network.alias,
|
alias: network.alias,
|
||||||
url: network.url,
|
url: network.url,
|
||||||
description: network.description,
|
description: network.description,
|
||||||
has_logo: network.hasLogo,
|
has_logo: network.hasLogo ?? true,
|
||||||
showcased: typeof network.showcased === 'boolean' ? network.showcased : true,
|
showcased: typeof network.showcased === 'boolean' ? network.showcased : true,
|
||||||
parameters: network.parameters,
|
parameters: network.parameters,
|
||||||
parent_id: parentNetworksBySlug[network.parent] || grandParentNetworksBySlug[network.parent] || null,
|
parent_id: parentNetworksBySlug[network.parent] || grandParentNetworksBySlug[network.parent] || null,
|
||||||
|
|||||||
@@ -1105,68 +1105,92 @@ const sites = [
|
|||||||
slug: 'cumflation',
|
slug: 'cumflation',
|
||||||
url: 'https://cumflation.com',
|
url: 'https://cumflation.com',
|
||||||
tags: ['cumflation'],
|
tags: ['cumflation'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Hentaied',
|
name: 'Hentaied',
|
||||||
slug: 'hentaied',
|
slug: 'hentaied',
|
||||||
url: 'https://hentaied.com',
|
url: 'https://hentaied.com',
|
||||||
tags: ['tentacle'],
|
tags: ['tentacle'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Futanari',
|
name: 'Futanari',
|
||||||
slug: 'futanari',
|
slug: 'futanari',
|
||||||
url: 'https://futanari.xxx',
|
url: 'https://futanari.xxx',
|
||||||
tags: ['futanari'],
|
tags: ['futanari'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Freeze',
|
name: 'Freeze',
|
||||||
slug: 'freeze',
|
slug: 'freeze',
|
||||||
url: 'https://freeze.xxx',
|
url: 'https://freeze.xxx',
|
||||||
tags: ['timestop'],
|
tags: ['timestop'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Somegore',
|
name: 'Somegore',
|
||||||
slug: 'somegore',
|
slug: 'somegore',
|
||||||
url: 'https://somegore.com',
|
url: 'https://somegore.com',
|
||||||
tags: ['gore'],
|
tags: ['gore'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Defeated',
|
name: 'Defeated',
|
||||||
slug: 'defeated',
|
slug: 'defeated',
|
||||||
url: 'https://defeatedsexfight.com',
|
url: 'https://defeatedsexfight.com',
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Parasited',
|
name: 'Parasited',
|
||||||
slug: 'parasited',
|
slug: 'parasited',
|
||||||
url: 'https://parasited.com',
|
url: 'https://parasited.com',
|
||||||
tags: ['parasite'],
|
tags: ['parasite'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Plants vs Cunts',
|
name: 'Plants vs Cunts',
|
||||||
slug: 'plantsvscunts',
|
slug: 'plantsvscunts',
|
||||||
url: 'https://plantsvscunts.com',
|
url: 'https://plantsvscunts.com',
|
||||||
tags: ['tentacle'],
|
tags: ['tentacle'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Voodooed',
|
name: 'Voodooed',
|
||||||
slug: 'voodooed',
|
slug: 'voodooed',
|
||||||
url: 'https://voodooed.com',
|
url: 'https://voodooed.com',
|
||||||
tags: ['voodoo'],
|
tags: ['voodoo'],
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Vored',
|
name: 'Vored',
|
||||||
slug: 'vored',
|
slug: 'vored',
|
||||||
url: 'https://vored.com',
|
url: 'https://vored.com',
|
||||||
parent: 'amnesiac',
|
parent: 'hentaied',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Monsterporn',
|
||||||
|
slug: 'monsterporn',
|
||||||
|
url: 'https://monsterporn.com',
|
||||||
|
parent: 'hentaied',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Vampired',
|
||||||
|
slug: 'vampired',
|
||||||
|
url: 'https://vampired.com',
|
||||||
|
parent: 'hentaied',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mrs. Horsecock',
|
||||||
|
slug: 'mrshorsecock',
|
||||||
|
url: 'https://hentaied.pro/projects/mrs-horsecock',
|
||||||
|
parent: 'hentaied',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Twinz',
|
||||||
|
slug: 'twinz',
|
||||||
|
url: 'https://hentaied.pro/projects/twinz',
|
||||||
|
parent: 'hentaied',
|
||||||
},
|
},
|
||||||
// AMATEUR EURO
|
// AMATEUR EURO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -728,11 +728,27 @@ const affiliates = [
|
|||||||
},
|
},
|
||||||
comment: '50% rev share',
|
comment: '50% rev share',
|
||||||
},
|
},
|
||||||
|
// hentaied / amnesiac
|
||||||
|
{
|
||||||
|
network: 'hentaied',
|
||||||
|
url: 'https://hentaied.pro/amember/aff/go/npjyjuekbvehqzpyqukrgqoogmwbkz',
|
||||||
|
parameters: {
|
||||||
|
query: 'ref=npjyjuekbvehqzpyqukrgqoogmwbkz',
|
||||||
|
dynamicScene: 'https://hentaied.pro{scenePath}?ref=npjyjuekbvehqzpyqukrgqoogmwbkz',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'defeated',
|
||||||
|
url: 'https://defeatedsexfight.com/amember/aff/go/jlfowppdazbfucxrgfmgpno',
|
||||||
|
parameters: {
|
||||||
|
query: 'ref=jlfowppdazbfucxrgfmgpno', // not currently functional
|
||||||
|
},
|
||||||
|
},
|
||||||
// etc
|
// etc
|
||||||
{
|
{
|
||||||
network: 'bang',
|
network: 'bang',
|
||||||
parameters: {
|
parameters: {
|
||||||
query: 'aff=eyJ3IjoiMTQ1ODYiLCJsIjoiMzE2NDYiLCJ0IjoiNDU4NjEifQ==', // supported
|
query: 'aff=eyJ3IjoiMTQ1ODYiLCJsIjoiMzE2NDYiLCJ0IjoiNDU4NjEifQ==',
|
||||||
},
|
},
|
||||||
comment: '$25 per signup',
|
comment: '$25 per signup',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const unprint = require('unprint');
|
|
||||||
|
|
||||||
function scrapeAll(scenes) {
|
|
||||||
return scenes.map(({ query }) => {
|
|
||||||
if (query.exists('.crowdfunding-post')) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const release = {};
|
|
||||||
|
|
||||||
release.url = query.url('a');
|
|
||||||
release.entryId = new URL(release.url).pathname.split('/')[1];
|
|
||||||
|
|
||||||
release.title = query.content('.allvideostitle p, .allvideostitle h2');
|
|
||||||
|
|
||||||
release.actors = query.contents('.tagsmodels a');
|
|
||||||
|
|
||||||
release.poster = query.sourceSet('.vidcont .attachment-thumbnail');
|
|
||||||
release.teaser = query.video('.vidcont video', { attribute: 'data-src' });
|
|
||||||
|
|
||||||
return release;
|
|
||||||
}).filter(Boolean);
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrapeScene({ query }, { url }) {
|
|
||||||
const release = {};
|
|
||||||
|
|
||||||
release.entryId = new URL(url).pathname.split('/')[1];
|
|
||||||
|
|
||||||
release.title = query.content('.title-fav h1');
|
|
||||||
release.description = query.contents('.description #fullstory, .title-fav .cont > p').join(' ');
|
|
||||||
|
|
||||||
release.date = query.date('.datesingle', 'MMMM D, YYYY');
|
|
||||||
release.duration = query.duration('.cont .duration');
|
|
||||||
|
|
||||||
release.actors = query.contents('.cont .tagsmodels:not(.director) a');
|
|
||||||
release.director = query.content('.cont .director a');
|
|
||||||
|
|
||||||
release.poster = [
|
|
||||||
query.img('.preview .attachment-full'),
|
|
||||||
query.img('meta[property="og:image"]', { attribute: 'content' }),
|
|
||||||
];
|
|
||||||
|
|
||||||
release.caps = query.all('.gallery a').map((photoEl) => [
|
|
||||||
unprint.query.url(photoEl, null),
|
|
||||||
unprint.query.img(photoEl, 'img'),
|
|
||||||
]);
|
|
||||||
|
|
||||||
release.trailer = {
|
|
||||||
src: query.video('.preview video'),
|
|
||||||
referer: url,
|
|
||||||
expectType: {
|
|
||||||
'binary/octet-stream': 'video/mp4',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
release.tags = query.contents('.post-categories a');
|
|
||||||
|
|
||||||
return release;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchLatest(channel, page = 1) {
|
|
||||||
const url = `${channel.url}/all-videos/page/${page}/`;
|
|
||||||
const res = await unprint.get(url, { selectAll: '.catposts > div:not(.clearfix):not(.flexcont)' });
|
|
||||||
|
|
||||||
if (res.ok) {
|
|
||||||
return scrapeAll(res.context, channel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
fetchLatest,
|
|
||||||
scrapeScene,
|
|
||||||
};
|
|
||||||
103
src/scrapers/hentaied.js
Normal file
103
src/scrapers/hentaied.js
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const unprint = require('unprint');
|
||||||
|
|
||||||
|
function scrapeAll(scenes) {
|
||||||
|
return scenes.map(({ query }) => {
|
||||||
|
if (query.exists('.crowdfunding-post')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const release = {};
|
||||||
|
|
||||||
|
release.url = query.url('a');
|
||||||
|
release.entryId = new URL(release.url).pathname.split('/')[1];
|
||||||
|
|
||||||
|
release.title = query.content('.allvideostitle p, .allvideostitle h2');
|
||||||
|
|
||||||
|
release.actors = query.all('.tagsmodels a').map((actorEl) => ({
|
||||||
|
name: unprint.query.content(actorEl),
|
||||||
|
url: unprint.query.url(actorEl, null),
|
||||||
|
}));
|
||||||
|
|
||||||
|
release.poster = query.sourceSet('.vidcont .attachment-thumbnail')
|
||||||
|
|| query.sourceSet('.vidcont .attachment-thumbnail', 'nitro-lazy-srcset');
|
||||||
|
|
||||||
|
release.teaser = query.video('.vidcont video', { attribute: 'data-src' });
|
||||||
|
|
||||||
|
console.log(release);
|
||||||
|
|
||||||
|
return release;
|
||||||
|
}).filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchLatest(channel, page = 1) {
|
||||||
|
const url = new URL(channel.url).pathname.includes('/projects')
|
||||||
|
? `${channel.url}/page/${page}/`
|
||||||
|
: `${channel.url}/all-videos/page/${page}/`;
|
||||||
|
// const res = await unprint.get(url, { selectAll: '.catposts > div:not(.clearfix):not(.flexcont)' });
|
||||||
|
const res = await unprint.get(url, { selectAll: '.catposts div[class*="post-id"], .catposts .half' });
|
||||||
|
|
||||||
|
if (res.ok) {
|
||||||
|
return scrapeAll(res.context, channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status;
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrapeScene({ query }, { url }) {
|
||||||
|
const release = {};
|
||||||
|
|
||||||
|
release.entryId = new URL(url).pathname.split('/')[1];
|
||||||
|
|
||||||
|
release.title = query.content('.title-fav h1');
|
||||||
|
release.description = query.contents('.description #fullstory, .title-fav .cont > p').join(' ')
|
||||||
|
|| query.attribute('meta[property="og:description"]', 'content')?.replace('[…]', '').replace(/\s*read more.*/i, '...'); // html description difficult to extract
|
||||||
|
|
||||||
|
release.date = query.date('.datesingle', 'MMMM D, YYYY')
|
||||||
|
|| query.date('meta[property="article:published_time"]', 'YYYY-MM-DDTHH:mm:ss', { attribute: 'content' });
|
||||||
|
|
||||||
|
release.duration = query.duration('.cont .duration, .durationandtime .duration');
|
||||||
|
|
||||||
|
release.actors = query.all('.cont .tagsmodels:not(.director) a, .title-fav .tagsmodels:not(.director) a').map((actorEl) => ({
|
||||||
|
name: unprint.query.content(actorEl),
|
||||||
|
url: unprint.query.url(actorEl, null),
|
||||||
|
}));
|
||||||
|
|
||||||
|
release.directors = query.contents('.cont .director a');
|
||||||
|
|
||||||
|
release.tags = query.contents('.post-categories a');
|
||||||
|
|
||||||
|
release.poster = [
|
||||||
|
query.img('.preview .attachment-full'),
|
||||||
|
query.img('meta[property="og:image"]', { attribute: 'content' }),
|
||||||
|
].filter(Boolean);
|
||||||
|
|
||||||
|
release.caps = query.all('.gallery a').map((photoEl) => Array.from(new Set([
|
||||||
|
unprint.query.url(photoEl, null),
|
||||||
|
unprint.query.img(photoEl),
|
||||||
|
...unprint.query.sourceSet(photoEl, 'img') || [],
|
||||||
|
...unprint.query.sourceSet(photoEl, 'img', 'nitro-lazy-srcset') || [],
|
||||||
|
])).filter(Boolean));
|
||||||
|
|
||||||
|
const trailer = query.video('.preview video');
|
||||||
|
|
||||||
|
if (trailer) {
|
||||||
|
release.trailer = {
|
||||||
|
src: trailer,
|
||||||
|
referer: url,
|
||||||
|
expectType: {
|
||||||
|
'binary/octet-stream': 'video/mp4',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(release);
|
||||||
|
|
||||||
|
return release;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
fetchLatest,
|
||||||
|
scrapeScene,
|
||||||
|
};
|
||||||
@@ -5,7 +5,7 @@ const angelogodshackoriginal = require('./angelogodshackoriginal');
|
|||||||
// const archangel = require('./archangel');
|
// const archangel = require('./archangel');
|
||||||
const assylum = require('./assylum');
|
const assylum = require('./assylum');
|
||||||
const americanpornstar = require('./americanpornstar');
|
const americanpornstar = require('./americanpornstar');
|
||||||
const amnesiac = require('./amnesiac');
|
const hentaied = require('./hentaied');
|
||||||
const aziani = require('./aziani');
|
const aziani = require('./aziani');
|
||||||
const badoink = require('./badoink');
|
const badoink = require('./badoink');
|
||||||
const bamvisions = require('./bamvisions');
|
const bamvisions = require('./bamvisions');
|
||||||
@@ -105,7 +105,7 @@ module.exports = {
|
|||||||
amateurallure: julesjordan,
|
amateurallure: julesjordan,
|
||||||
americanpornstar,
|
americanpornstar,
|
||||||
amateureuro: porndoe,
|
amateureuro: porndoe,
|
||||||
amnesiac,
|
hentaied,
|
||||||
angelogodshackoriginal,
|
angelogodshackoriginal,
|
||||||
modelmediaasia: modelmedia,
|
modelmediaasia: modelmedia,
|
||||||
assylum,
|
assylum,
|
||||||
|
|||||||
Reference in New Issue
Block a user