-
Notifications
You must be signed in to change notification settings - Fork 469
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add Dmzj (#2555) * fixed kolnovel no text issue (#2559) * tapas novel addon (#2562) * batoto _getMangaFromURI fix (#2565) * scanmanga novel addition (#2558) * fixed rusian tag in novelcool-ru (#2566) * [Qimiaomh] add website support (#2560) * eslint with stricter rules for better code consistency (#2525) * [QImiaomh] retags (#2572) * [Migudm] add website support (#2569) * [Queensmanga] fix query (#2579) * add KanMan (#2563) * [Mangafast] add website support (#2580) * [mangakita] fixed manga title detection and image filtering (#2568) * Alphapolis (#2582) * add scansmangasxyz (#2575) * add cartoonmad (#2583) * [KissmangaORG] add website support (#2581) * lint that was missed on the lint update (#2588) * add manmanapp (#2587) * add 78te (#2590) * [asmhentai] fixed missing images (#2570) * [hatsukimanga] added website support (#2585) * [mangadex] updated json api (#2589) * [KanMan] retags (#2596) * [imhentai] added website support (#2597) * add toptoon (#2593) * add Mundomangakun (#2594) * add daysneo (#2601) * fixed the static json request Top toon (#2598) * [DM5] add website support (#2595) * add Hentai shark (#2592) * [MangaWorld] add website support (#2609) * [mangapill] added website support (#2603) * [mangacruzers] revise website as collection of (sub)domains (#2605) * add manmankan (#2604) * [Komiku] update getMangas (#2618) * [mangadex] fix group extraction due to json API change (#2623) * Changed image extraction on AsmHentai affiliates (#2616) * [vermangasporno] added website support (#2625) Co-authored-by: robo <30987265+Robonau@users.noreply.github.com> Co-authored-by: 09morbab <30987265+09morbab@users.noreply.github.com> Co-authored-by: Naufal Hakim <31276236+manh21@users.noreply.github.com>
- Loading branch information
1 parent
63beeec
commit 410c45e
Showing
111 changed files
with
1,595 additions
and
273 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import Connector from '../engine/Connector.mjs'; | ||
import Manga from '../engine/Manga.mjs'; | ||
|
||
export default class Alphapolis extends Connector { | ||
|
||
constructor() { | ||
super(); | ||
super.id = 'alphapolis'; | ||
super.label = 'ALPHAPOLIS (アルファポリス)'; | ||
this.tags = ['manga', 'japanese', 'hentai']; | ||
this.url = 'https://www.alphapolis.co.jp'; | ||
} | ||
|
||
async _getMangas() { | ||
let mangaList = []; | ||
const request = new Request(new URL('/manga/official/search', this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'span:last-child > a'); | ||
const pageCount = parseInt(data[0].href.match(/(\d)+$/)[1]); | ||
for(let page = 1; page <= pageCount; page++) { | ||
let mangas = await this._getMangasFromPage(page); | ||
mangaList.push(...mangas); | ||
} | ||
return mangaList; | ||
} | ||
|
||
async _getMangasFromPage(page) { | ||
const request = new Request(new URL(`/manga/official/search?page=${page}`, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'div.official-manga-panel > a'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element, this.url), | ||
title: element.querySelector('.title').textContent.replace('[R18]', '').trim() | ||
}; | ||
}); | ||
} | ||
|
||
async _getMangaFromURI(uri) { | ||
const request = new Request(uri, this.requestOptions); | ||
const data = await this.fetchDOM(request, 'div.manga-detail-description > div.title'); | ||
const id = uri.pathname + uri.search; | ||
const title = data[0].textContent.trim(); | ||
return new Manga(this, id, title); | ||
} | ||
|
||
async _getPages(chapter) { | ||
const script = ` | ||
var _0x5012=['WOrFCSkq','W4NdUfK=','WP1BFSkhWO0=','W78rE3vjW5lcHW==','W4tcU8kEWOlcUG==','W5vyvrddMxOTW6pcKG==','w0ldKCogeLVdGmkijCkedSkIDCkUwSk2WPxcQmoKWOjRjCkCWRCSgGm='];(function(_0x1225c6,_0x5012b3){var _0x5e03e4=function(_0x138c07){while(--_0x138c07){_0x1225c6['push'](_0x1225c6['shift']());}};_0x5e03e4(++_0x5012b3);}(_0x5012,0x11a));var _0x5e03=function(_0x1225c6,_0x5012b3){_0x1225c6=_0x1225c6-0x0;var _0x5e03e4=_0x5012[_0x1225c6];if(_0x5e03['eKfTmD']===undefined){var _0x138c07=function(_0x57a40b){var _0x350a78='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',_0x32282b=String(_0x57a40b)['replace'](/=+$/,'');var _0x4f83c6='';for(var _0x52bde4=0x0,_0x3eec1b,_0xbdcf31,_0x52be32=0x0;_0xbdcf31=_0x32282b['charAt'](_0x52be32++);~_0xbdcf31&&(_0x3eec1b=_0x52bde4%0x4?_0x3eec1b*0x40+_0xbdcf31:_0xbdcf31,_0x52bde4++%0x4)?_0x4f83c6+=String['fromCharCode'](0xff&_0x3eec1b>>(-0x2*_0x52bde4&0x6)):0x0){_0xbdcf31=_0x350a78['indexOf'](_0xbdcf31);}return _0x4f83c6;};var _0x48deab=function(_0x58d5e0,_0x479064){var _0x2b7425=[],_0x1e8dd5=0x0,_0x436c7a,_0x103faf='',_0x289431='';_0x58d5e0=_0x138c07(_0x58d5e0);for(var _0x471ec8=0x0,_0x1c67fe=_0x58d5e0['length'];_0x471ec8<_0x1c67fe;_0x471ec8++){_0x289431+='%'+('00'+_0x58d5e0['charCodeAt'](_0x471ec8)['toString'](0x10))['slice'](-0x2);}_0x58d5e0=decodeURIComponent(_0x289431);var _0x2dc407;for(_0x2dc407=0x0;_0x2dc407<0x100;_0x2dc407++){_0x2b7425[_0x2dc407]=_0x2dc407;}for(_0x2dc407=0x0;_0x2dc407<0x100;_0x2dc407++){_0x1e8dd5=(_0x1e8dd5+_0x2b7425[_0x2dc407]+_0x479064['charCodeAt'](_0x2dc407%_0x479064['length']))%0x100,_0x436c7a=_0x2b7425[_0x2dc407],_0x2b7425[_0x2dc407]=_0x2b7425[_0x1e8dd5],_0x2b7425[_0x1e8dd5]=_0x436c7a;}_0x2dc407=0x0,_0x1e8dd5=0x0;for(var _0x5f4041=0x0;_0x5f4041<_0x58d5e0['length'];_0x5f4041++){_0x2dc407=(_0x2dc407+0x1)%0x100,_0x1e8dd5=(_0x1e8dd5+_0x2b7425[_0x2dc407])%0x100,_0x436c7a=_0x2b7425[_0x2dc407],_0x2b7425[_0x2dc407]=_0x2b7425[_0x1e8dd5],_0x2b7425[_0x1e8dd5]=_0x436c7a,_0x103faf+=String['fromCharCode'](_0x58d5e0['charCodeAt'](_0x5f4041)^_0x2b7425[(_0x2b7425[_0x2dc407]+_0x2b7425[_0x1e8dd5])%0x100]);}return _0x103faf;};_0x5e03['YyIaTO']=_0x48deab,_0x5e03['hTxvhs']={},_0x5e03['eKfTmD']=!![];}var _0x309aea=_0x5e03['hTxvhs'][_0x1225c6];return _0x309aea===undefined?(_0x5e03['qLtoxU']===undefined&&(_0x5e03['qLtoxU']=!![]),_0x5e03e4=_0x5e03['YyIaTO'](_0x5e03e4,_0x5012b3),_0x5e03['hTxvhs'][_0x1225c6]=_0x5e03e4):_0x5e03e4=_0x309aea,_0x5e03e4;};var _0x34e597=_0x5e03;new Promise(_0x138c07=>_0x138c07($(_0x34e597('0x4','3O%j'))[_0x34e597('0x5','OenM')]()[_0x34e597('0x0','OenM')](/push.['"](http[^'"]+)['"]/g)[_0x34e597('0x6','yqs9')](_0x309aea=>_0x309aea[_0x34e597('0x2','z6Dy')]('\x22')[0x1][_0x34e597('0x1','WmhG')](/[0-9]+x[0-9]+/,_0x34e597('0x3','3chS'))))); | ||
`; | ||
const request = new Request(new URL(chapter.id, this.url), this.requestOptions); | ||
return await Engine.Request.fetchUI(request, script); | ||
} | ||
|
||
async _getChapters(manga) { | ||
const request = new Request(new URL(manga.id, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'div.episode-unit'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element.querySelector('a.read-episode'), this.url), | ||
title: element.querySelector('div.title').textContent.trim() | ||
}; | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import Connector from '../engine/Connector.mjs'; | ||
import Manga from '../engine/Manga.mjs'; | ||
|
||
export default class CarToonMad extends Connector { | ||
|
||
constructor() { | ||
super(); | ||
super.id = 'cartoonmad'; | ||
super.label = 'CarToonMad'; | ||
this.tags = ['manga', 'chinese']; | ||
this.url = 'https://www.cartoonmad.com'; | ||
this.requestOptions.headers.set('x-referer', this.url); | ||
} | ||
|
||
async _getMangas() { | ||
let mangaList = []; | ||
const request = new Request(new URL('/comic99.html', this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'td[align] > a:last-child.pages'); | ||
const pageCount = parseInt(data[0].href.match(/(\d+)\.html/)[1]); | ||
for(let page = 1; page <= pageCount; page++) { | ||
let mangas = await this._getMangasFromPage(page); | ||
mangaList.push(...mangas); | ||
} | ||
return mangaList; | ||
} | ||
|
||
async _getMangasFromPage(page) { | ||
const request = new Request(new URL('/comic99.'+String(page).padStart(2, '0')+'.html', this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'a.a1', 0, 'big5'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element, this.url), | ||
title: element.textContent.trim() | ||
}; | ||
}); | ||
} | ||
|
||
async _getMangaFromURI(uri) { | ||
const request = new Request(uri, this.requestOptions); | ||
const data = await this.fetchDOM(request, 'td:nth-child(2) tr:nth-child(3) > td:nth-child(2) > a:last-child', 0, 'big5'); | ||
const id = uri.pathname + uri.search; | ||
const title = data[0].textContent.trim(); | ||
return new Manga(this, id, title); | ||
} | ||
|
||
async _getChapters(manga) { | ||
const request = new Request(new URL(manga.id, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, '#info td > a', 0, 'big5'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element, this.url), | ||
title: element.textContent.trim() | ||
}; | ||
}); | ||
} | ||
|
||
async _getPages(chapter) { | ||
const request = new Request(new URL(chapter.id, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'body'); | ||
const maxpage = parseInt(data[0].querySelector('a:nth-last-of-type(2).pages').textContent); | ||
const pageone = data[0].querySelector('a > source[oncontextmenu]').src; | ||
return [...new Array(maxpage)].map((_, int) => pageone.replace(/(\d+)$/, String(int+1).padStart(3, '0'))); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
import Connector from '../engine/Connector.mjs'; | ||
import Manga from '../engine/Manga.mjs'; | ||
|
||
export default class Daysneo extends Connector { | ||
|
||
constructor() { | ||
super(); | ||
super.id = 'daysneo'; | ||
super.label = 'daysneo'; | ||
this.tags = ['manga', 'japanese', 'hentai']; | ||
this.url = 'https://daysneo.com'; | ||
} | ||
|
||
async _getMangas() { | ||
let mangaList = []; | ||
for(let page = 1, run = true; run; page++) { | ||
let mangas = await this._getMangasFromPage(page); | ||
mangas.length > 0 ? mangaList.push(...mangas) : run = false; | ||
} | ||
return mangaList; | ||
} | ||
|
||
async _getMangasFromPage(page) { | ||
const request = new Request(new URL(`/search/?page_num=${page}`, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'strong > a'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element, request.url), | ||
title: element.text.trim() | ||
}; | ||
}); | ||
} | ||
|
||
async _getMangaFromURI(uri) { | ||
const request = new Request(uri, this.requestOptions); | ||
const data = await this.fetchDOM(request, 'p.f150.b'); | ||
const id = uri.pathname + uri.search; | ||
const title = data[0].textContent.trim(); | ||
return new Manga(this, id, title); | ||
} | ||
|
||
async _getPages(chapter) { | ||
const request = new Request(new URL(chapter.id, this.url), this.requestOptions); | ||
const data = await this.fetchRegex(request, /src="([^"]*)">'\);/g); | ||
return data.map(image => this.getAbsolutePath(image, request.url)); | ||
} | ||
|
||
async _getChapters(manga) { | ||
const request = new Request(new URL(manga.id, this.url), this.requestOptions); | ||
const data = await this.fetchDOM(request, 'strong > a'); | ||
return data.map(element => { | ||
return { | ||
id: this.getRootRelativeOrAbsoluteLink(element, this.url), | ||
title: element.textContent.trim() | ||
}; | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.