UNPKG

@rexxhayanasi/nhentai

Version:

A scraper for NHentai with types

95 lines (94 loc) 4.05 kB
"use strict"; 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;