From f03b1703e26d90ca2e5086e39297d00a491f6e3b Mon Sep 17 00:00:00 2001 From: Rajarshee Chatterjee Date: Wed, 4 Aug 2021 09:20:35 +0530 Subject: [PATCH] fix(source): ArNovel (Closes #61) Closes LNReader/lnreader-sources#52 --- src/components/NovelCover.js | 2 + src/database/queries/NovelQueries.js | 1 - src/sources/ar/arnovel.js | 186 ++++++++++++++++++ .../multisrc/madara/MadaraGenerator.js | 14 +- src/sources/multisrc/madara/MadaraScraper.js | 2 +- src/sources/sources.js | 2 +- 6 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 src/sources/ar/arnovel.js diff --git a/src/components/NovelCover.js b/src/components/NovelCover.js index 093a122d..89645741 100644 --- a/src/components/NovelCover.js +++ b/src/components/NovelCover.js @@ -31,6 +31,8 @@ const NovelCover = ({ item, onPress, libraryStatus, theme }) => { [] ); + console.log(item.novelCover); + return displayMode !== 2 ? ( { + let totalPages = 21; + let url = baseUrl + "novels/page/" + page; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novels = []; + + $(".page-item-detail").each(function () { + const novelName = $(this).find(".h5 > a").text(); + const novelCover = + "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + + let novelUrl = $(this).find(".h5 > a").attr("href").split("/")[4]; + + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; + + novels.push(novel); + }); + + return { totalPages, novels }; +}; + +const parseNovelAndChapters = async (novelUrl) => { + const url = `${baseUrl}novel/${novelUrl}`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novel = { sourceId, sourceName, url, novelUrl }; + + novel.novelName = $(".post-title > h1") + .text() + .replace(/[\t\n]/g, "") + .trim(); + + novel.novelCover = + "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + + $(".post-content_item").each(function () { + detailName = $(this) + .find(".summary-heading > h5") + .text() + .replace(/[\t\n]/g, "") + .trim(); + detail = $(this) + .find(".summary-content") + .text() + .replace(/[\t\n]/g, "") + .trim(); + + switch (detailName) { + case "التصنيفات": + novel.genre = detail.trim().replace(/[\t\n]/g, ","); + break; + case "المؤلف (ين)": + novel.author = detail.trim(); + break; + case "الحالة": + novel.status = detail.trim(); + break; + } + }); + + $(".description-summary > div.summary__content").find("em").remove(); + + novel.summary = $(".description-summary > div.summary__content") + .text() + .trim(); + + let novelChapters = []; + + const novelId = $("#manga-chapters-holder").attr("data-id"); + + let formData = new FormData(); + formData.append("action", "manga_get_chapters"); + formData.append("manga", novelId); + + const data = await fetch("https://www.arnovel.me/wp-admin/admin-ajax.php", { + method: "POST", + body: formData, + }); + const text = await data.text(); + + $ = cheerio.load(text); + + $(".wp-manga-chapter").each(function () { + chapterName = $(this) + .find("a") + .text() + .replace(/[\t\n]/g, "") + .trim(); + + releaseDate = $(this).find("span").text().trim(); + + chapterUrl = $(this).find("a").attr("href").split("/"); + + chapterUrl[6] + ? (chapterUrl = chapterUrl[5] + "/" + chapterUrl[6]) + : (chapterUrl = chapterUrl[5]); + + novelChapters.push({ chapterName, releaseDate, chapterUrl }); + }); + + novel.chapters = novelChapters.reverse(); + + return novel; +}; + +const parseChapter = async (novelUrl, chapterUrl) => { + const url = `${baseUrl}novel/${novelUrl}/${chapterUrl}/`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + const chapterName = $("h1#chapter-heading").text(); + const chapterText = $(".reading-content").html(); + + const chapter = { + sourceId, + novelUrl, + chapterUrl, + chapterName, + chapterText, + }; + + return chapter; +}; + +const searchNovels = async (searchTerm) => { + const url = `${baseUrl}?s=${searchTerm}&post_type=wp-manga`; + + const result = await fetch(url); + const body = await result.text(); + + $ = cheerio.load(body); + + let novels = []; + + $(".c-tabs-item__content").each(function () { + const novelName = $(this).find(".h4 > a").text(); + const novelCover = + "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; + + let novelUrl = $(this).find(".h4 > a").attr("href").split("/")[4]; + + const novel = { + sourceId, + novelName, + novelCover, + novelUrl, + }; + + novels.push(novel); + }); + + return novels; +}; + +const ArNovelScraper = { + popularNovels, + parseNovelAndChapters, + parseChapter, + searchNovels, +}; + +export default ArNovelScraper; diff --git a/src/sources/multisrc/madara/MadaraGenerator.js b/src/sources/multisrc/madara/MadaraGenerator.js index bd5c8b2b..eed63693 100644 --- a/src/sources/multisrc/madara/MadaraGenerator.js +++ b/src/sources/multisrc/madara/MadaraGenerator.js @@ -16,7 +16,7 @@ const getPath = (extensionId) => { 56: { novels: "novel", novel: "novel", chapter: "novel" }, 57: { novels: "series", novel: "series", chapter: "series" }, 58: { novels: "novel", novel: "novel", chapter: "novel" }, - 59: { novels: "novel", novel: "novel", chapter: "novel" }, + 59: { novels: "novel", novel: "novels", chapter: "novel" }, 60: { novels: "novel", novel: "novel", chapter: "novel" }, 61: { novels: "novel", novel: "novel", chapter: "novel" }, 62: { novels: "novel", novel: "novel", chapter: "novel" }, @@ -130,12 +130,12 @@ export const LightNovelsHubScraper = new MadaraScraper( getPath(58) ); -export const ArNovelScraper = new MadaraScraper( - 59, - "https://arnovel.me/", - "ArNovel", - getPath(59) -); +// export const ArNovelScraper = new MadaraScraper( +// 59, +// "https://arnovel.me/", +// "ArNovel", +// getPath(59) +// ); export const MeionNovelScraper = new MadaraScraper( 60, diff --git a/src/sources/multisrc/madara/MadaraScraper.js b/src/sources/multisrc/madara/MadaraScraper.js index 7e4d3837..1c84a875 100644 --- a/src/sources/multisrc/madara/MadaraScraper.js +++ b/src/sources/multisrc/madara/MadaraScraper.js @@ -79,7 +79,7 @@ class MadaraScraper { novel.novelCover = $(".summary_image > a > img").attr("data-src") || $(".summary_image > a > img").attr("src") || - "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.png?raw=true"; + "https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true"; $(".post-content_item").each(function () { const detailName = $(this) diff --git a/src/sources/sources.js b/src/sources/sources.js index 78c5e45f..f32c5eaa 100644 --- a/src/sources/sources.js +++ b/src/sources/sources.js @@ -35,7 +35,6 @@ import ScribbleHubScraper from "./en/scribblehub"; import SyosetuScraper from "./jp/syosetu"; import LNMTLScraper from "./en/lnmtl"; import { - ArNovelScraper, BoxNovelOnlineScraper, ClickNovelScraper, DaoNovelScraper, @@ -70,6 +69,7 @@ import WLNUpdatesScraper from "./en/wlnupdates"; import ReaperScansScraper from "./en/reaperscans"; import ReadwnScraper from "./en/readwn"; import RanobeHubScraper from "./ru/ranobehub"; +import ArNovelScraper from "./ar/arnovel"; export const getSource = (sourceId) => { const scrapers = {