@rexxhayanasi/nhentai
Version:
A scraper for NHentai with types
95 lines (94 loc) • 4.05 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseDoujinInfo = void 0;
const lib_1 = require("../lib");
const parseDoujinInfo = ($, site, api_pages) => __awaiter(void 0, void 0, void 0, function* () {
const pages = [];
const gallery_id = ($('.thumb-container').first().find('a > img').attr('data-src') ||
'/galleries/')
.split('/galleries/')[1]
.split('/')[0];
if (site === 'net' && api_pages)
api_pages.forEach((page, i) => pages.push(`https://i.nhentai.net/galleries/${gallery_id}/${i + 1}.${(0, lib_1.getExtension)(page.t)}`));
else
for (const el of $('.thumb-container')) {
const url = ($(el).find('a > img').attr('data-src') || '').replace(/t(?=\.)/, '');
if (url) {
const page = url.replace(lib_1.imageSites[site], 'i.nhentai.net');
const status = yield (0, lib_1.getPageStatus)(page);
pages.push(status === 200 ? page : url);
}
}
const cover = $('#cover').find('a > img').attr('data-src') ||
$('#cover').find('a > img').attr('src');
const id = ($('#cover').find('a').attr('href') || 'g/')
.split('g/')[1]
.split('/')[0];
const titles = {
english: $('#info').find('h1').text().trim(),
original: $('#info').find('h2').text().trim()
};
const baseURL = lib_1.baseURLS[site];
const parodies = [];
const characters = [];
const tags = [];
const artists = [];
const groups = [];
const languages = [];
const categories = [];
$('.tag-container.field-name').each((i, el) => {
const type = $(el).text().trim().toLowerCase();
const contents = [];
const push = (field) => contents
.filter((content) => content !== '')
.forEach((content) => field.push(content));
$(el)
.find('.tags')
.find('a')
.each((i, el) => {
contents.push($(el).text().trim().split('\n')[0]);
});
type.startsWith('parodies')
? push(parodies)
: type.startsWith('characters')
? push(characters)
: type.startsWith('tags')
? push(tags)
: type.startsWith('artists')
? push(artists)
: type.startsWith('groups')
? push(groups)
: type.startsWith('languages')
? push(languages)
: push(categories);
});
const url = `${baseURL}/g/${id}`;
const images = new lib_1.Pages(pages, titles.english);
return {
id,
title: titles.english,
originalTitle: titles.original,
parodies: (0, lib_1.clean)(parodies),
characters: (0, lib_1.clean)(characters),
tags: (0, lib_1.clean)(tags),
artists: (0, lib_1.clean)(artists),
groups: (0, lib_1.clean)(groups),
languages: (0, lib_1.clean)(languages),
categories: (0, lib_1.clean)(categories),
cover: !pages.some(url => url.includes('cdn.dogehls.xyz'))
? cover.replace('cdn.dogehls.xyz', 't3.nhentai.net')
: null,
images,
url
};
});
exports.parseDoujinInfo = parseDoujinInfo;