UNPKG

jul11co-mangadl

Version:
271 lines (224 loc) 8.61 kB
var path = require('path'); var moment = require('moment'); var utils = require('jul11co-wdt').Utils; var number_of_frontends = 2; function getSubdomainFromGalleryid(gallery_id, base) { base = base || 'a'; return String.fromCharCode(97 + (gallery_id % number_of_frontends)) + base; } var adapose = false; var number_of_frontends = 2; function subdomain_from_galleryid(g) { if (adapose) { return '0'; } var o = g % number_of_frontends; return String.fromCharCode(97 + o); } function subdomain_from_url(url, base) { var retval = 'a'; if (base) { retval = base; } var r = /\/\d*(\d)\//; var m = r.exec(url); if (!m) { return retval; } var g = parseInt(m[1], 10); if (isNaN(g)) { return retval; } if (g === 1) { g = 0; } retval = subdomain_from_galleryid(g) + retval; return retval; } function url_from_url(url, base) { return url.replace(/\/\/..?\.hitomi\.la\//, '//'+subdomain_from_url(url, base)+'.hitomi.la/'); } module.exports = { name: 'Hitomi.LA', website: 'http://hitomi.la', match: function(link, options) { return /hitomi\.la\//g.test(link); }, dispatch: function(saver, $, page, options, callback) { if (options.group_by_site && !options.orig_output_dir) { options.orig_output_dir = options.output_dir; options.output_dir = path.join(options.output_dir, 'Hitomi.LA'); saver.setMangaOutputDir(options.output_dir); } // saver.saveHtmlFile($, page, options); if (/hitomi\.la\/galleries\//g.test(page.url) && $('div.gallery').length) { console.log('----'); console.log('Manga page: ' + page.url); var manga_title = $('div.gallery h1').first().text().trim(); var manga_output_dir = utils.replaceAll(manga_title, '/', '-'); console.log('Manga title: ' + manga_title); if (options.auto_manga_dir) { options.output_dir = path.join(options.output_dir, manga_output_dir); saver.setMangaOutputDir(options.output_dir); } saver.setStateData('url', page.url); if (options.save_index_html) { saver.saveHtmlSync(path.join(options.output_dir, 'index.html'), $.html()); } var manga_info = this.getMangaInfo($, page, options); if (manga_info && manga_info.url) { saver.saveJsonSync(path.join(options.output_dir, 'manga.json'), manga_info); } options.chapter_url = page.url; var gallery_id = path.basename(page.url, '.html'); // console.log('Gallery ID:', gallery_id); var chapter_links = [ 'https://hitomi.la/reader/' + gallery_id + '.html' ] saver.downloadMangaChapters(chapter_links, options, callback); } else if (/hitomi\.la\/reader\//g.test(page.url) && $('#preload').length) { var gallery_id = page.url.replace('https://hitomi.la/reader/','').split('/')[0]; gallery_id = parseInt(gallery_id); var image_subdomain = getSubdomainFromGalleryid(gallery_id); var chapter_title = page.title.split('|')[0].trim(); // Get images on current page var chapter_images = []; $('div.img-url').each(function() { var image_url = 'https:' + $(this).text(); image_url = url_from_url(image_url); // image_url = image_url.replace('https://g', 'https://' + image_subdomain); chapter_images.push({ src: image_url, file: path.basename(image_url) }); }); if (options.debug) console.log(chapter_images); var chapter_output_dir = ''; if (path.basename(options.output_dir) == path.basename(page.output_dir, '.html')) { chapter_output_dir = options.output_dir; } else { chapter_output_dir = path.join(options.output_dir, path.basename(page.output_dir, '.html')); } options.request_headers = { "Referer": 'https://hitomi.la/', "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0" }; saver.downloadMangaChapter({ chapter_url: page.url, chapter_title: chapter_title, chapter_images: chapter_images, output_dir: chapter_output_dir }, options, callback); } else { callback(); } }, getMangaInfo: function($, page, options) { var manga_info = {}; if ($('.thumbnail-list').length) { manga_info.url = page.url; manga_info.name = $('.gallery h1 a').text().trim(); manga_info.cover_image = $('.cover img').first().attr('src'); // manga_info.description = $('.manga-detail .detail .content').text().trim(); manga_info.authors = []; $('.gallery h2').first().find('a').each(function() { manga_info.authors.push({ name: $(this).text().trim(), url: $(this).attr('href') }); }); $('.gallery-info table tr').each(function() { var $key = $(this).find('td').first(); var key = $key.text().trim(); if (key && key != '') { if (key == 'Group') { manga_info.groups = manga_info.groups || []; $key.parent().find('a').each(function() { manga_info.groups.push({ name: $(this).text().trim(), url: $(this).attr('href') }); }); } else if (key == 'Language') { manga_info.language = { name: $key.parent().find('a').text().trim(), url: $key.parent().find('a').attr('href') }; } else if (key == 'Type') { var type_name = $key.parent().find('a').text().trim(); if (type_name) { manga_info.categories = manga_info.categories || []; manga_info.categories.push({ name: type_name, url: $key.parent().find('a').attr('href') }) } } else if (key == 'Series') { manga_info.parodies = manga_info.parodies || []; $key.parent().find('a').each(function() { manga_info.parodies.push({ name: $(this).text().trim(), url: $(this).attr('href') }); }); } else if (key == 'Characters') { var characters = []; $key.parent().find('a').each(function() { var char_name = $(this).text().trim(); if (char_name != '-') { // characters.push(char_name); characters.push({ name: char_name, url: $(this).attr('href') }); } }); if (characters.length) manga_info.characters = characters; } else if (key == 'Tags') { var tags = []; $key.parent().find('a').each(function() { var tag = $(this).text().trim(); tag = utils.replaceAll(tag, ' ♀', ''); tag = utils.replaceAll(tag, ' ♂', ''); tags.push({ name: tag.trim(), url: $(this).attr('href') }); }); if (tags.length) manga_info.tags = tags; } } }); // var added_date = $('.gallery-info span.date').text().trim(); // console.log('Added Date:', added_date); // var added_moment = moment(added_date, 'MMM D, YYYY hh:mm A'); // if (added_moment.isValid()) { // manga_info.added = added_moment.toDate(); // } var gallery_id = path.basename(page.url, '.html'); // console.log('Gallery ID:', gallery_id); manga_info.read_url = 'https://hitomi.la/reader/' + gallery_id + '.html'; if (options.with_chapters) { manga_info.chapter_url = 'https://hitomi.la/reader/' + gallery_id + '.html'; manga_info.chapter_title = manga_info.name; manga_info.chapters = []; manga_info.chapters.push({ url: 'https://hitomi.la/reader/' + gallery_id + '.html', title: manga_info.name }); } manga_info.chapter_count = 1; if (options.verbose) { console.log('Manga:'); console.log(' Name:', manga_info.name); console.log(' Cover image:', manga_info.cover_image); // console.log(' Description:', manga_info.description); console.log(' Authors:', manga_info.authors); console.log(' Genres:', manga_info.genres); console.log(' Status:', manga_info.status); console.log(' Chapter count:', manga_info.chapter_count); } } return manga_info; } }