Removed unused scripts using bhttp and removed dependency.

This commit is contained in:
DebaucheryLibrarian
2026-11-08 17:18:10 +01:00
parent 27be031068
commit 12c27722ee
11 changed files with 2 additions and 1532 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ const { fetchEntityReleaseIds } = require('./entity-releases');
const streamQueue = taskQueue();
// carried over from the legacy HTTP module, unprint's raw request interface would identify as traxxx
const mediaUserAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36';
const mediaUserAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36';
const s3 = new S3Client({
region: 'eu-central-1',
-84
View File
@@ -1,84 +0,0 @@
'use strict';
const fs = require('fs').promises;
const bhttp = require('bhttp');
const slugify = require('../utils/slugify');
const { studios: oldStudios } = require('../../seeds/03_studios');
/*
const slugMap = {
thay_ksada: 'thayksada2',
};
*/
async function init() {
const res = await bhttp.get('https://pornbox.com/studio/list');
if (!res.statusCode === 200) {
throw new Error(`Failed to retrieve studios (${res.statusCode}): ${res.body.toString()}`);
}
const newStudios = res.body.map((studio) => {
const slug = slugify(studio.name, '');
const oldStudio = oldStudios.find((oldStudioX) => oldStudioX.slug === slug);
const tags = oldStudio?.tags || [];
const newStudio = {
name: studio.name,
slug,
originalSlug: slugify(studio.alias, ''),
url: `https://www.analvids.com/studios/${studio.alias}`,
parent: 'analvids',
};
if (oldStudio?.alias) {
newStudio.alias = oldStudio.alias;
}
if (studio.description && studio.description.toLowerCase() !== studio.name.toLowerCase()) {
newStudio.description = studio.description;
}
if (studio.directions?.includes('gay')) {
tags.push('gay');
}
if (studio.directions?.includes('lesbian')) {
tags.push('lesbian');
}
if (studio.directions?.includes('trans')) {
tags.push('transsexual');
}
if (tags.length > 0) {
newStudio.tags = Array.from(new Set(tags));
}
return newStudio;
});
await fs.writeFile('./analvids-studios.json', JSON.stringify(newStudios, null, 4));
newStudios.reduce((acc, studio) => {
const existingStudio = acc.get(studio.slug);
if (existingStudio) {
if (!acc.has(studio.originalSlug)) {
console.log('REWRITE', studio.slug, studio.originalSlug);
studio.slug = studio.originalSlug; // eslint-disable-line
}
console.log('slug already exists!', existingStudio, studio, studio.originalSlug, studio.slug);
}
acc.set(studio.slug, studio);
return acc;
}, new Map());
// console.log(newStudios);
}
init();
-18
View File
@@ -1,18 +0,0 @@
'use strict';
const bhttp = require('bhttp');
async function init() {
const res = await bhttp.head('https://www.kink.com/consent', {
headers: {
Host: 'www.kink.com',
'User-Agent': 'HTTPie/2.6.0',
Accept: '*/*',
Connection: 'keep-alive',
},
});
console.log(res.body.toString(), res.headers, res.statusCode);
}
init();
-118
View File
@@ -1,118 +0,0 @@
'use strict';
const bhttp = require('bhttp');
const Promise = require('bluebird');
const fsPromises = require('fs').promises;
const fs = require('fs');
const { PassThrough } = require('stream');
const crypto = require('crypto');
const argv = require('yargs')(require('yargs/helpers').hideBin(process.argv)).argv;
const file = 'https://speed.hetzner.de/100MB.bin';
// const file = 'https://speed.hetzner.de/1GB.bin';
// const file = 'https://speed.hetzner.de/10GB.bin';
function getMemoryUsage() {
return process.memoryUsage().rss / (10 ** 6);
}
const stats = {
peakMemoryUsage: getMemoryUsage(),
done: false,
downloads: {},
};
function render() {
const downloads = Object.entries(stats.downloads);
process.stdout.clearScreenDown();
process.stdout.write(`peak memory: ${stats.peakMemoryUsage.toFixed(2)} MB\n`);
downloads.forEach(([download, progress]) => {
process.stdout.write(`${download}: ${progress}${typeof progress === 'string' ? '' : '%'}\n`);
});
process.stdout.moveCursor(0, -(downloads.length + 1));
process.stdout.cursorTo(0);
if (downloads.length === 0 || !downloads.every(([_label, download]) => typeof download === 'string')) {
setTimeout(() => render(), 1000);
return;
}
process.stdout.moveCursor(0, downloads.length + 1);
}
function setProgress(label, completedBytes, totalBytes, hash) {
const memory = getMemoryUsage();
stats.peakMemoryUsage = Math.max(memory, stats.peakMemoryUsage);
stats.downloads[label] = hash || Math.round((completedBytes / totalBytes) * 100);
}
async function buffered(label) {
const hash = crypto.createHash('blake2b512');
const imageRes = await bhttp.get(file, {
onDownloadProgress(completedBytes, totalBytes) {
setProgress(label, completedBytes, totalBytes);
},
});
hash.update(imageRes.body);
setProgress(label, null, null, hash.digest('hex'));
await fsPromises.writeFile(`/mnt/stor/Pictures/traxxx/temp/buffered-${label}.bin`, imageRes.body);
}
async function streamed(label) {
const hash = crypto.createHash('blake2b512');
hash.setEncoding('hex');
const hashStream = new PassThrough();
const targetStream = fs.createWriteStream(`/mnt/stor/Pictures/traxxx/temp/streamed-${label}.bin`);
const imageRes = await bhttp.get(file, {
stream: true,
});
const stream = imageRes
.pipe(hashStream)
.pipe(targetStream);
imageRes.on('progress', (completedBytes, totalBytes) => {
setProgress(label, completedBytes, totalBytes);
});
hashStream.on('data', (chunk) => {
hash.write(chunk);
});
stream.on('finish', () => {
hash.end();
setProgress(label, null, null, hash.read());
});
}
async function init() {
const n = argv.n || 1;
if (argv._.includes('stream')) {
console.log('using streams');
render();
await Promise.map(Array.from({ length: n }), async (value, index) => streamed(index + 1));
return;
}
if (argv._.includes('buffer')) {
console.log('using buffers');
render();
await Promise.map(Array.from({ length: n }), async (value, index) => buffered(index + 1));
}
}
init();
-18
View File
@@ -1,18 +0,0 @@
'use strict';
const bhttp = require('bhttp');
const sharp = require('sharp');
const { argv } = require('yargs')(require('yargs/helpers').hideBin(process.argv));
const url = argv.url || 'http://localhost:5000/media/actors/tommy-pistol/1580341442712.jpeg';
async function scan() {
console.log(url);
const res = await bhttp.get(url);
const stats = await sharp(res.body).stats();
console.log(stats);
}
scan();
-21
View File
@@ -1,21 +0,0 @@
'use strict';
const Promise = require('bluebird');
const bhttp = require('bhttp');
const knex = require('../knex');
async function run() {
const network = await knex('networks').where('slug', 'mofos').first();
const sites = await knex('sites').where('network_id', network.id);
await Promise.map(sites, async (site) => {
const res = await bhttp.get(site.url);
console.log(site.url, res.statusCode);
}, {
concurrency: 5,
});
}
run();
-37
View File
@@ -1,37 +0,0 @@
'use strict';
const Promise = require('bluebird');
const bhttp = require('bhttp');
const fs = require('fs-extra');
const knex = require('../knex');
async function init() {
const sites = await knex('sites')
.select('networks.name', 'sites.slug')
.join('networks', 'networks.id', 'sites.network_id')
.where('networks.slug', 'score');
await Promise.map(sites, async (site) => {
const url = `https://cdn77.scoreuniverse.com/${site.slug}/images/logo.png`;
console.log(url);
const res = await bhttp.get(url, {
responseTimeout: 5000,
});
if (res.statusCode === 200) {
console.log(`Saving logo for ${site.slug}`);
await fs.writeFile(`./score/${site.slug}.png`, res.body);
}
console.log(`No logo found for ${site.slug}`);
}, {
concurrency: 10,
});
knex.destroy();
}
init();
-55
View File
@@ -1,55 +0,0 @@
'use strict';
const config = require('config');
const { PassThrough } = require('stream');
const fs = require('fs');
const path = require('path');
const bhttp = require('bhttp');
const crypto = require('crypto');
const sharp = require('sharp');
const url = 'https://thumbs.julesjordan.com/trial/content//upload/dl03/julesjordan/oil_overload_16_scene2//photos/alina_lopez_jules_jordan_com_77.jpg';
async function init() {
const hash = crypto.createHash('blake2b512');
hash.setEncoding('hex');
const res = await bhttp.get(url, {
stream: true,
});
const metaStream = sharp();
const hashStream = new PassThrough();
const target = fs.createWriteStream(path.join(config.media.path, 'temp', 'alina.jpg'));
const thumbTarget = fs.createWriteStream(path.join(config.media.path, 'temp', 'alina_thumb.jpg'));
hashStream.on('data', (chunk) => {
hash.write(chunk);
});
metaStream.clone()
.resize(320)
.pipe(thumbTarget);
const stream = res
.pipe(metaStream)
.pipe(hashStream)
.pipe(target);
stream.on('finish', () => {
hash.end();
const digest = hash.read();
console.log('stream', digest);
});
metaStream.on('info', (info) => {
console.log('info', info);
});
const stats = await metaStream.stats();
console.log('stats', stats);
}
init();
-827
View File
@@ -1,827 +0,0 @@
const Promise = require('bluebird');
const bhttp = require('bhttp');
const fs = require('fs');
const channels = [{
name: 'Analyzed Girls',
slug: 'analyzedgirls',
url: 'https://analyzedgirls.com',
alias: ['ag',
],
tags: ['anal',
],
parent: 'teencoreclub',
parameters: {
siteId: 178,
},
},
{
name: 'Archived Updates',
slug: 'archivedupdates',
url: 'https://archivedupdates.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 482,
},
},
{
name: 'Ass Teen Mouth',
slug: 'assteenmouth',
url: 'https://assteenmouth.com',
alias: ['atm',
],
tags: ['anal',
'atm',
'teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 180,
},
},
{
name: 'Bang Teen Pussy',
slug: 'bangteenpussy',
url: 'https://bangteenpussy.com',
alias: ['btp',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 182,
},
},
{
name: 'Brutal Invasion',
slug: 'brutalinvasion',
url: 'https://brutalinvasion.com',
alias: ['bin',
],
parent: 'teencoreclub',
parameters: {
siteId: 184,
},
},
{
name: 'Clean My Ass',
slug: 'cleanmyass',
url: 'https://cleanmyass.com',
tags: ['ass-eating'],
alias: ['cma',
],
parent: 'teencoreclub',
parameters: {
siteId: 362,
},
},
{
name: 'College Party Time',
slug: 'collegepartytime',
url: 'https://collegepartytime.com',
alias: ['cpt',
],
parent: 'teencoreclub',
parameters: {
siteId: 278,
},
},
{
name: 'Cumaholic Teens',
slug: 'cumaholicteens',
url: 'https://cumaholicteens.com',
alias: ['ct',
'cumoholic teens',
'cumoholicteens',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 186,
},
},
{
name: 'Cum Filled Throat',
slug: 'cumfilledthroat',
url: 'https://cumfilledthroat.com',
alias: ['cft',
],
parent: 'teencoreclub',
parameters: {
siteId: 280,
},
},
{
name: 'Cum Sumption Cocktail',
slug: 'cumsumptioncocktail',
url: 'https://cumsumptioncocktail.com',
alias: ['csc',
],
parent: 'teencoreclub',
parameters: {
siteId: 282,
},
},
{
name: 'Defiled18',
slug: 'defiled18',
url: 'https://defiled18.com',
alias: ['d18',
],
parent: 'teencoreclub',
parameters: {
siteId: 188,
},
},
{
name: 'Dirty Baby Sitter',
slug: 'dirtybabysitter',
url: 'https://dirtybabysitter.com',
alias: ['dbs',
],
parent: 'teencoreclub',
parameters: {
siteId: 284,
},
},
{
name: 'Double Teamed Teens',
slug: 'doubleteamedteens',
url: 'https://doubleteamedteens.com',
alias: ['dtt',
],
tags: ['teen',
'dp',
],
parent: 'teencoreclub',
parameters: {
siteId: 190,
},
},
{
name: 'Dreamteens HD',
slug: 'dreamteenshd',
url: 'https://dreamteenshd.com',
alias: ['dhd',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 192,
},
},
{
name: 'Drill Her Butt',
slug: 'drillherbutt',
url: 'https://drillherbutt.com',
tags: ['anal'],
alias: ['dhb',
],
parent: 'teencoreclub',
parameters: {
siteId: 288,
},
},
{
name: 'Dual Throat',
slug: 'dualthroat',
url: 'https://dualthroat.com',
alias: ['dt',
],
parent: 'teencoreclub',
parameters: {
siteId: 290,
},
},
{
name: 'Gang Land Victims',
slug: 'ganglandvictims',
url: 'https://ganglandvictims.com',
alias: ['glv',
],
tags: ['gangbang',
],
parent: 'teencoreclub',
parameters: {
siteId: 292,
},
},
{
name: 'Girls Got Cream',
slug: 'girlsgotcream',
url: 'https://girlsgotcream.com',
alias: ['ggc',
],
parent: 'teencoreclub',
parameters: {
siteId: 194,
},
},
{
name: 'Hardcore Youth',
slug: 'hardcoreyouth',
url: 'https://hardcoreyouth.com',
alias: ['hcy',
],
parent: 'teencoreclub',
parameters: {
siteId: 196,
},
},
{
name: 'Little Hellcat',
slug: 'littlehellcat',
url: 'https://littlehellcat.com',
alias: ['lhc',
],
parent: 'teencoreclub',
parameters: {
siteId: 198,
},
},
{
name: 'Little Teen Suckers',
slug: 'littleteensuckers',
url: 'https://littleteensuckers.com',
alias: ['lts',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 294,
},
},
{
name: 'MAIKO',
slug: 'maiko',
url: 'https://maiko.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 566,
},
},
{
name: 'Make Teen Gape',
slug: 'maketeengape',
url: 'https://maketeengape.com',
alias: ['mtg',
],
tags: ['teen',
'gaping',
],
parent: 'teencoreclub',
parameters: {
siteId: 200,
},
},
{
name: 'Make Teen Moan',
slug: 'maketeenmoan',
url: 'https://maketeenmoan.com',
alias: ['mtm',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 296,
},
},
{
name: 'Mega Penetrations',
slug: 'megapenetrations',
url: 'https://megapenetrations.com',
alias: ['mp',
],
parent: 'teencoreclub',
parameters: {
siteId: 298,
},
},
{
name: 'Messy Gang Bangs',
slug: 'messygangbangs',
url: 'https://messygangbangs.com',
alias: ['mgb',
],
tags: ['gangbang',
],
parent: 'teencoreclub',
parameters: {
siteId: 300,
},
},
{
name: 'My Black Coeds',
slug: 'myblackcoeds',
url: 'https://myblackcoeds.com',
alias: ['mbc',
],
tags: ['ebony',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 302,
},
},
{
name: 'My Latina Teen',
slug: 'mylatinateen',
url: 'https://mylatinateen.com',
alias: ['mlt',
],
tags: ['teen',
'latina',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 304,
},
},
{
name: 'Nasty Ass Lickers',
slug: 'nastyasslickers',
url: 'https://nastyasslickers.com',
tags: ['ass-eating'],
alias: ['nal',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 306,
},
},
{
name: 'Naughty Little Nymphs',
slug: 'naughtylittlenymphs',
url: 'https://naughtylittlenymphs.com',
alias: ['nln',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 308,
},
},
{
name: 'NC UK Sinners',
slug: 'ncuksinners',
url: 'https://ncuksinners.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 568,
},
},
{
name: 'NC Verso Cinema',
slug: 'ncversocinema',
url: 'https://ncversocinema.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 570,
},
},
{
name: 'Network Mixed',
slug: 'networkmixed',
url: 'https://networkmixed.com',
alias: ['anc',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 360,
},
},
{
name: 'Never Done That Before',
slug: 'neverdonethatbefore',
url: 'https://neverdonethatbefore.com',
alias: ['ndt',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 310,
},
},
{
name: 'Nylon Sweeties',
slug: 'nylonsweeties',
url: 'https://nylonsweeties.com',
alias: ['nsw',
],
parent: 'teencoreclub',
parameters: {
siteId: 202,
},
},
{
name: 'Pink Eye Sluts',
slug: 'pinkeyesluts',
url: 'https://pinkeyesluts.com',
alias: ['pes',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 312,
},
},
{
name: 'Plug2 Holes',
slug: 'plug2holes',
url: 'https://plug2holes.com',
alias: ['p2h',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 314,
},
},
{
name: 'Pussy Babes',
slug: 'pussybabes',
url: 'https://pussybabes.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 556,
},
},
{
name: 'Road Gang Bangs',
slug: 'roadgangbangs',
url: 'https://roadgangbangs.com',
alias: ['rgb',
],
tags: ['gangbang',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 316,
},
},
{
name: 'Russian Teen Updates',
slug: 'russianteenupdates',
url: 'https://russianteenupdates.com',
tags: ['teen',
'russian',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 418,
},
},
{
name: 'School Bus Chicks',
slug: 'schoolbuschicks',
url: 'https://schoolbuschicks.com',
alias: ['sbc',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 318,
},
},
{
name: 'Seductive18',
slug: 'seductive18',
url: 'https://seductive18.com',
alias: ['s18',
],
parent: 'teencoreclub',
parameters: {
siteId: 204,
},
},
{
name: 'Show Me Gape',
slug: 'showmegape',
url: 'https://showmegape.com',
tags: ['gaping'],
alias: ['smg',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 320,
},
},
{
name: 'Shy Teachers Pet',
slug: 'shyteacherspet',
url: 'https://shyteacherspet.com',
alias: ['stp',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 322,
},
},
{
name: 'Small Tits Hunter',
slug: 'smalltitshunter',
url: 'https://smalltitshunter.com',
alias: ['sth',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 324,
},
},
{
name: 'Spermantino',
slug: 'spermantino',
url: 'https://spermantino.com',
alias: ['spe',
],
parent: 'teencoreclub',
parameters: {
siteId: 366,
},
},
{
name: 'TCC Network Archives',
slug: 'tccnetworkarchives',
url: 'https://tccnetworkarchives.com',
alias: ['all',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 176,
},
},
{
name: 'Teach My Ass',
slug: 'teachmyass',
url: 'https://teachmyass.com',
tags: ['anal'],
alias: ['tma',
],
parent: 'teencoreclub',
parameters: {
siteId: 368,
},
},
{
name: 'Teenagers Going Wild',
slug: 'teenagersgoingwild',
url: 'https://teenagersgoingwild.com',
alias: ['tgw',
],
tags: ['teen',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 326,
},
},
{
name: 'Teen Anal Casting',
slug: 'teenanalcasting',
url: 'https://teenanalcasting.com',
alias: ['tac',
],
tags: ['anal',
'teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 206,
},
},
{
name: 'Teen Drillers',
slug: 'teendrillers',
url: 'https://teendrillers.com',
alias: ['td',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 208,
},
},
{
name: 'Teen Gina',
slug: 'teengina',
url: 'https://teengina.com',
alias: ['tg',
],
tags: ['teen',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 210,
},
},
{
name: 'Teens Love Blacks',
slug: 'teensloveblacks',
url: 'https://teensloveblacks.com',
alias: ['tlb',
],
tags: ['interracial',
'bbc',
'teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 328,
},
},
{
name: 'Teens Natural Way',
slug: 'teensnaturalway',
url: 'https://teensnaturalway.com',
alias: ['tnw',
],
tags: ['teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 212,
},
},
{
name: 'Teens Try Anal',
slug: 'teenstryanal',
url: 'https://teenstryanal.com',
alias: ['tta',
],
tags: ['anal',
'teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 330,
},
},
{
name: 'Teens Try Blacks',
slug: 'teenstryblacks',
url: 'https://teenstryblacks.com',
alias: ['ttb',
],
tags: ['interracial',
'bbc',
'teen',
],
parent: 'teencoreclub',
parameters: {
siteId: 214,
},
},
{
name: 'Teens Want Orgies',
slug: 'teenswantorgies',
url: 'https://teenswantorgies.com',
alias: ['two',
],
tags: ['teen',
'threesome',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 332,
},
},
{
name: 'Try Teens',
slug: 'tryteens',
url: 'https://tryteens.com',
alias: ['tt',
],
tags: ['teen',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 216,
},
},
{
name: 'Tug Job Queens',
slug: 'tugjobqueens',
url: 'https://tugjobqueens.com',
tags: ['handjob'],
alias: ['tjq',
],
parent: 'teencoreclub',
parameters: {
siteId: 334,
},
},
{
name: 'UK Sinners',
slug: 'uksinners',
url: 'https://uksinners.com',
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 558,
},
},
{
name: 'White Box Black Cocks',
slug: 'whiteboxblackcocks',
url: 'https://whiteboxblackcocks.com',
alias: ['wbc',
],
tags: ['interracial',
'bbc',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 336,
},
},
{
name: 'White Teens Black Cocks',
slug: 'whiteteensblackcocks',
url: 'https://whiteteensblackcocks.com',
alias: ['wbc',
],
tags: ['interracial',
'bbc',
'teen',
],
parent: 'teencoreclub',
hasLogo: false,
parameters: {
siteId: 218,
},
},
{
name: 'Young Throats',
slug: 'youngthroats',
url: 'https://youngthroats.com',
tags: ['blowjob', 'deepthroat', 'facefucking'],
alias: ['yt',
],
parent: 'teencoreclub',
parameters: {
siteId: 220,
},
}];
async function init() {
const results = await Promise.map(channels, async (channel) => {
try {
const res = await bhttp.head(channel.url, {
followRedirects: false,
responseTimeout: 30000,
});
console.log(res.statusCode, channel.url);
if (res.statusCode === 200) {
return channel;
}
throw new Error(`${channel.url} no longer available: ${res.statusCode}`);
} catch (error) {
console.error(channel.url, error.message);
return {
name: channel.name,
slug: channel.slug,
url: `https://teencoreclub.com/browsevideos/site/${channel.parameters.siteId}/${channel.name.replace(/\s+/g, '')}`,
...(channel.tags && { tags: channel.tags }),
...(channel.alias && { alias: channel.alias }),
parent: channel.parent,
...(channel.hasLogo !== undefined && { hasLogo: channel.hasLogo }),
parameters: channel.parameters,
};
}
}, { concurrency: 5 });
await fs.promises.writeFile('./tcc.json', JSON.stringify(results, null, 4));
console.log('done!');
}
init();