This commit is contained in:
kodjomoustapha
2023-12-20 18:17:40 +01:00
parent 2f9703a850
commit 787ef77a7e
9 changed files with 71 additions and 159 deletions

View File

@@ -145,13 +145,10 @@ class DataLifeEngine extends MProvider {
} }
MPages animeFromElement(String res, String baseUrl) { MPages animeFromElement(String res, String baseUrl) {
final htmls = querySelectorAll(res, final htmls = parseHtml(res).select("div#dle-content > div.mov");
selector: "div#dle-content > div.mov",
typeElement: 1,
attributes: "",
typeRegExp: 0);
List<MManga> animeList = []; List<MManga> animeList = [];
for (var html in htmls) { for (var h in htmls) {
final html = h.innerHtml;
final url = xpath(html, '//a/@href').first; final url = xpath(html, '//a/@href').first;
final name = xpath(html, '//a/text()').first; final name = xpath(html, '//a/text()').first;
final image = xpath(html, '//div[contains(@class,"mov")]/img/@src').first; final image = xpath(html, '//div[contains(@class,"mov")]/img/@src').first;

View File

@@ -121,14 +121,11 @@ class DopeFlix extends MProvider {
"${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId" "${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId"
}; };
final html = await http('GET', json.encode(dataE)); final html = await http('GET', json.encode(dataE));
final epsHtml = querySelectorAll(html,
selector: "div.eps-item", final epsHtmls = parseHtml(html).select("div.eps-item");
typeElement: 2,
attributes: "", for (var epH in epsHtmls) {
typeRegExp: 0); final epHtml = epH.outerHtml;
print(
"${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId");
for (var epHtml in epsHtml) {
final episodeId = final episodeId =
xpath(epHtml, '//div[contains(@class,"eps-item")]/@data-id') xpath(epHtml, '//div[contains(@class,"eps-item")]/@data-id')
.first; .first;
@@ -152,13 +149,11 @@ class DopeFlix extends MProvider {
url = Uri.parse(url).path; url = Uri.parse(url).path;
final res = await http( final res = await http(
'GET', json.encode({"url": "${preferenceBaseUrl(source.id)}/$url"})); 'GET', json.encode({"url": "${preferenceBaseUrl(source.id)}/$url"}));
final vidsHtml = querySelectorAll(res, final vidsHtmls = parseHtml(res).select("ul.fss-list a.btn-play");
selector: "ul.fss-list a.btn-play",
typeElement: 2,
attributes: "",
typeRegExp: 0);
List<MVideo> videos = []; List<MVideo> videos = [];
for (var vidHtml in vidsHtml) { for (var vidH in vidsHtmls) {
final vidHtml = vidH.outerHtml;
final id = xpath(vidHtml, '//a/@data-id').first; final id = xpath(vidHtml, '//a/@data-id').first;
final name = xpath(vidHtml, '//span/text()').first; final name = xpath(vidHtml, '//span/text()').first;
final resSource = await http( final resSource = await http(

View File

@@ -155,36 +155,17 @@ class ZoroTheme extends MProvider {
final resEp = await http('GET', json.encode(dataEp)); final resEp = await http('GET', json.encode(dataEp));
final html = json.decode(resEp)["html"]; final html = json.decode(resEp)["html"];
final epElements = parseHtml(html).select("a.ep-item");
final epUrls = querySelectorAll(html,
selector: "a.ep-item",
typeElement: 3,
attributes: "href",
typeRegExp: 0);
final numbers = querySelectorAll(html,
selector: "a.ep-item",
typeElement: 3,
attributes: "data-number",
typeRegExp: 0);
final titles = querySelectorAll(html,
selector: "a.ep-item",
typeElement: 3,
attributes: "title",
typeRegExp: 0);
List<String> episodes = [];
for (var i = 0; i < titles.length; i++) {
final number = numbers[i];
final title = titles[i];
episodes.add("Episode $number: $title");
}
List<MChapter>? episodesList = []; List<MChapter>? episodesList = [];
for (var i = 0; i < episodes.length; i++) {
for (var epElement in epElements) {
final number = epElement.attr("data-number");
final title = epElement.attr("title");
MChapter episode = MChapter(); MChapter episode = MChapter();
episode.name = episodes[i]; episode.name = "Episode $number: $title";
episode.url = epUrls[i]; episode.url = epElement.getHref;
episodesList.add(episode); episodesList.add(episode);
} }
@@ -204,31 +185,15 @@ class ZoroTheme extends MProvider {
final res = await http('GET', json.encode(datas)); final res = await http('GET', json.encode(datas));
final html = json.decode(res)["html"]; final html = json.decode(res)["html"];
final names = querySelectorAll(html, final serverElements = parseHtml(html).select("div.server-item");
selector: "div.server-item",
typeElement: 0,
attributes: "",
typeRegExp: 0);
final ids = querySelectorAll(html,
selector: "div.server-item",
typeElement: 3,
attributes: "data-id",
typeRegExp: 0);
final subDubs = querySelectorAll(html,
selector: "div.server-item",
typeElement: 3,
attributes: "data-type",
typeRegExp: 0);
List<MVideo> videos = []; List<MVideo> videos = [];
final hosterSelection = preferenceHosterSelection(source.id); final hosterSelection = preferenceHosterSelection(source.id);
final typeSelection = preferenceTypeSelection(source.id); final typeSelection = preferenceTypeSelection(source.id);
for (var i = 0; i < names.length; i++) { for (var serverElement in serverElements) {
final name = names[i]; final name = serverElement.text;
final id = ids[i]; final id = serverElement.attr("data-id");
final subDub = subDubs[i]; final subDub = serverElement.attr("data-type");
final datasE = { final datasE = {
"url": "url":
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id", "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id",
@@ -237,7 +202,6 @@ class ZoroTheme extends MProvider {
final resE = await http('GET', json.encode(datasE)); final resE = await http('GET', json.encode(datasE));
String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\""); String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\"");
List<MVideo> a = []; List<MVideo> a = [];
if (hosterSelection.contains(name) && typeSelection.contains(subDub)) { if (hosterSelection.contains(name) && typeSelection.contains(subDub)) {

View File

@@ -119,26 +119,21 @@ class Aniwave extends MProvider {
} }
anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()'); anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()');
final id = querySelectorAll(res, final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id");
selector: "div[data-id]",
typeElement: 3,
attributes: "data-id",
typeRegExp: 0)
.first;
final encrypt = vrfEncrypt(id); final encrypt = vrfEncrypt(id);
final vrf = "vrf=${Uri.encodeComponent(encrypt)}"; final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
final dataEp = { final dataEp = {
"url": "${preferenceBaseUrl(source.id)}/ajax/episode/list/$id?$vrf" "url": "${preferenceBaseUrl(source.id)}/ajax/episode/list/$id?$vrf"
}; };
final resEp = await http('GET', json.encode(dataEp)); final resEp = await http('GET', json.encode(dataEp));
final html = json.decode(resEp)["result"]; final html = json.decode(resEp)["result"];
List<MChapter>? episodesList = []; List<MChapter>? episodesList = [];
final epsHtml = querySelectorAll(html,
selector: "div.episodes ul > li", final epsHtmls = parseHtml(html).select("div.episodes ul > li");
typeElement: 2,
attributes: "", for (var epH in epsHtmls) {
typeRegExp: 0); final epHtml = epH.outerHtml;
for (var epHtml in epsHtml) {
final title = xpath(epHtml, '//li/@title').isNotEmpty final title = xpath(epHtml, '//li/@title').isNotEmpty
? xpath(epHtml, '//li/@title').first ? xpath(epHtml, '//li/@title').first
: ""; : "";
@@ -183,13 +178,12 @@ class Aniwave extends MProvider {
"url": "${preferenceBaseUrl(source.id)}/ajax/server/list/$ids?$vrf" "url": "${preferenceBaseUrl(source.id)}/ajax/server/list/$ids?$vrf"
})); }));
final html = json.decode(res)["result"]; final html = json.decode(res)["result"];
final vidsHtml = querySelectorAll(html,
selector: "div.servers > div", final vidsHtmls = parseHtml(html).select("div.servers > div");
typeElement: 2,
attributes: "",
typeRegExp: 0);
List<MVideo> videos = []; List<MVideo> videos = [];
for (var vidHtml in vidsHtml) { for (var vidH in vidsHtmls) {
final vidHtml = vidH.outerHtml;
final type = xpath(vidHtml, '//div/@data-type').first; final type = xpath(vidHtml, '//div/@data-type').first;
final serversIds = xpath(vidHtml, '//li/@data-link-id'); final serversIds = xpath(vidHtml, '//li/@data-link-id');
for (int i = 0; i < serversIds.length; i++) { for (int i = 0; i < serversIds.length; i++) {

View File

@@ -197,12 +197,9 @@ class UHDMovies extends MProvider {
"url": nextUrl, "url": nextUrl,
"headers": {"referer": url, "Cookie": "$cookieName=$cookieValue"} "headers": {"referer": url, "Cookie": "$cookieName=$cookieValue"}
})); }));
final lastRes = querySelectorAll(response,
selector: "meta[http-equiv]", final lastRes =
typeElement: 3, parseHtml(response).selectFirst("meta[http-equiv]").attr("content");
attributes: "content",
typeRegExp: 0)
.first;
return substringAfter(lastRes, "url="); return substringAfter(lastRes, "url=");
} }

View File

@@ -197,12 +197,7 @@ class AnimeSaturn extends MProvider {
if (resVid.contains("jwplayer(")) { if (resVid.contains("jwplayer(")) {
masterUrl = substringBefore(substringAfter(resVid, "file: \""), "\""); masterUrl = substringBefore(substringAfter(resVid, "file: \""), "\"");
} else { } else {
masterUrl = querySelectorAll(resVid, masterUrl = parseHtml(resVid).selectFirst("source").attr("src");
selector: "source",
typeElement: 3,
attributes: "src",
typeRegExp: 0)
.first;
} }
List<MVideo> videos = []; List<MVideo> videos = [];

View File

@@ -148,14 +148,13 @@ class HeanCms extends MProvider {
res = await http('GET', json.encode(data)); res = await http('GET', json.encode(data));
List<String> pageUrls = []; List<String> pageUrls = [];
var imagesRes = querySelectorAll(res, var imagesRes = parseHtml(res)
selector: "div.min-h-screen > div.container > p.items-center", .selectFirst("div.min-h-screen > div.container > p.items-center")
typeElement: 1, .innerHtml;
attributes: "",
typeRegExp: 0);
pageUrls = xpath(imagesRes.first, '//img/@src');
pageUrls.addAll(xpath(imagesRes.first, '//img/@data-src')); pageUrls = xpath(imagesRes, '//img/@src');
pageUrls.addAll(xpath(imagesRes, '//img/@data-src'));
return pageUrls.where((e) => e.isNotEmpty).toList(); return pageUrls.where((e) => e.isNotEmpty).toList();
} }

View File

@@ -145,12 +145,11 @@ class MangaReader extends MProvider {
.replaceAll("[Add, ]", ""); .replaceAll("[Add, ]", "");
} }
final description = querySelectorAll(res, final description = parseHtml(res)
selector: ".desc, .entry-content[itemprop=description]", .selectFirst(".desc, .entry-content[itemprop=description]")
typeElement: 0, ?.text;
attributes: "",
typeRegExp: 0); if (description != null) {
if (description.isNotEmpty) {
manga.description = description.first; manga.description = description.first;
} }

View File

@@ -128,25 +128,18 @@ class Batoto extends MProvider {
.split(","); .split(",");
manga.description = xpath(res, '//*[@class="limit-html"]/text()').first; manga.description = xpath(res, '//*[@class="limit-html"]/text()').first;
List<String> chapsElement = querySelectorAll(res, final chapElements = parseHtml(res).select("div.main div.p-2");
selector: "div.main div.p-2",
typeElement: 2,
attributes: "",
typeRegExp: 0);
List<String> times = []; List<String> times = [];
List<String> chapsUrls = []; List<String> chapsUrls = [];
List<String> chapsNames = []; List<String> chapsNames = [];
List<String> scanlators = []; List<String> scanlators = [];
for (var element in chapsElement) { for (MElement el in chapElements) {
final urlElement = querySelectorAll(element, final chapHtml = el.selectFirst("a.chapt").outerHtml;
selector: "a.chapt", final element = el.outerHtml;
typeElement: 2,
attributes: "",
typeRegExp: 0)
.first;
final group = xpath(element, '//*[@class="extra"]/a/text()').first; final group = xpath(element, '//*[@class="extra"]/a/text()').first;
final name = xpath(urlElement, '//a/text()').first; final name = xpath(chapHtml, '//a/text()').first;
final url = xpath(urlElement, '//a/@href').first; final url = xpath(chapHtml, '//a/@href').first;
final time = final time =
xpath(element, '//*[@class="extra"]/i[@class="ps-3"]/text()').first; xpath(element, '//*[@class="extra"]/i[@class="ps-3"]/text()').first;
times.add(time); times.add(time);
@@ -201,46 +194,25 @@ class Batoto extends MProvider {
MPages mangaElementM(String res, MSource source) async { MPages mangaElementM(String res, MSource source) async {
final lang = source.lang.replaceAll("-", "_"); final lang = source.lang.replaceAll("-", "_");
var resB = querySelectorAll(res, final mangaElements = parseHtml(res).select("div#series-list div.col");
selector: "div#series-list div.col",
typeElement: 2,
attributes: "",
typeRegExp: 0);
List<String> images = []; List<String> images = [];
List<String> urls = []; List<String> urls = [];
List<String> names = []; List<String> names = [];
for (var element in resB) { for (MElement element in mangaElements) {
if (source.lang == "all" || if (source.lang == "all" ||
source.lang == "en" && element.contains('no-flag') || source.lang == "en" && element.outerHtml.contains('no-flag') ||
element.contains('data-lang="$lang"')) { element.outerHtml.contains('data-lang="$lang"')) {
final item = querySelectorAll(element, final itemHtml = element.selectFirst("a.item-cover").outerHtml;
selector: "a.item-cover",
typeElement: 2, final img = parseHtml(itemHtml).selectFirst("img").getSrc;
attributes: "",
typeRegExp: 0) final url = parseHtml(itemHtml).selectFirst("a").getHref;
.first;
final img = querySelectorAll(item,
selector: "img",
typeElement: 3,
attributes: "src",
typeRegExp: 0)
.first;
final url = querySelectorAll(item,
selector: "a",
typeElement: 3,
attributes: "href",
typeRegExp: 0)
.first;
images.add(img); images.add(img);
urls.add(url); urls.add(url.replaceAll(";", "&"));
final title = querySelectorAll(element, final title = element.selectFirst("a.item-title").text;
selector: "a.item-title",
typeElement: 0,
attributes: "",
typeRegExp: 0)
.first;
names.add(title); names.add(title);
} }
} }