fix(source): ArNovel (Closes #61)

Closes LNReader/lnreader-sources#52
This commit is contained in:
Rajarshee Chatterjee
2021-08-04 09:20:35 +05:30
parent 40d2052f16
commit f03b1703e2
6 changed files with 197 additions and 10 deletions
+2
View File
@@ -31,6 +31,8 @@ const NovelCover = ({ item, onPress, libraryStatus, theme }) => {
[]
);
console.log(item.novelCover);
return displayMode !== 2 ? (
<View
style={{
-1
View File
@@ -8,7 +8,6 @@ import { fetchChapters, fetchNovel } from "../../services/Source/source";
import { insertChapters } from "./ChapterQueries";
import { showToast } from "../../hooks/showToast";
import { setNovel } from "../../redux/novel/novel.actions";
const insertNovelQuery = `INSERT INTO novels (novelUrl, sourceUrl, sourceId, source, novelName, novelCover, novelSummary, author, artist, status, genre) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
+186
View File
@@ -0,0 +1,186 @@
import cheerio from "react-native-cheerio";
const sourceId = 59;
const sourceName = "ArNovel";
const baseUrl = "https://arnovel.me/";
const popularNovels = async (page) => {
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;
@@ -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,
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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 = {