Compare commits

..

No commits in common. "84f833ac31389b95fb84f6d628afc3a210f12662" and "6ab73bfd74e3d176fe2875b53765020cce22327a" have entirely different histories.

3 changed files with 18 additions and 31 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.222.1", "version": "1.222.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "traxxx", "name": "traxxx",
"version": "1.222.1", "version": "1.222.0",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@casl/ability": "^5.2.2", "@casl/ability": "^5.2.2",

View File

@ -1,6 +1,6 @@
{ {
"name": "traxxx", "name": "traxxx",
"version": "1.222.1", "version": "1.222.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": {

View File

@ -34,19 +34,6 @@ function decodeId(id) {
.toString('hex'); .toString('hex');
} }
function getAvatarFallback(url) {
try {
const { origin, pathname } = new URL(url);
return [
`${origin}${pathname}`,
url,
];
} catch (error) {
return null;
}
}
function scrapeAll(scenes, entity) { function scrapeAll(scenes, entity) {
return scenes.map(({ query }) => { return scenes.map(({ query }) => {
const release = {}; const release = {};
@ -90,19 +77,10 @@ async function scrapeScene({ query }, { url, entity }) {
release.date = unprint.extractDate(data?.datePublished, 'YYYY-MM-DD'); release.date = unprint.extractDate(data?.datePublished, 'YYYY-MM-DD');
release.duration = unprint.extractTimestamp(data?.duration) || query.duration('//p[contains(text(), "Playtime:")]//span'); release.duration = unprint.extractTimestamp(data?.duration) || query.duration('//p[contains(text(), "Playtime:")]//span');
if (data) { release.actors = data?.actor.map((actor) => ({
release.actors = data.actor.map((actor) => ({ name: actor.name,
name: actor.name, url: actor.url,
url: actor.url, })) || query.contents('.expanded a[href*="/pornstar"]');
avatar: getAvatarFallback(query.img(`.video-actors img[alt="${actor.name}"]`)),
}));
} else {
release.actors = query.elements('//div[contains(@class, "video-actors")]//a[img]').map((element) => ({
name: unprint.query.attribute(element, 'img', 'alt'),
url: unprint.query.url(element, null, { origin: entity.url }),
avatar: getAvatarFallback(unprint.query.img(element, 'img')),
}));
}
release.tags = query.contents('.expanded .genres'); release.tags = query.contents('.expanded .genres');
@ -136,7 +114,7 @@ async function fetchActorScenes(element, url, entity, page = 1, acc = []) {
} }
async function scrapeProfile({ query, element }, url, entity, include) { async function scrapeProfile({ query, element }, url, entity, include) {
const profile = { url }; const profile = {};
profile.dateOfBirth = query.date('//text()[contains(., "Born")]/following-sibling::span[contains(@class, "font-bold")][1]', 'MMMM D, YYYY'); profile.dateOfBirth = query.date('//text()[contains(., "Born")]/following-sibling::span[contains(@class, "font-bold")][1]', 'MMMM D, YYYY');
profile.birthPlace = query.content('//text()[contains(., "in")]/following-sibling::span[contains(@class, "font-bold")][1]'); profile.birthPlace = query.content('//text()[contains(., "in")]/following-sibling::span[contains(@class, "font-bold")][1]');
@ -146,7 +124,16 @@ async function scrapeProfile({ query, element }, url, entity, include) {
profile.hairColor = query.content('//text()[contains(., "Hair Color")]/following-sibling::span[contains(@class, "font-bold")][1]'); profile.hairColor = query.content('//text()[contains(., "Hair Color")]/following-sibling::span[contains(@class, "font-bold")][1]');
profile.eyes = query.content('//text()[contains(., "Eye Color")]/following-sibling::span[contains(@class, "font-bold")][1]'); profile.eyes = query.content('//text()[contains(., "Eye Color")]/following-sibling::span[contains(@class, "font-bold")][1]');
profile.avatar = getAvatarFallback(query.img('img[alt*="profile"][src*="https://i.bang.com/pornstars/"]')); const avatar = query.img('img[alt*="profile"][src*="https://i.bang.com/pornstars/"]');
if (avatar) {
const { origin, pathname } = new URL(avatar);
profile.avatar = [
`${origin}${pathname}`, // full size
avatar,
];
}
if (include.scenes) { if (include.scenes) {
profile.scenes = await fetchActorScenes(element, url, entity); profile.scenes = await fetchActorScenes(element, url, entity);