From 18286a58a7d94687e5a9227a00dc27a15fdcd26b Mon Sep 17 00:00:00 2001 From: Felipe Bonfim Date: Mon, 15 Jul 2024 01:53:46 -0400 Subject: [PATCH] feat: Add Novel Mania (#1058) * added Novel Mania Brazilian Portuguese * added image Novel Mania Brazilian Portuguese --- public/static/src/pt-br/novelmania.png | Bin 0 -> 18242 bytes src/plugins/portuguese/novelmania.ts | 226 +++++++++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 public/static/src/pt-br/novelmania.png create mode 100644 src/plugins/portuguese/novelmania.ts diff --git a/public/static/src/pt-br/novelmania.png b/public/static/src/pt-br/novelmania.png new file mode 100644 index 0000000000000000000000000000000000000000..b40606fa1303764f431c18f627ed34d2f2a6e201 GIT binary patch literal 18242 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 U;_xZX8K?odI(s=a9mb{p4GALK`v3p{ literal 0 HcmV?d00001 diff --git a/src/plugins/portuguese/novelmania.ts b/src/plugins/portuguese/novelmania.ts new file mode 100644 index 0000000..117db96 --- /dev/null +++ b/src/plugins/portuguese/novelmania.ts @@ -0,0 +1,226 @@ +import { fetchApi } from '@libs/fetch'; +import { Plugin } from '@typings/plugin'; +import { Filters, FilterTypes } from '@libs/filterInputs'; +import { load as parseHTML } from 'cheerio'; +import { defaultCover } from '@libs/defaultCover'; +import { NovelStatus } from '@libs/novelStatus'; + +class NovelMania implements Plugin.PluginBase { + id = 'novelmania.com.br'; + name = 'Novel Mania'; + icon = 'src/pt-br/novelmania.png'; + site = 'https://novelmania.com.br'; + version = '1.0.0'; + imageRequestInit?: Plugin.ImageRequestInit | undefined = undefined; + + async popularNovels( + pageNo: number, + { filters }: Plugin.PopularNovelsOptions, + ): Promise { + let url = `${this.site}/novels?titulo=`; + url += `&categoria=${filters?.genres.value}`; + url += `&status=${filters?.status.value}`; + url += `&nacionalidade=${filters?.type.value}`; + url += `&ordem=${filters?.ordem.value}`; + url += `&page=${pageNo}`; + + const body = await fetchApi(url).then(res => res.text()); + + const loadedCheerio = parseHTML(body); + const load = loadedCheerio('div.top-novels.dark.col-6 > div.row.mb-2'); + + const novels: Plugin.NovelItem[] = load + .map((index, element) => ({ + name: loadedCheerio(element).find('a.novel-title > h5').text(), + cover: loadedCheerio(element) + .find('a > div.card.c-size-1.border > img.card-image') + .attr('src'), + path: loadedCheerio(element).find('a.novel-title').attr('href') || '', + })) + .get() + .filter(novel => novel.name && novel.path); + return novels; + } + async parseNovel(novelPath: string): Promise { + const body = await fetchApi(this.site + novelPath).then(r => r.text()); + const loadedCheerio = parseHTML(body); + + const novel: Plugin.SourceNovel = { + path: novelPath, + name: + loadedCheerio( + 'div.col-md-8 > div.novel-info > div.d-flex.flex-row.align-items-center > h1', + ) + .text() + .trim() || 'Sem título', + }; + + loadedCheerio('b').remove(); + + novel.name = + loadedCheerio( + 'div.col-md-8 > div.novel-info > div.d-flex.flex-row.align-items-center > h1', + ) + .text() + .trim() || 'Sem título'; + novel.summary = + loadedCheerio('div.tab-pane.fade.show.active > div.text > p') + .text() + .trim() || ''; + novel.cover = + loadedCheerio('div.novel-img > img.img-responsive').attr('src') || + defaultCover; + novel.author = loadedCheerio('div.novel-info > span.authors.mb-1') + .text() + .trim(); + novel.genres = loadedCheerio('div.tags > ul.list-tags.mb-0 > li > a') + .map((i, el) => loadedCheerio(el).text()) + .toArray() + .join(','); + + const status = loadedCheerio('div.novel-info > span.authors.mb-3') + .text() + .trim(); + switch (status) { + case 'Ativo': + novel.status = NovelStatus.Ongoing; + break; + case 'Pausado': + novel.status = NovelStatus.OnHiatus; + break; + case 'Completo': + novel.status = NovelStatus.Completed; + break; + default: + novel.status = NovelStatus.Unknown; + } + + const chapters: Plugin.ChapterItem[] = []; + + loadedCheerio( + 'div.accordion.capitulo > div.card > div.collapse > div.card-body.p-0 > ol > li', + ).each((i, el) => { + const chapterName = `${loadedCheerio(el).find('a > span.sub-vol').text().trim()} - ${loadedCheerio(el).find('a > strong').text().trim()}`; + const chapterPath = loadedCheerio(el).find('a').attr('href'); + if (chapterPath) chapters.push({ name: chapterName, path: chapterPath }); + }); + novel.chapters = chapters; + return novel; + } + async parseChapter(chapterPath: string): Promise { + const response = await fetchApi(`${this.site}${chapterPath}`).then(res => + res.text(), + ); + const loadedCheerio = parseHTML(response); + return loadedCheerio('div#chapter-content').html() || ''; + } + async searchNovels( + searchTerm: string, + pageNo: number, + ): Promise { + const url = `${this.site}/novels?titulo=${searchTerm}&page=${pageNo}`; + const body = await fetchApi(url).then(res => res.text()); + const loadedCheerio = parseHTML(body); + const load = loadedCheerio('div.top-novels.dark.col-6 > div.row.mb-2'); + + const novels: Plugin.NovelItem[] = load + .map((index, element) => ({ + name: loadedCheerio(element).find('a.novel-title > h5').text(), + cover: loadedCheerio(element) + .find('a > div.card.c-size-1.border > img.card-image') + .attr('src'), + path: loadedCheerio(element).find('a.novel-title').attr('href') || '', + })) + .get() + .filter(novel => novel.name && novel.path); + return novels; + + return novels; + } + + resolveUrl = (path: string, isNovel?: boolean) => + this.site + (isNovel ? '/book/' : '/chapter/') + path; + + filters = { + genres: { + value: '', + label: 'Gêneros', + options: [ + { label: 'Todos', value: '' }, + { label: 'Ação', value: '01' }, + { label: 'Adulto', value: '02' }, + { label: 'Artes Marciais', value: '07' }, + { label: 'Aventura', value: '03' }, + { label: 'Comédia', value: '04' }, + { label: 'Cotidiano', value: '16' }, + { label: 'Drama', value: '23' }, + { label: 'Ecchi', value: '27' }, + { label: 'Erótico', value: '22' }, + { label: 'Escolar', value: '13' }, + { label: 'Fantasia', value: '05' }, + { label: 'Harém', value: '21' }, + { label: 'Isekai', value: '30' }, + { label: 'Magia', value: '26' }, + { label: 'Mecha', value: '08' }, + { label: 'Medieval', value: '31' }, + { label: 'Militar', value: '24' }, + { label: 'Mistério', value: '09' }, + { label: 'Mitologia', value: '10' }, + { label: 'Psicológico', value: '11' }, + { label: 'Realidade Virtual', value: '36' }, + { label: 'Romance', value: '12' }, + { label: 'Sci-fi', value: '14' }, + { label: 'Sistema de Jogo', value: '15' }, + { label: 'Sobrenatural', value: '17' }, + { label: 'Suspense', value: '29' }, + { label: 'Terror', value: '06' }, + { label: 'Wuxia', value: '18' }, + { label: 'Xianxia', value: '19' }, + { label: 'Xuanhuan', value: '20' }, + { label: 'Yaoi', value: '35' }, + { label: 'Yuri', value: '37' }, + ], + type: FilterTypes.Picker, + }, + status: { + label: 'Status', + value: '', + options: [ + { label: 'Todos', value: '' }, + { label: 'Ativo', value: 'ativo' }, + { label: 'Completo', value: 'Completo' }, + { label: 'Pausado', value: 'pausado' }, + { label: 'Parado', value: 'Parado' }, + ], + type: FilterTypes.Picker, + }, + type: { + label: 'Type', + value: '', + options: [ + { label: 'Todas', value: '' }, + { label: 'Americana', value: 'americana' }, + { label: 'Angolana', value: 'angolana' }, + { label: 'Brasileira', value: 'brasileira' }, + { label: 'Chinesa', value: 'chinesa' }, + { label: 'Coreana', value: 'coreana' }, + { label: 'Japonesa', value: 'japonesa' }, + ], + type: FilterTypes.Picker, + }, + ordem: { + label: 'Ordenar', + value: '', + options: [ + { label: 'Qualquer ordem', value: '' }, + { label: 'Ordem alfabética', value: '1' }, + { label: 'Nº de Capítulos', value: '2' }, + { label: 'Popularidade', value: '3' }, + { label: 'Novidades', value: '4' }, + ], + type: FilterTypes.Picker, + }, + } satisfies Filters; +} + +export default new NovelMania();