Configured Reality Kings to fetch session from RK scene overview.

This commit is contained in:
DebaucheryLibrarian
2022-02-11 22:14:44 +01:00
parent 98a72a4929
commit 496c29e569
11 changed files with 157 additions and 64 deletions

View File

@@ -155,8 +155,8 @@ function getUrl(site) {
throw new Error(`Mind Geek site '${site.name}' (${site.url}) not supported`);
}
async function getSession(site, parameters) {
if (site.slug === 'mindgeek') {
async function getSession(site, parameters, url) {
if (site.slug === 'mindgeek' || site.parameters?.parentSession === false) {
// most MG sites have a parent network to acquire a session from, don't try to acquire session from mindgeek.com for independent channels
return null;
}
@@ -166,7 +166,7 @@ async function getSession(site, parameters) {
const sessionUrl = site.parameters?.siteId && !(site.parameters?.native || site.parameters?.childSession || site.parent?.parameters?.childSession)
? site.parent.url
: site.url;
: (url || site.url);
const res = await http.get(sessionUrl, {
session,
@@ -179,7 +179,9 @@ async function getSession(site, parameters) {
const cookieString = await cookieJar.getCookieStringAsync(sessionUrl);
const { instance_token: instanceToken } = cookie.parse(cookieString);
return { session, instanceToken };
if (instanceToken) {
return { session, instanceToken };
}
}
throw new Error(`Failed to acquire MindGeek session (${res.statusCode})`);
@@ -238,7 +240,9 @@ async function fetchLatest(site, page = 1, options) {
const { searchParams } = new URL(url);
const siteId = searchParams.get('site');
const { session, instanceToken } = options.beforeNetwork?.headers?.Instance ? options.beforeNetwork : await getSession(site, options.parameters);
const { session, instanceToken } = options.beforeNetwork?.headers?.Instance
? options.beforeNetwork
: await getSession(site, options.parameters, url);
const beforeDate = moment().add('1', 'day').format('YYYY-MM-DD');
const limit = 24;
@@ -366,6 +370,7 @@ async function fetchProfile({ name: actorName, slug: actorSlug }, { entity, para
module.exports = {
beforeNetwork: getSession,
beforeFetchScenes: getSession,
requireBeforeNetwork: false,
scrapeLatestX,
fetchLatest,
fetchUpcoming,

43
src/tools/realitykings.js Normal file
View File

@@ -0,0 +1,43 @@
'use strict';
const https = require('https');
const bhttp = require('bhttp');
const fetch = require('node-fetch');
const { request } = require('undici');
const express = require('express');
async function init() {
const res = await fetch('https://www.realitykings.com/scenes?site=45', {
method: 'HEAD',
headers: {
'user-agent': 'HTTPie/2.6.0',
'accept-encoding': 'gzip, deflate, br',
accept: '*/*',
connection: 'keep-alive',
},
});
console.log(res.status, res.headers);
const app = express();
app.get('/', (appReq, appRes) => {
console.log(appReq.headers);
appRes.status(204).send();
});
app.listen(8000, () => {
console.log('Listening on port 8000');
fetch('http://127.0.0.1:8000', {
headers: {
'user-agent': 'HTTPie/2.6.0',
'accept-encoding': 'gzip, deflate, br',
accept: '*/*',
connection: 'keep-alive',
},
});
});
}
init();

View File

@@ -267,8 +267,20 @@ async function scrapeNetworkSequential(networkEntity) {
return releases.uniqueReleases;
}
async function getBeforeNetwork(networkEntity) {
try {
return await networkEntity.scraper?.beforeNetwork?.(networkEntity);
} catch (error) {
if (networkEntity.scraper?.requireBeforeNetwork === false) {
return null;
}
throw error;
}
}
async function scrapeNetworkParallel(networkEntity) {
const beforeNetwork = await networkEntity.scraper?.beforeNetwork?.(networkEntity);
const beforeNetwork = await getBeforeNetwork(networkEntity);
return Promise.map(
networkEntity.includedChildren,