UNPKG

manga-parser

Version:
267 lines (220 loc) 6.28 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _utils = require('../utils'); var _abstractCatalog = require('../abstract-catalog'); var _abstractCatalog2 = _interopRequireDefault(_abstractCatalog); var _models = require('../models'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class ReadMangaToday extends _abstractCatalog2.default { constructor() { super(); this.name = 'ReadMangaToday'; this.catalogName = 'readmangatoday'; this.baseUrl = 'http://www.readmanga.today'; this.lang = _abstractCatalog.LANGUAGE_EN; } /** * @param {number} page * @returns {string} */ popularMangaRequest(page) { return `${this.baseUrl}/hot-manga/${(0, _utils.toString)(page)}`; } /** * @param $ * @returns {Array.<Manga>} */ popularMangaList($) { let mangas = []; let provider = this; $('div.hot-manga > div.style-list > div.box').each((i, elem) => { let manga = this.extractMangaSummary($, elem, provider.getNextIndex()); mangas.push(manga); }); return mangas; } /** * @param $ * @returns {{hasNext: boolean, nextUrl: string, nextPage: ?number}} */ popularMangaPaginator($) { let pagination = $('div.hot-manga > ul.pagination > li > a:contains(»)'); let nextPage = null; if (pagination.length) { nextPage = pagination.attr('href').match(/hot-manga\/(\d+)/); if (nextPage && nextPage.length) { nextPage = parseInt(nextPage[1]); } } return { hasNext: Boolean(pagination.length), nextUrl: pagination.attr('href'), nextPage: nextPage }; } /** * @param {number} page * @returns {string} */ latestUpdatesRequest(page) { return `${this.baseUrl}/latest-releases/${(0, _utils.toString)(page)}`; } /** * @param $ * @returns {Array.<Manga>} */ latestUpdatesList($) { let mangas = []; $('div.hot-manga > div.style-grid > div.box').each((i, elem) => { let manga = this.extractMangaSummary($, elem, Infinity); mangas.push(manga); }); return mangas; } /** * @param $ * @returns {{hasNext: boolean, nextUrl: string, nextPage: ?number}} */ latestUpdatesPaginator($) { let pagination = $('div.hot-manga > ul.pagination > li > a:contains(»)'); let nextPage = null; if (pagination.length) { nextPage = pagination.attr('href').match(/latest-releases\/(\d+)/); if (nextPage && nextPage.length) { nextPage = parseInt(nextPage[1]); } } return { hasNext: Boolean(pagination.length), nextUrl: pagination.attr('href'), nextPage: nextPage }; } /** * @param $ * @param manga * @returns {Manga} */ mangaDetail($, manga) { let container = $('div.content-list').first(); manga.author = (0, _utils.trimSpaces)(container.find('ul.cast-list li.director > ul a').text()); manga.artist = (0, _utils.trimSpaces)(container.find('ul.cast-list li:not(.director) > ul a').text()); manga.genre = (0, _utils.trimSpaces)(container.find('dl.dl-horizontal > dd').eq(2).text()); manga.description = (0, _utils.trimSpaces)(container.find('li.movie-detail').text()); manga.status = this.parseStatus((0, _utils.trimSpaces)(container.find('dl.dl-horizontal > dd').eq(1).text())); manga.setThumbnailUrl(container.find('img.img-responsive').attr('src')); manga.detailsFetched = true; return manga; } /** * @private * @param {string} status * @returns {string} */ parseStatus(status) { if (status.indexOf('Ongoing') > -1) { return _models.STATUS_ONGOING; } else if (status.indexOf('Completed') > -1) { return _models.STATUS_COMPLETED; } return _models.STATUS_UNKNOWN; } /** * @param $ * @returns {Array} */ chapterList($) { let chapters = []; $('ul.chp_lst > li').each((i, elem) => { let chapter = new _models.Chapter(); chapter.setUrl($(elem).find('a').first().attr('href')); chapter.title = (0, _utils.trimSpaces)($(elem).find('a').first().find('span.val').text()); chapter.publishedAt = (0, _utils.parseDateAgo)((0, _utils.trimSpaces)($(elem).find('span.dte').first().text())); chapter.generateId(); chapters.push(chapter); }); return chapters; } /** * @param $ * @returns {Array} */ pageList($) { let pages = []; let options = $('ul.list-switcher-2 > li > select.jump-menu').first().find('option'); options.each((i, elem) => { let page = $(elem).attr('value'); pages.push((0, _utils.sanitizeUrlProtocol)(page)); }); return pages; } /** * @param $ * @returns {string} */ imageUrl($) { return $('img.img-responsive-2').first().attr('src'); } /** * @param query * @param page * @returns {{url: string, headers: any, method: string, form: any}} */ searchOptions(query, page) { return { url: `${this.baseUrl}/service/advanced_search`, headers: { 'X-Requested-With': 'XMLHttpRequest' }, method: 'POST', form: { type: 'all', status: 'both', 'manga-name': query } }; } /** * @param $ * @returns {Array} */ search($) { let mangas = []; $('div.style-list > div.box').each((i, elem) => { let manga = this.extractMangaSummary($, elem, Infinity); mangas.push(manga); }); return mangas; } /** * @param $ * @returns {{ hasNext: boolean, nextUrl: ?string, nextPage: ?number }} */ searchPaginator($) { return { hasNext: false, nextUrl: null, nextPage: null }; } /** * @param $ * @param elem * @param catalogId * @returns {Manga} */ extractMangaSummary($, elem, catalogId) { let manga = new _models.Manga(); let link = $(elem).find('div.title > h2 > a'); manga.setUrl(link.attr('href')); manga.title = (0, _utils.trimSpaces)(link.attr('title')); manga.setThumbnailUrl($(elem).find('img').attr('src')); manga.catalogId = catalogId; manga.catalog = this.catalogName; manga.generateId(); return manga; } } exports.default = new ReadMangaToday();