jul11co-mangadl
Version:
Jul11co Web Manga Downloader
288 lines (246 loc) • 10.2 kB
JavaScript
var path = require('path');
var urlutil = require('url');
var moment = require('moment');
var utils = require('jul11co-wdt').Utils;
module.exports = {
name: 'HentaiVN',
website: 'http://hentaivn.net',
match: function(link, options) {
return /hentaivn\.net/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, 'HentaiVN');
saver.setMangaOutputDir(options.output_dir);
}
if ($('div#image').length) {
var chapter_url = page.url;
var chapter_title = page.title;
chapter_title = utils.replaceAll(chapter_title, 'Xem Hentai Sex: ','').trim();
var chapter_images = saver.getImages($, page, 'div#image');
if (options.debug) console.log(chapter_images);
var chapter_url_obj = urlutil.parse(chapter_url);
// var output_dir_name = path.basename(chapter_url_obj.pathname,'.html');
var output_dir_name = chapter_title;
var output_dir = path.join(options.output_dir, output_dir_name);
options.max_download_threads = 1;
saver.downloadMangaChapter({
chapter_url: page.url,
chapter_title: chapter_title,
chapter_images: chapter_images,
output_dir: output_dir,
output_dir_name: output_dir_name
}, options, callback);
} else if ($('table.listing').length) {
console.log('----');
console.log('Manga page: ' + page.url);
// var manga_title = $('.page-info h2').first().text().trim();
// var manga_title = page.title.split('|')[0].trim();
// manga_title = utils.replaceAll(manga_title, 'Truyện Hentai: ','').trim();
// var manga_title = $('.page-info h2[itemprop="name"] a').first().text().trim();
var manga_title = $('.page-ava img[rel="image_src"]').attr('title')
.replace('Truyện hentai','').trim();
manga_title = utils.replaceAll(manga_title, '/', '-');
manga_title = utils.replaceAll(manga_title, ':', ' -');
console.log('Manga title: ' + manga_title);
// console.log('Chapter list');
if (options.auto_manga_dir && !options.batch_download) {
options.output_dir = path.join(options.output_dir, manga_title);
saver.setMangaOutputDir(options.output_dir);
} else if (/*options.auto_manga_dir && */options.batch_download) {
var manga_output_dir = path.join(options.batch_output_dir, manga_title);
saver.deleteStateData(page.url);
saver.setMangaOutputDir(manga_output_dir, {save_old_state: true});
options.output_dir = manga_output_dir;
}
if (saver.isDone(page.url) && !options.refresh_info) {
return callback();
}
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);
}
var chapter_links = saver.getLinks($, page, 'table.listing');
saver.downloadMangaChapters(chapter_links, options, callback);
} else if ($('li.item .box-cover a').length) {
options.paging_links = options.paging_links || {};
if (options.paging_links[page.url]) {
return callback();
}
options.paging_links[page.url] = 1;
console.log('-----');
console.log('Manga list: ' + page.url);
options.batch_download = true;
if (!options.batch_url) {
options.batch_url = page.url;
}
if (!options.batch_output_dir) {
options.batch_output_dir = options.output_dir;
}
if (options.batch_output_dir != options.output_dir) {
saver.deleteStateData(page.url);
saver.setMangaOutputDir(options.batch_output_dir, {save_old_state: true});
options.output_dir = options.batch_output_dir;
}
if (!saver.getStateData('url')) {
saver.updateStateData('url', page.url);
}
var manga_links = saver.getLinks($, page, 'li.item .box-cover', {
// filters: ['/read/']
});
var paging_links = saver.getLinks($, page, '.pagination');
saver.downloadMangaList(manga_links, options, function(err) {
if (err) return callback(err);
saver.setMangaOutputDir(options.batch_output_dir, {save_old_state: true});
options.output_dir = options.batch_output_dir;
manga_links.forEach(function(link) {
if (!saver.isVisited(link)) saver.setVisited(link);
});
saver.setStateData('last_update', new Date());
if (options.all_pages && paging_links.length > 0) {
if (options.refresh_info) {
paging_links = paging_links.filter(function(link) {
return !options.paging_links[link];
});
paging_links.forEach(function(link) {
saver.updateStateData(link, {visited: 0});
});
} else {
paging_links = paging_links.filter(function(link) {
return !saver.isVisited(link);
});
}
saver.processPages(paging_links, options, callback);
} else {
callback();
}
});
} else {
callback();
}
},
getMangaInfo: function($, page, options) {
var manga_info = {};
if ($('#chuong').length) {
manga_info.url = page.url;
// manga_info.name = $('.page-info h2[itemprop="name"] a').first().text().trim();
manga_info.name = $('.page-ava img[rel="image_src"]').attr('title').replace('Truyện hentai','').trim();
manga_info.cover_image = $('.page-ava img[rel="image_src"]').attr('src');
if (manga_info.cover_image && manga_info.cover_image.indexOf('/') == 0) {
manga_info.cover_image = 'https://hentaivn.net' + manga_info.cover_image;
}
// manga_info.description = $('.manga-detail .detail .content').text().trim();
var manga_status_map = {
'Đã Hoàn Thành': 'Completed',
'Đang Tiến Hành': 'Ongoing',
'Tạm Ngưng': 'Suspended'
};
var info = {};
var info_arrays = [];
$('.page-info p span.info').each(function() {
var $key = $(this);
var key = $key.text().trim();
if (!key) return;
if (key == 'Tên Khác:') {
var alt_names = [];
$key.parent().find('a').each(function() {
var alt_name = $(this).text().trim();
if (alt_name) alt_names.push(alt_name);
});
if (alt_names.length) manga_info.alt_names = alt_names;
} else if (key == 'Thể Loại:') {
var tags = [];
var tag_names = [];
$key.parent().find('a.tag').each(function() {
var tag_name = $(this).text().trim();
if (tag_name && tag_names.indexOf(tag_name) == -1) {
tag_names.push(tag_name);
tags.push({
name: tag_name,
url: $(this).attr('href')
});
}
});
if (tags.length) manga_info.tags = tags;
} else if (key == 'Tác giả:') {
var authors = [];
$key.parent().find('a').each(function() {
authors.push({
name: $(this).text().trim(),
url: $(this).attr('href')
});
});
if (authors.length) manga_info.authors = authors;
} else if (key == 'Nhân vật:') {
var characters = [];
$key.parent().find('a').each(function() {
characters.push({
name: $(this).text().trim(),
url: $(this).attr('href')
});
});
if (characters.length) manga_info.characters = characters;
} else if (key == 'Doujinshi:') {
var parodies = [];
$key.parent().find('a').each(function() {
parodies.push({
name: $(this).text().trim(),
url: $(this).attr('href')
});
});
if (parodies.length) manga_info.parodies = parodies;
} else if (key == 'Nhóm dịch:') {
var groups = [];
$key.parent().find('a').each(function() {
groups.push({
name: $(this).text().trim(),
url: $(this).attr('href')
});
});
if (groups.length) manga_info.groups = groups;
} else if (key == 'Tình Trạng:') {
var status = $(this).next('span').text().trim();
if (status) manga_info.status = manga_status_map[status] || status;
}
});
var manga_chapters = [];
if ($('table.listing tr').length) {
$('table.listing tr').each(function() {
var chapter = {
url: $(this).find('a').attr('href'),
title: $(this).find('a').text().trim()
}
var added_str = $(this).find('td').eq(1);
var added_moment = moment(added_str, 'DD/MM/YYYY');
if (added_moment.isValid()) {
chapter.added = added_moment.toDate();
}
manga_chapters.push(chapter);
});
if (manga_chapters.length == 1) {
manga_info.read_url = manga_chapters[0].url;
}
}
manga_info.chapter_count = manga_chapters.length;
if (options.include_chapters || options.with_chapters) {
manga_info.chapters = manga_chapters;
}
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;
}
}