jul11co-mangadl
Version:
Jul11co Web Manga Downloader
271 lines (224 loc) • 8.61 kB
JavaScript
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;
}
}