Files
lnreader-plugins/multisrc/wpmangastream/WPMangaStreamScraper.js
T
Rajarshee Chatterjee 340d4e5939 Add arabic sources
2021-07-16 09:23:49 +05:30

181 lines
4.8 KiB
JavaScript

const cheerio = require("cheerio");
const fetch = require("node-fetch");
const { parseHtml } = require("../../src/helper");
class MadaraScraper {
constructor(extensionId, baseUrl, sourceName) {
this.extensionId = extensionId;
this.baseUrl = baseUrl;
this.sourceName = sourceName;
this.novelsScraper = this.novelsScraper.bind(this);
this.novelScraper = this.novelScraper.bind(this);
this.chapterScraper = this.chapterScraper.bind(this);
this.searchScraper = this.searchScraper.bind(this);
}
async novelsScraper(req, res) {
let url = this.baseUrl + "series/?m_orderby=popular";
let extensionId = this.extensionId;
const result = await fetch(url);
const body = await result.text();
const $ = cheerio.load(body);
let novels = [];
$("article.bs").each(function (result) {
const novelName = $(this).find(".ntitle").text().trim();
let image = $(this).find("img");
const novelCover = image.attr("src");
let novelUrl = $(this).find("a").attr("href").split("/")[4];
const novel = {
extensionId,
novelName,
novelCover,
novelUrl,
};
novels.push(novel);
});
res.json(novels);
}
async novelScraper(req, res) {
const novelUrl = req.params.novelUrl;
const url = `${this.baseUrl}series/${novelUrl}/`;
const result = await fetch(url);
const body = await result.text();
let $ = cheerio.load(body);
let novel = {};
novel.extensionId = this.extensionId;
novel.sourceName = this.sourceName;
novel.sourceUrl = url;
novel.novelUrl = novelUrl;
novel.novelName = $(".entry-title").text();
novel.novelCover = $("img.thumb").attr("src");
$("div.spe > span").each(function (result) {
const detailName = $(this).find("b").text().trim();
const detail = $(this).find("b").next().text().trim();
if ($(this).text().includes("الحالة:")) {
novel.Status = $(this).text().replace("الحالة: ", "");
}
switch (detailName) {
case "المؤلف:":
novel["Author(s)"] = detail;
break;
}
});
novel["Genre(s)"] = $(".genxed").text().replace(/\s/g, ",");
novel.novelSummary = $('div[itemprop="description"]').text().trim();
let novelChapters = [];
$(".eplister")
.find("li")
.each(function (result) {
const chapterName =
$(this).find(".epl-num").text() +
" - " +
$(this).find(".epl-title").text();
const releaseDate = $(this).find(".epl-date").text().trim();
const chapterUrl = $(this).find("a").attr("href").split("/")[3];
novelChapters.push({ chapterName, releaseDate, chapterUrl });
});
novel.novelChapters = novelChapters.reverse();
res.json(novel);
}
async chapterScraper(req, res) {
let novelUrl = req.params.novelUrl;
let chapterUrl = req.params.chapterUrl;
let extensionId = this.extensionId;
const url = `${this.baseUrl}${chapterUrl}`;
const result = await fetch(url);
const body = await result.text();
const $ = cheerio.load(body);
let chapterName = $(".entry-title").text();
let chapterText = $(".entry-content").html();
chapterText = parseHtml(chapterText);
let nextChapter = null;
let prevChapter = null;
const chapter = {
extensionId,
novelUrl,
chapterUrl,
chapterName,
chapterText,
nextChapter,
prevChapter,
};
res.json(chapter);
}
async searchScraper(req, res) {
const searchTerm = req.query.s;
const url = `${this.baseUrl}?s=${searchTerm}`;
const result = await fetch(url);
const body = await result.text();
const $ = cheerio.load(body);
let novels = [];
let extensionId = this.extensionId;
$("article.bs").each(function (result) {
const novelName = $(this).find(".ntitle").text().trim();
let image = $(this).find("img");
const novelCover = image.attr("src");
let novelUrl = $(this).find("a").attr("href").split("/")[4];
const novel = {
extensionId,
novelName,
novelCover,
novelUrl,
};
novels.push(novel);
});
res.json(novels);
}
}
module.exports = MadaraScraper;