Compare commits
No commits in common. "b75780044cabd892b68a3e38eb2c4458ea912e2a" and "601196ddebefc62cdedbf6c83398c037ed97da46" have entirely different histories.
b75780044c
...
601196ddeb
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.64.0",
|
"version": "1.63.0",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "traxxx",
|
"name": "traxxx",
|
||||||
"version": "1.64.0",
|
"version": "1.63.0",
|
||||||
"description": "All the latest porn releases in one place",
|
"description": "All the latest porn releases in one place",
|
||||||
"main": "src/app.js",
|
"main": "src/app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 20 KiB |
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
|
@ -161,12 +161,6 @@ const networks = [
|
||||||
url: 'https://www.vixen.com',
|
url: 'https://www.vixen.com',
|
||||||
description: 'Vixen.com features the world’s finest cinematic adult films with 4K quality and high-end erotic photography.',
|
description: 'Vixen.com features the world’s finest cinematic adult films with 4K quality and high-end erotic photography.',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
slug: 'vogov',
|
|
||||||
name: 'VogoV',
|
|
||||||
url: 'https://www.vogov.com',
|
|
||||||
description: 'Fantastic collection of exclusive porn movies with the most beautiful porn models in leading roles saisfies the most picky visitor of the site.',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
slug: 'xempire',
|
slug: 'xempire',
|
||||||
name: 'XEmpire',
|
name: 'XEmpire',
|
||||||
|
|
|
@ -3192,14 +3192,6 @@ function getSites(networksMap) {
|
||||||
url: 'https://www.deeper.com',
|
url: 'https://www.deeper.com',
|
||||||
network_id: networksMap.vixen,
|
network_id: networksMap.vixen,
|
||||||
},
|
},
|
||||||
// VOGOV
|
|
||||||
{
|
|
||||||
slug: 'vogov',
|
|
||||||
name: 'VogoV',
|
|
||||||
url: 'https://www.vogov.com',
|
|
||||||
description: 'Top rated models. Graceful locations. Best gonzo scenes. 4K UHD 60 FPS. So, in general Vogov is a website that is worth visiting and exploring carefully. It gives a chance to spend a fantastic night with gorgeous girls ready to experiment and to full around with their lovers.',
|
|
||||||
network_id: networksMap.vogov,
|
|
||||||
},
|
|
||||||
// XEMPIRE
|
// XEMPIRE
|
||||||
{
|
{
|
||||||
slug: 'hardx',
|
slug: 'hardx',
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
"no-underscore-dangle": 0,
|
"no-underscore-dangle": 0,
|
||||||
"indent": "off",
|
"indent": "off",
|
||||||
"template-curly-spacing": "off",
|
"template-curly-spacing": "off",
|
||||||
"object-curly-newline": "off",
|
|
||||||
"max-len": [2, {"code": 300, "tabWidth": 4, "ignoreUrls": true}],
|
"max-len": [2, {"code": 300, "tabWidth": 4, "ignoreUrls": true}],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,10 +54,7 @@ async function scrapeRelease(url, release, type = 'scene') {
|
||||||
? await scraper.fetchScene(url, site, release)
|
? await scraper.fetchScene(url, site, release)
|
||||||
: await scraper.fetchMovie(url, site, release);
|
: await scraper.fetchMovie(url, site, release);
|
||||||
|
|
||||||
return {
|
return scrapedRelease;
|
||||||
...scrapedRelease,
|
|
||||||
site,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function scrapeReleases(urls, release, type = 'scene') {
|
async function scrapeReleases(urls, release, type = 'scene') {
|
||||||
|
|
|
@ -124,9 +124,7 @@ async function scrapeSites() {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const siteReleases = await scrapeSiteReleases(scraper, site);
|
return await scrapeSiteReleases(scraper, site);
|
||||||
|
|
||||||
return siteReleases.map(release => ({ ...release, site }));
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`${site.name}: Failed to scrape releases: ${error.message}`);
|
logger.error(`${site.name}: Failed to scrape releases: ${error.message}`);
|
||||||
|
|
||||||
|
|
|
@ -194,13 +194,10 @@ async function fetchProfile(actorName, networkName, actorPath = 'model') {
|
||||||
|
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
const actorData = res.body.result.find(actor => actor.name.toLowerCase() === actorName.toLowerCase());
|
const actorData = res.body.result.find(actor => actor.name.toLowerCase() === actorName.toLowerCase());
|
||||||
|
const actorRes = await bhttp.get(`https://www.${networkName}.com/${actorPath}/${actorData.id}/`);
|
||||||
|
|
||||||
if (actorData) {
|
if (actorData && actorRes.statusCode === 200) {
|
||||||
const actorRes = await bhttp.get(`https://www.${networkName}.com/${actorPath}/${actorData.id}/`);
|
return scrapeProfile(actorData, actorRes.body.toString());
|
||||||
|
|
||||||
if (actorRes.statusCode === 200) {
|
|
||||||
return scrapeProfile(actorData, actorRes.body.toString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@ const naughtyamerica = require('./naughtyamerica');
|
||||||
const realitykings = require('./realitykings');
|
const realitykings = require('./realitykings');
|
||||||
const teamskeet = require('./teamskeet');
|
const teamskeet = require('./teamskeet');
|
||||||
const vixen = require('./vixen');
|
const vixen = require('./vixen');
|
||||||
const vogov = require('./vogov');
|
|
||||||
|
|
||||||
// releases and profiles
|
// releases and profiles
|
||||||
const blowpass = require('./blowpass');
|
const blowpass = require('./blowpass');
|
||||||
|
@ -69,7 +68,6 @@ module.exports = {
|
||||||
realitykings,
|
realitykings,
|
||||||
teamskeet,
|
teamskeet,
|
||||||
vixen,
|
vixen,
|
||||||
vogov,
|
|
||||||
xempire,
|
xempire,
|
||||||
},
|
},
|
||||||
actors: {
|
actors: {
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const bhttp = require('bhttp');
|
|
||||||
const { ex, ctxa } = require('../utils/q');
|
|
||||||
// const slugify = require('../utils/slugify');
|
|
||||||
|
|
||||||
function scrapeLatest(html) {
|
|
||||||
const { document } = ex(html);
|
|
||||||
|
|
||||||
return ctxa(document, '.video-post').map(({ q, qa, qd }) => {
|
|
||||||
const release = {};
|
|
||||||
|
|
||||||
// release.entryId = slugify(release.title);
|
|
||||||
release.entryId = q('.ico-fav-0').dataset.favVideoId;
|
|
||||||
|
|
||||||
const titleEl = q('.video-title-title');
|
|
||||||
release.title = titleEl.title;
|
|
||||||
release.url = titleEl.href;
|
|
||||||
|
|
||||||
release.date = qd('.video-data em', 'MMM DD, YYYY');
|
|
||||||
release.actors = qa('.video-model-list a', true);
|
|
||||||
|
|
||||||
const posterData = q('img.thumb').dataset;
|
|
||||||
release.poster = posterData.src;
|
|
||||||
release.trailer = posterData.preview;
|
|
||||||
|
|
||||||
return release;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function scrapeScene(html, url) {
|
|
||||||
const { q, qa, qd, qu, ql, qm } = ex(html);
|
|
||||||
const release = { url };
|
|
||||||
|
|
||||||
// release.entryId = slugify(release.title);
|
|
||||||
[release.entryId] = q('link[rel="canonical"]').href.match(/\d+/);
|
|
||||||
|
|
||||||
release.title = qm('meta[property="og:title"]') || q('.video-page-header h1', true);
|
|
||||||
|
|
||||||
release.description = qm('meta[property="og:description"]') || q('.info-video-description', true);
|
|
||||||
release.date = qd('.info-video-details li:first-child span', 'MMM DD, YYYY');
|
|
||||||
release.duration = ql('.info-video-details li:nth-child(2) span');
|
|
||||||
|
|
||||||
release.actors = qa('.info-video-models a', true);
|
|
||||||
release.tags = qa('.info-video-category a', true);
|
|
||||||
|
|
||||||
release.photos = qu('.swiper-wrapper .swiper-slide a').map(source => source.replace('.jpg/', '.jpg'));
|
|
||||||
release.poster = qm('meta[property="og:image"');
|
|
||||||
|
|
||||||
if (!release.poster) {
|
|
||||||
const previewStart = html.indexOf('preview_url');
|
|
||||||
release.poster = html.slice(html.indexOf('http', previewStart), html.indexOf('.jpg', previewStart) + 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
const trailerStart = html.indexOf('video_url');
|
|
||||||
const trailerUrl = html.slice(html.indexOf('http', trailerStart), html.indexOf('.mp4', trailerStart) + 4);
|
|
||||||
const rnd = new Date().getTime();
|
|
||||||
|
|
||||||
release.trailer = `${trailerUrl}/?rnd=${rnd}`;
|
|
||||||
*/
|
|
||||||
|
|
||||||
// console.log(release);
|
|
||||||
return release;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchLatest(site, page = 1) {
|
|
||||||
const url = `https://vogov.com/latest-videos/?sort_by=post_date&from=${page}`;
|
|
||||||
const res = await bhttp.get(url);
|
|
||||||
|
|
||||||
if (res.statusCode === 200) {
|
|
||||||
return scrapeLatest(res.body.toString(), site);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchScene(url) {
|
|
||||||
const res = await bhttp.get(url);
|
|
||||||
|
|
||||||
if (res.statusCode === 200) {
|
|
||||||
return scrapeScene(res.body.toString(), url);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
fetchLatest,
|
|
||||||
fetchScene,
|
|
||||||
};
|
|
|
@ -25,10 +25,6 @@ function qall(context, selector, attrArg, trim = true) {
|
||||||
return Array.from(context.querySelectorAll(selector));
|
return Array.from(context.querySelectorAll(selector));
|
||||||
}
|
}
|
||||||
|
|
||||||
function qmeta(context, selector, attrArg = 'content', trim = true) {
|
|
||||||
return q(context, selector, attrArg, trim);
|
|
||||||
}
|
|
||||||
|
|
||||||
function qdate(context, selector, format, match, attr = 'textContent') {
|
function qdate(context, selector, format, match, attr = 'textContent') {
|
||||||
const dateString = context.querySelector(selector)?.[attr];
|
const dateString = context.querySelector(selector)?.[attr];
|
||||||
|
|
||||||
|
@ -80,7 +76,6 @@ const funcs = {
|
||||||
qimages,
|
qimages,
|
||||||
qposter,
|
qposter,
|
||||||
qlength,
|
qlength,
|
||||||
qmeta,
|
|
||||||
qtrailer,
|
qtrailer,
|
||||||
qurls,
|
qurls,
|
||||||
qa: qall,
|
qa: qall,
|
||||||
|
@ -88,7 +83,6 @@ const funcs = {
|
||||||
qi: qimages,
|
qi: qimages,
|
||||||
qp: qposter,
|
qp: qposter,
|
||||||
ql: qlength,
|
ql: qlength,
|
||||||
qm: qmeta,
|
|
||||||
qt: qtrailer,
|
qt: qtrailer,
|
||||||
qu: qurls,
|
qu: qurls,
|
||||||
};
|
};
|
||||||
|
@ -104,7 +98,6 @@ function ctx(element, window) {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
element,
|
element,
|
||||||
document: element,
|
|
||||||
...(window && { window }),
|
...(window && { window }),
|
||||||
...contextFuncs,
|
...contextFuncs,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue