From c22979b10f8e9c7e2df0ab6de043753a3f7c550b Mon Sep 17 00:00:00 2001 From: K1ngfish3r Date: Sat, 23 Mar 2024 13:37:40 +0800 Subject: [PATCH] Update faqwikius.ts (#850) * Update faqwikius.ts * fix id and faqwiki * wrong branch --- plugins/english/faqwikius.ts | 37 ++++++++++++++++++++++++++---- plugins/indonesian/indowebnovel.ts | 18 +++++++++------ plugins/indonesian/sakuranovel.ts | 23 +++++++++++-------- 3 files changed, 57 insertions(+), 21 deletions(-) diff --git a/plugins/english/faqwikius.ts b/plugins/english/faqwikius.ts index be9b4be..92f79d5 100644 --- a/plugins/english/faqwikius.ts +++ b/plugins/english/faqwikius.ts @@ -1,12 +1,13 @@ import { Plugin } from "@typings/plugin"; import { fetchApi, fetchFile } from "@libs/fetch"; import { CheerioAPI, load as parseHTML } from "cheerio"; +import { NovelStatus } from "@libs/novelStatus"; class FaqWikiUs implements Plugin.PluginBase { id = "FWK.US"; name = "Faq Wiki"; site = "https://faqwiki.us/"; - version = "1.1.0"; + version = "1.1.1"; icon = "src/en/faqwikius/icon.png"; parseNovels(loadedCheerio:CheerioAPI, searchTerm?: string) { @@ -18,10 +19,12 @@ class FaqWikiUs implements Plugin.PluginBase { // Remove the appended query string if (cover) { - cover = cover.replace(/\?ezimgfmt=.*$/, ''); // Regular expression magic! + cover = cover.replace(/\?ezimgfmt=.*$/, ''); // Regular expression magic! + } else { + cover = loadedCheerio(element).find("img").attr("src"); } - const path = loadedCheerio(element).find("a").attr("href")?.slice(this.site.length); + const path = loadedCheerio(element).find("a").attr("href")?.replace('tp:', 'tps:')?.slice(this.site.length); if (!path) return; novels.push({ name, cover, path }); @@ -58,9 +61,33 @@ class FaqWikiUs implements Plugin.PluginBase { novel.name = loadedCheerio(".entry-title").text().replace("Novel – All Chapters", "").trim(); - novel.cover = loadedCheerio(".wp-block-image").find("img").attr("src"); + novel.cover = loadedCheerio(".wp-block-image") + .find("img") + .attr("data-ezsrc") + ?.replace(/\?ezimgfmt=.*$/, ''); // Regular expression magic! + + const status = loadedCheerio("#lcp_instance_0 +:icontains('complete')").text(); + novel.status = (status ? NovelStatus.Completed : NovelStatus.Ongoing) - novel.summary = loadedCheerio(".book-review-block__meta-item-value").text().trim(); + const div = loadedCheerio(".book-review-block__meta-item-value"); + + div.html(div.html()?.replace(/(?<=>)([^<]+)(?=)/g, '

$1

')!); + + loadedCheerio(".book-review-block__meta-item-value strong").each((i,el) => { + const key = loadedCheerio(el).text().replace(':', '').trim().toLowerCase(); + const value = loadedCheerio(el).next().text().replace(':', '').trim(); + + switch(key){ + case "description": + novel.summary = value; + break; + case "author(s)": + novel.author = value; + break; + case "genre": + novel.genres = value.split(' ').join(','); + } + }) const chapters: Plugin.ChapterItem[] = loadedCheerio(".lcp_catlist > li > a") .map((chapterIndex, element) => ({ diff --git a/plugins/indonesian/indowebnovel.ts b/plugins/indonesian/indowebnovel.ts index 788f828..cdd87aa 100644 --- a/plugins/indonesian/indowebnovel.ts +++ b/plugins/indonesian/indowebnovel.ts @@ -7,8 +7,8 @@ class IndoWebNovel implements Plugin.PluginBase { id = "IDWN.id"; name = "IndoWebNovel"; icon = "src/id/indowebnovel/icon.png"; - site = "https://indowebnovel.id/id/"; - version = "1.1.0"; + site = "https://indowebnovel.id/"; + version = "1.2.0"; parseNovels(loadedCheerio:CheerioAPI){ const novels: Plugin.NovelItem[] = []; @@ -28,7 +28,7 @@ class IndoWebNovel implements Plugin.PluginBase { novels.push({ name: novelName, cover: novelCover, - path: novelUrl.replace(this.site, ''), + path: novelUrl.slice(this.site.length), }); }); @@ -88,7 +88,7 @@ class IndoWebNovel implements Plugin.PluginBase { chapters.push({ name: chapterName, - path: chapterUrl.replace(this.site, ''), + path: chapterUrl.slice(this.site.length), }); }); @@ -108,10 +108,14 @@ class IndoWebNovel implements Plugin.PluginBase { return chapterText; } - async searchNovels(searchTerm: string, pageNo: number): Promise { - const url = `${this.site}daftar-novel/`; + async searchNovels(searchTerm: string, page: number): Promise { + let link = `${this.site}advanced-search/page/${page}/?title=${searchTerm}&author=&yearx=`; + link += `&status=${this.filters.status.value}` + link += `&type=${this.filters.type.value}`; + link += `&order=${this.filters.sort.value}`; + link += this.filters.lang.value.map((i) => `&country[]=${i}`).join(""); - const result = await fetchApi(url); + const result = await fetchApi(link); const body = await result.text(); const loadedCheerio = parseHTML(body); diff --git a/plugins/indonesian/sakuranovel.ts b/plugins/indonesian/sakuranovel.ts index 8957cff..f6579f4 100644 --- a/plugins/indonesian/sakuranovel.ts +++ b/plugins/indonesian/sakuranovel.ts @@ -8,7 +8,7 @@ class SakuraNovel implements Plugin.PluginBase { name = "SakuraNovel"; icon = "src/id/sakuranovel/icon.png"; site = "https://sakuranovel.id/"; - version = "1.0.0"; + version = "1.0.1"; parseNovels(loadedCheerio:CheerioAPI){ const novels: Plugin.NovelItem[] = []; @@ -79,30 +79,35 @@ class SakuraNovel implements Plugin.PluginBase { .toArray() .join(","); + const imageTitle = novel.cover?.split('/').pop()?.split('-').join(' ').split('.')[0]; + const chapterTitle = novel.name.replace(/\(LN\)|\(WN\)/, "").split(',')[0].trim(); const chapter: Plugin.ChapterItem[] = []; - loadedCheerio(".series-chapterlist li").each((i,el) => { + loadedCheerio(".series-flexright li").each((i,el) => { const chapterName = loadedCheerio(el) .find("a span") .first() .text() - .replace(/.*?(Chapter.|[0-9])/g, "$1") - .replace(/Bahasa Indonesia/g, "") + .replace(chapterTitle, '') + .replace(imageTitle!, '') + .replace(/Bahasa Indonesia/, '') .replace(/\s+/g, " ") .trim(); const releaseDate = loadedCheerio(el) - .find("a span") - .first() - .next() - .text(); + .find(".date") + .text() + .trim() + .split('/') + .map(x => Number(x)); + const chapterUrl = loadedCheerio(el).find("a").attr("href"); if (!chapterUrl) return; chapter.push({ name: chapterName, - releaseTime: releaseDate, + releaseTime: new Date(releaseDate[2], releaseDate[1], releaseDate[0]).toISOString(), path: chapterUrl.replace(this.site, ''), }); });