Fixed qu all breaking if no selectors are passed. Fixed old Kelly Madison scene URLs.
This commit is contained in:
parent
96a5e5b693
commit
df941b0021
|
@ -5284,6 +5284,8 @@ const sites = [
|
||||||
parent: 'kellymadison',
|
parent: 'kellymadison',
|
||||||
parameters: {
|
parameters: {
|
||||||
siteId: 3,
|
siteId: 3,
|
||||||
|
// older scene pages are only available on PF, even though they are categorized on TS or KM
|
||||||
|
archive: 'https://www.pornfidelity.com',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -5304,6 +5306,7 @@ const sites = [
|
||||||
parent: 'kellymadison',
|
parent: 'kellymadison',
|
||||||
parameters: {
|
parameters: {
|
||||||
siteId: 1,
|
siteId: 1,
|
||||||
|
archive: 'https://www.pornfidelity.com',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,13 +25,18 @@ function scrapeLatest(scenes, site) {
|
||||||
|
|
||||||
const { pathname } = new URL(query.url('h5 a, .ep-title a, .title a'));
|
const { pathname } = new URL(query.url('h5 a, .ep-title a, .title a'));
|
||||||
[release.entryId] = pathname.match(/\d+$/);
|
[release.entryId] = pathname.match(/\d+$/);
|
||||||
release.url = `${site.url}${pathname}`;
|
|
||||||
|
|
||||||
release.title = query.cnt('h5 a, .ep-title a, .title a');
|
release.title = query.cnt('h5 a, .ep-title a, .title a');
|
||||||
|
|
||||||
release.date = query.date('.card-meta .text-left, .row .col-4:first-child, .card-footer-item:first-child', ['MMM D', 'MMM D, YYYY'], /\w+ \d+(, \w+)?/);
|
release.date = query.date('.card-meta .text-left, .row .col-4:first-child, .card-footer-item:first-child', ['MMM D', 'MMM D, YYYY'], /\w+ \d+(, \w+)?/);
|
||||||
release.actors = query.cnts('.models a, .ep-models a, a[href*="models/"]');
|
release.actors = query.cnts('.models a, .ep-models a, a[href*="models/"]');
|
||||||
|
|
||||||
|
// older scenes do not have a working scene page on their native site, only on Porn Fidelity
|
||||||
|
// scenes older than year do not show a date; this is not when the URLs stop working, but it's a rough guideline
|
||||||
|
release.url = site.parameters.archive && !release.date
|
||||||
|
? `${site.parameters.archive}${pathname}`
|
||||||
|
: `${site.url}${pathname}`;
|
||||||
|
|
||||||
release.duration = query.dur('.content a');
|
release.duration = query.dur('.content a');
|
||||||
|
|
||||||
const duration = query.cnt('.content a, .ep-runtime strong, .subtitle:last-child a')?.match(/(\d+) min/)?.[1];
|
const duration = query.cnt('.content a, .ep-runtime strong, .subtitle:last-child a')?.match(/(\d+) min/)?.[1];
|
||||||
|
@ -103,6 +108,8 @@ async function scrapeScene({ query, html }, url, baseRelease, channel, session)
|
||||||
// const token = query.meta('name=_token');
|
// const token = query.meta('name=_token');
|
||||||
// const trailerInfoUrl = `${channel.url}/episodes/trailer/sources/${release.entryId}?type=trailer`;
|
// const trailerInfoUrl = `${channel.url}/episodes/trailer/sources/${release.entryId}?type=trailer`;
|
||||||
const trailerInfoUrl = html.match(/'(http.*\/trailer\/sources.*)'/)?.[1];
|
const trailerInfoUrl = html.match(/'(http.*\/trailer\/sources.*)'/)?.[1];
|
||||||
|
|
||||||
|
if (trailerInfoUrl) {
|
||||||
const trailerInfoRes = await http.post(trailerInfoUrl, null, { session });
|
const trailerInfoRes = await http.post(trailerInfoUrl, null, { session });
|
||||||
|
|
||||||
if (trailerInfoRes.ok && trailerInfoRes.body.sources?.length > 0) {
|
if (trailerInfoRes.ok && trailerInfoRes.body.sources?.length > 0) {
|
||||||
|
@ -116,6 +123,7 @@ async function scrapeScene({ query, html }, url, baseRelease, channel, session)
|
||||||
*/
|
*/
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return release;
|
return release;
|
||||||
}
|
}
|
||||||
|
@ -176,9 +184,14 @@ async function fetchScene(url, channel, baseRelease) {
|
||||||
|
|
||||||
const res = await qu.get(url, null, {
|
const res = await qu.get(url, null, {
|
||||||
'X-Requested-With': 'XMLHttpRequest',
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
}, { session });
|
}, {
|
||||||
|
session,
|
||||||
|
followRedirects: false, // redirects to sign-up page if scene not found
|
||||||
|
});
|
||||||
|
|
||||||
return res.ok ? scrapeScene(res.item, url, baseRelease, channel, session) : res.status;
|
return res.ok
|
||||||
|
? scrapeScene(res.item, url, baseRelease, channel, session)
|
||||||
|
: res.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchProfile({ name: actorName }, { entity }) {
|
async function fetchProfile({ name: actorName }, { entity }) {
|
||||||
|
|
|
@ -142,6 +142,10 @@ function all(context, selectors, attrArg, applyTrim = true) {
|
||||||
const attr = attrArg === true ? 'textContent' : attrArg;
|
const attr = attrArg === true ? 'textContent' : attrArg;
|
||||||
const elements = [].concat(selectors).reduce((acc, selector) => acc || getElements(context, selector), null);
|
const elements = [].concat(selectors).reduce((acc, selector) => acc || getElements(context, selector), null);
|
||||||
|
|
||||||
|
if (!Array.isArray(elements)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
if (attr) {
|
if (attr) {
|
||||||
return elements.map((el) => q(el, null, attr, applyTrim));
|
return elements.map((el) => q(el, null, attr, applyTrim));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue