forked from DebaucheryLibrarian/traxxx
Added Teen Core Club profile scraper. Added all TCC channels. Added various TCC logos.
This commit is contained in:
@@ -205,6 +205,7 @@ module.exports = {
|
||||
silverstonedvd: famedigital,
|
||||
silviasaint: famedigital,
|
||||
swallowed: mikeadriano,
|
||||
teencoreclub,
|
||||
thatsitcomshow: nubiles,
|
||||
transangels,
|
||||
trueanal: mikeadriano,
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const moment = require('moment');
|
||||
const m3u8stream = require('m3u8stream');
|
||||
// const fs = require('fs');
|
||||
// const m3u8stream = require('m3u8stream');
|
||||
|
||||
const logger = require('../logger')(__filename);
|
||||
// const logger = require('../logger')(__filename);
|
||||
const http = require('../utils/http');
|
||||
const qu = require('../utils/qu');
|
||||
const slugify = require('../utils/slugify');
|
||||
const { prefixUrl } = require('../utils/qu');
|
||||
|
||||
function scrapeLatest(scenes, entity) {
|
||||
function scrapeAll(scenes, entity) {
|
||||
return scenes.map((scene) => {
|
||||
const release = {};
|
||||
|
||||
@@ -44,7 +45,7 @@ function scrapeLatest(scenes, entity) {
|
||||
});
|
||||
}
|
||||
|
||||
async function scrapeScene({ query }, url, entity) {
|
||||
async function scrapeScene({ query }, url, _entity) {
|
||||
const release = {};
|
||||
|
||||
const entryId = new URL(url).pathname.match(/\/video\/(\d+)/)[1];
|
||||
@@ -69,6 +70,11 @@ async function scrapeScene({ query }, url, entity) {
|
||||
release.poster = query.q('.detail-hero').style['background-image'].match(/url\((.+)\)/)[1];
|
||||
release.photos = query.imgs('.detail-grabs img');
|
||||
|
||||
/*
|
||||
// example https://video.pictalk.com/5d13d6e5f7533152a61ee20e/2020-07-06/ab92b1e24d1c249e508bf5c73f047baf.m3u8
|
||||
m3u8stream('https://video.pictalk.com/5d13d6e5f7533152a61ee20e/2020-07-06/ab92b1e24d1c249e508bf5c73f047baf.m3u8')
|
||||
.pipe(fs.createWriteStream('./test.mp4'));
|
||||
|
||||
const streamData = await http.get(`${entity.url}/video/source/${entryId}`, {
|
||||
host: new URL(entity.url).host,
|
||||
referer: url,
|
||||
@@ -86,18 +92,38 @@ async function scrapeScene({ query }, url, entity) {
|
||||
if (streamData.body.status !== 'success') {
|
||||
logger.warn(`Could not retrieve trailer from ${entity.name} (Teen Core Club): ${streamData.body.status}`);
|
||||
}
|
||||
*/
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
async function scrapeProfile(actor, entity, include) {
|
||||
const profile = {};
|
||||
|
||||
if (actor.image) {
|
||||
profile.avatar = `https://teencoreclub.com${actor.image}`;
|
||||
}
|
||||
|
||||
if (include.releases) {
|
||||
const res = await http.get(`https://teencoreclub.com/browsevideos/api/all?actor=${actor.id}`);
|
||||
|
||||
if (res.ok) {
|
||||
profile.releases = scrapeAll(res.body.data, entity);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(profile);
|
||||
return profile;
|
||||
}
|
||||
|
||||
async function fetchLatest(entity, page = 1) {
|
||||
// console.log(entity, page);
|
||||
|
||||
if (entity.parameters?.siteId) {
|
||||
const res = await http.get(`https://teencoreclub.com/browsevideos/api/all?resType=all&page=${page}&label=${entity.parameters.siteId}`);
|
||||
const res = await http.get(`https://teencoreclub.com/browsevideos/api/all?resType=latest&page=${page}&label=${entity.parameters.siteId}`);
|
||||
|
||||
if (res.ok) {
|
||||
return scrapeLatest(res.body.data, entity);
|
||||
return scrapeAll(res.body.data, entity);
|
||||
}
|
||||
|
||||
return res.status;
|
||||
@@ -107,7 +133,9 @@ async function fetchLatest(entity, page = 1) {
|
||||
}
|
||||
|
||||
async function fetchScene(url, entity) {
|
||||
const res = await qu.get(url);
|
||||
// TODO: don't assign site URL for old sites
|
||||
const { pathname } = new URL(url);
|
||||
const res = await qu.get(`https://teencoreclub.com${pathname}`);
|
||||
|
||||
if (res.ok) {
|
||||
return scrapeScene(res.item, url, entity);
|
||||
@@ -116,7 +144,25 @@ async function fetchScene(url, entity) {
|
||||
return res.status;
|
||||
}
|
||||
|
||||
async function fetchProfile(actorName, { entity }, include) {
|
||||
const res = await http.get(`https://teencoreclub.com/api/actors?query=${actorName}`);
|
||||
|
||||
if (res.ok) {
|
||||
console.log(res.body);
|
||||
const actor = res.body.data.find(item => slugify(item.name) === slugify(actorName));
|
||||
|
||||
if (actor) {
|
||||
return scrapeProfile(actor, entity, include);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return res.status;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
fetchLatest,
|
||||
fetchScene,
|
||||
fetchProfile,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user