Split Team Skeet and MYLF into new networks Pervz, Swappz and Free Use.

This commit is contained in:
DebaucheryLibrarian
2026-02-03 03:27:33 +01:00
parent 8126cc29d9
commit d554ef6b02
5 changed files with 280 additions and 155 deletions

View File

@@ -193,6 +193,13 @@ module.exports = {
// first anal quest
doubleviewcasting: firstanalquest,
firstanalquest,
// paper street media / team skeet
teamskeet,
sayuncle: teamskeet,
mylf: teamskeet,
pervz: teamskeet,
swappz: teamskeet,
freeuse: teamskeet,
// etc
'18vr': badoink,
theflourishxxx: theflourish,
@@ -228,7 +235,6 @@ module.exports = {
littlecapricedreams,
mariskax,
missax,
mylf: teamskeet,
nebraskacoeds: elevatedx,
pascalssubsluts,
pervcity,
@@ -239,7 +245,6 @@ module.exports = {
private: privateNetwork,
realvr: badoink,
rickysroom,
sayuncle: teamskeet,
score,
sexlikereal,
spermmania: snowvalley,
@@ -253,7 +258,6 @@ module.exports = {
uralesbian: snowvalley,
rawattack: spizoo,
spizoo,
teamskeet,
// teencoreclub,
teenmegaworld,
testedefudelidade,

View File

@@ -89,9 +89,18 @@ module.exports = {
brazzers: aylo,
gaywire: aylo,
sexyhub: aylo,
// daringsex,
// arch angel
// paper street media / team skeet
teamskeet,
sayuncle: teamskeet,
mylf: teamskeet,
pervz: teamskeet,
swappz: teamskeet,
freeuse: teamskeet,
// etc
analvids: pornbox,
kellymadison,
kink,
'8kmembers': kellymadison,
amateurallure: julesjordan,
americanpornstar,
amateureuro: porndoe,
@@ -133,19 +142,13 @@ module.exports = {
jesseloadsmonsterfacials,
julesjordan,
karups,
kellymadison,
'8kmembers': kellymadison,
kink,
// kinkvr: badoink,
// analvids,
analvids: pornbox,
// etc.
littlecapricedreams,
loveherfilms,
mamacitaz: porndoe,
mariskax,
mikeadriano,
missax,
mylf: teamskeet,
naughtyamerica,
nebraskacoeds: elevatedx,
newsensations,
@@ -161,7 +164,6 @@ module.exports = {
private: privateNetwork,
radical,
rickysroom,
sayuncle: teamskeet,
score,
sexlikereal,
snowvalley,
@@ -169,7 +171,6 @@ module.exports = {
swallowsalon: julesjordan,
teencoreclub,
teenmegaworld,
teamskeet,
testedefudelidade,
theflourish,
tokyohot,

View File

@@ -22,7 +22,26 @@ function getChannelSlug(channelName, entity) {
return channel?.slug || null;
}
function scrapeScene(scene, channel, parameters) {
async function fetchTrailerUrl(videoId, entity) {
const res = await unprint.get(`https://sstg.psmcode.com/?videoId=${videoId}`, {
headers: {
Origin: entity.origin,
'sec-fetch-site': 'cross-site',
},
});
if (res.ok) {
const token = res.data.token;
if (token) {
return `https://customer-bk3o9te23pydwwcb.cloudflarestream.com/${token}/manifest/video.mpd?parentOrigin=${entity.origin}`;
}
}
return null;
}
async function scrapeScene(scene, channel, parameters, includeTrailers) {
const release = {};
release.entryId = scene.id;
@@ -35,7 +54,7 @@ function scrapeScene(scene, channel, parameters) {
// release.actors = scene.models?.map((model) => model.modelName) || [];
release.actors = scene.models?.map((model) => ({
name: model.modelName || model.name || model.title,
avatar: parameters.avatars && `${parameters.avatars}/${slugify(model.modelName || model.name || model.title, '_')}.jpg`,
avatar: model.img || (parameters.avatars && `${parameters.avatars}/${slugify(model.modelName || model.name || model.title, '_')}.jpg`),
url: `${channel.url}/models/${model.modelId || model.id}`,
}));
@@ -51,8 +70,9 @@ function scrapeScene(scene, channel, parameters) {
release.teaser = scene.videoTrailer;
if (scene.video) {
release.trailer = `https://cloudflarestream.com/${scene.video}/manifest/video.mpd?parentOrigin=${encodeURIComponent(channel.url)}`;
if (scene.video && includeTrailers) {
// release.trailer = `https://cloudflarestream.com/${scene.video}/manifest/video.mpd?parentOrigin=${encodeURIComponent(channel.url)}`;
release.trailer = await fetchTrailerUrl(scene.video, channel);
}
release.tags = scene.tags;
@@ -66,7 +86,7 @@ function scrapeScene(scene, channel, parameters) {
}
function scrapeAll(scenes, channel, parameters) {
return scenes.map((scene) => scrapeScene(scene, channel, parameters));
return Promise.all(scenes.map(async (scene) => scrapeScene(scene, channel, parameters)));
}
async function fetchLatest(channel, page = 1, { parameters }) {
@@ -99,7 +119,11 @@ async function fetchLatestOrganic(channel, page, context) {
}
async function fetchLatestSearch(channel, page = 1, { parameters }) {
const res = await http.get(`https://tours-store.psmcdn.net/${parameters.fullEndpoint || parameters.endpoint}/_search?q=(site.seo.seoSlug:%22${parameters.id}%22%20AND%20type:video)&sort=publishedDate:desc&size=30&from=${(page - 1) * 30}`);
const url = parameters.id
? `https://tours-store.psmcdn.net/${parameters.fullEndpoint || parameters.endpoint}/_search?q=(site.seo.seoSlug:"${parameters.id}" AND type:video)&sort=publishedDate:desc&size=30&from=${(page - 1) * 30}`
: `https://tours-store.psmcdn.net/${parameters.fullEndpoint || parameters.endpoint}/_search?sort=publishedDate:desc&q=(type:video AND isXSeries:false)&size=30&from=${(page - 1) * 30}`;
const res = await http.get(url);
if (res.ok) {
return scrapeAll(res.body.hits.hits.map(({ _source: scene }) => scene), channel, parameters);
@@ -108,8 +132,8 @@ async function fetchLatestSearch(channel, page = 1, { parameters }) {
return res.status;
}
async function fetchScene(url, channel, baseScene, { parameters }) {
if (parameters.layout !== 'organic' && baseScene?.entryId) {
async function fetchScene(url, channel, baseScene, { parameters, includeTrailers }) {
if (parameters.layout !== 'organic' && baseScene?.entryId && !includeTrailers) {
// overview and deep data is the same in elastic API, don't hit server unnecessarily
return baseScene;
}
@@ -134,7 +158,7 @@ async function fetchScene(url, channel, baseScene, { parameters }) {
const video = videos?.[sceneSlug] || Object.values(videos)[0];
if (video) {
return scrapeScene(video, channel, parameters);
return scrapeScene(video, channel, parameters, includeTrailers);
}
return null;
@@ -143,7 +167,7 @@ async function fetchScene(url, channel, baseScene, { parameters }) {
return res.status;
}
function scrapeProfile(actor, entity, parameters) {
async function scrapeProfile(actor, entity, parameters) {
const profile = {};
profile.url = `${entity.url}/models/${actor.id}`;
@@ -203,7 +227,7 @@ function scrapeProfile(actor, entity, parameters) {
profile.avatar = actor.img;
profile.banner = actor.cover;
profile.scenes = actor.movies?.map((scene) => scrapeScene(scene, entity, parameters));
profile.scenes = await Promise.all(actor.movies?.map(async (scene) => scrapeScene(scene, entity, parameters)));
return profile;
}