Compare commits

..

2 Commits

Author SHA1 Message Date
DebaucheryLibrarian a01b570f0e 1.244.67 2025-08-21 03:16:14 +02:00
DebaucheryLibrarian 32d0eb13e7 Added Family Strokes' API to Team Skeet scraper. 2025-08-21 03:16:12 +02:00
4 changed files with 29 additions and 12 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.244.66", "version": "1.244.67",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "traxxx", "name": "traxxx",
"version": "1.244.66", "version": "1.244.67",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "^3.458.0", "@aws-sdk/client-s3": "^3.458.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.244.66", "version": "1.244.67",
"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": {

View File

@ -12537,8 +12537,9 @@ const sites = [
alias: ['fams'], alias: ['fams'],
url: 'https://www.familystrokes.com', url: 'https://www.familystrokes.com',
parameters: { parameters: {
layout: 'organic', // endpoint: 'FS-organic-1rstmyhj44',
endpoint: 'FS-organic-1rstmyhj44', layout: 'search',
endpoint: 'familybundle',
}, },
tags: ['family'], tags: ['family'],
parent: 'teamskeet', parent: 'teamskeet',

View File

@ -30,11 +30,11 @@ function scrapeScene(scene, channel, parameters) {
release.description = scene.description; release.description = scene.description;
release.date = qu.extractDate(scene.publishedDate); release.date = qu.extractDate(scene.publishedDate);
release.actors = scene.models?.map((model) => model.modelName) || []; // release.actors = scene.models?.map((model) => model.modelName) || [];
release.actors = scene.models?.map((model) => ({ release.actors = scene.models?.map((model) => ({
name: model.modelName, name: model.modelName || model.name || model.title,
avatar: parameters.avatars && `${parameters.avatars}/${slugify(model.modelName, '_')}.jpg`, avatar: parameters.avatars && `${parameters.avatars}/${slugify(model.modelName || model.name || model.title, '_')}.jpg`,
url: `${channel.url}/models/${model.modelId}`, url: `${channel.url}/models/${model.modelId || model.id}`,
})); }));
release.poster = [ release.poster = [
@ -155,6 +155,16 @@ async function fetchLatestOrganic(channel, page, context) {
return res.status; return res.status;
} }
async function fetchLatestSearch(channel, page = 1, { parameters }) {
const res = await http.get(`https://tours-store.psmcdn.net/${parameters.endpoint}/_search?sort=publishedDate:desc&q=(type:video%20AND%20isXSeries:false%20)&size=30&from=${(page - 1) * 30}`);
if (res.ok) {
return scrapeAll(res.body.hits.hits.map(({ _source: scene }) => scene), channel, parameters);
}
return res.status;
}
async function fetchScene(url, channel, baseScene, { parameters }) { async function fetchScene(url, channel, baseScene, { parameters }) {
if (parameters.layout !== 'organic' && baseScene?.entryId) { if (parameters.layout !== 'organic' && baseScene?.entryId) {
// overview and deep data is the same in elastic API, don't hit server unnecessarily // overview and deep data is the same in elastic API, don't hit server unnecessarily
@ -163,9 +173,11 @@ async function fetchScene(url, channel, baseScene, { parameters }) {
const sceneSlug = new URL(url).pathname.match(/\/([\w-]+$)/)[1]; const sceneSlug = new URL(url).pathname.match(/\/([\w-]+$)/)[1];
const res = await http.get(parameters.layout === 'organic' const res = await http.get({
? `https://store.psmcdn.net/${parameters.endpoint}/moviesContent/${sceneSlug}.json` organic: `https://store.psmcdn.net/${parameters.endpoint}/moviesContent/${sceneSlug}.json`,
: `https://tours-store.psmcdn.net/${parameters.endpoint}-videoscontent/_doc/${sceneSlug}`); search: `https://tours-store.psmcdn.net/ts_network/_search/?q=(id:${sceneSlug})&size=1`,
undefined: `https://tours-store.psmcdn.net/${parameters.endpoint}-videoscontent/_doc/${sceneSlug}`,
}[parameters.layout]);
if (res.ok && res.body.found) { if (res.ok && res.body.found) {
return scrapeScene(res.body._source, channel, parameters); return scrapeScene(res.body._source, channel, parameters);
@ -201,4 +213,8 @@ module.exports = {
fetchLatest: fetchLatestOrganic, fetchLatest: fetchLatestOrganic,
fetchScene, fetchScene,
}, },
search: {
fetchLatest: fetchLatestSearch,
fetchScene,
},
}; };