AnimesUltra: change baseUrl & fix server

This commit is contained in:
kodjomoustapha
2024-05-03 15:12:21 +01:00
parent 8963bf3eda
commit 51b2c35f72
2 changed files with 88 additions and 35 deletions

View File

@@ -8,9 +8,12 @@ class AnimesUltra extends MProvider {
final Client client = Client(source); final Client client = Client(source);
@override
String get baseUrl => source.baseUrl;
@override @override
Future<MPages> getPopular(int page) async { Future<MPages> getPopular(int page) async {
final res = (await client.get(Uri.parse(source.baseUrl))).body; final res = (await client.get(Uri.parse(baseUrl))).body;
List<MManga> animeList = []; List<MManga> animeList = [];
final urls = xpath(res, final urls = xpath(res,
@@ -33,7 +36,7 @@ class AnimesUltra extends MProvider {
@override @override
Future<MPages> getLatestUpdates(int page) async { Future<MPages> getLatestUpdates(int page) async {
final res = (await client.get(Uri.parse(source.baseUrl))).body; final res = (await client.get(Uri.parse(baseUrl))).body;
List<MManga> animeList = []; List<MManga> animeList = [];
final urls = xpath(res, final urls = xpath(res,
@@ -56,7 +59,7 @@ class AnimesUltra extends MProvider {
@override @override
Future<MPages> search(String query, int page, FilterList filterList) async { Future<MPages> search(String query, int page, FilterList filterList) async {
final res = (await client.get(Uri.parse(source.baseUrl))).body; final res = (await client.get(Uri.parse(baseUrl))).body;
List<MManga> animeList = []; List<MManga> animeList = [];
final urls = xpath(res, '//*[@class="film-poster"]/a/@href'); final urls = xpath(res, '//*[@class="film-poster"]/a/@href');
@@ -81,7 +84,8 @@ class AnimesUltra extends MProvider {
]; ];
final res = (await client.get(Uri.parse(url))).body; final res = (await client.get(Uri.parse(url))).body;
MManga anime = MManga(); var anime = MManga();
final doc = parseHtml(res);
anime.description = anime.description =
xpath(res, '//*[@class="film-description m-hide"]/text()').first; xpath(res, '//*[@class="film-description m-hide"]/text()').first;
@@ -91,66 +95,115 @@ class AnimesUltra extends MProvider {
anime.status = parseStatus(status, statusList); anime.status = parseStatus(status, statusList);
anime.genre = xpath(res, anime.genre = xpath(res,
'//*[@class="item item-list" and contains(text(),"Genres:")]/a/text()'); '//*[@class="item item-list" and contains(text(),"Genres:")]/a/text()');
anime.author = xpath(res, anime.author = doc.xpathFirst(
'//*[@class="item item-title" and contains(text(),"Studio:")]/span[2]/text()') '//*[@class="item item-title" and contains(text(),"Studio:")]/span[2]/text()');
.first; final episodesLength = int.parse(substringBefore(
final urlEp = url.replaceAll('.html', '/episode-1.html'); doc.xpathFirst('//*[@class="film-stats"]/span[7]/text()'), "/")
final resEpWebview = .replaceAll("Ep", ""));
await getHtmlViaWebview(urlEp, '//*[@class="ss-list"]/a/@href');
final epUrls =
xpath(resEpWebview, '//*[@class="ss-list"]/a/@href').reversed.toList();
final names = xpath(resEpWebview,
'//*[@class="ss-list"]/a/div[@class="ssli-detail"]/div/text()')
.reversed
.toList();
List<MChapter>? episodesList = []; List<MChapter>? episodesList = [];
for (var i = 0; i < names.length; i++) {
MChapter episode = MChapter(); for (var i = 0; i < episodesLength; i++) {
episode.name = names[i]; var episode = MChapter();
episode.url = epUrls[i]; episode.name = "Episode ${i + 1}";
episode.url = url.replaceAll('.html', '/episode-${i + 1}.html');
episodesList.add(episode); episodesList.add(episode);
} }
anime.chapters = episodesList.reversed.toList();
anime.chapters = episodesList;
return anime; return anime;
} }
@override @override
Future<List<MVideo>> getVideoList(String url) async { Future<List<MVideo>> getVideoList(String url) async {
final resWebview = await getHtmlViaWebview( final resHtml = (await client.get(Uri.parse(url))).body;
url, '//*[@class="ps__-list"]/div/@data-server-id'); final id = url.split('/')[4].split('-')[0];
final resServer = (await client
.get(Uri.parse("$baseUrl/engine/ajax/full-story.php?newsId=$id")))
.body;
final serverIds = final serverIds =
xpath(resWebview, '//*[@class="ps__-list"]/div/@data-server-id'); xpath(resHtml, '//*[@class="ps__-list"]/div/@data-server-id');
final serverNames = final serverNames = xpath(resHtml, '//*[@class="ps__-list"]/div/a/text()');
xpath(resWebview, '//*[@class="ps__-list"]/div/a/text()');
List<String> serverUrls = []; List<String> serverUrls = [];
for (var id in serverIds) { for (var id in serverIds) {
final serversUrls = final serversUrls = xpath(jsonDecode(resServer)["html"],
xpath(resWebview, '//*[@id="content_player_${id}"]/text()').first; '//*[@id="content_player_${id}"]/text()')
.first;
serverUrls.add(serversUrls); serverUrls.add(serversUrls);
} }
List<MVideo> videos = []; List<MVideo> videos = [];
for (var i = 0; i < serverNames.length; i++) { for (var i = 0; i < serverNames.length; i++) {
final name = serverNames[i]; final name = serverNames[i];
final url = serverUrls[i]; final url = serverUrls[i];
List<MVideo> a = []; List<MVideo> a = [];
if (name.contains("Sendvid")) { if (name.contains("Sendvid")) {
a = await sendVidExtractor(url.replaceAll("https:////", "https://"), a = await sendVidExtractorr(
json.encode({"Referer": "${source.baseUrl}/"}), ""); url.replaceAll("https:////", "https://"), "");
} else if (name.contains("Sibnet")) { } else if (name.contains("Sibnet")) {
a = await sibnetExtractor( a = await sibnetExtractor(
"https://video.sibnet.ru/shell.php?videoid=$url"); "https://video.sibnet.ru/shell.php?videoid=$url");
} else if (name.contains("Mytv")) { } else if (name.contains("Mytv")) {
a = await myTvExtractor("https://www.myvi.tv/embed/$url"); a = await myTvExtractor("https://www.myvi.tv/embed/$url");
} else if (name.contains("Fmoon")) {
a = await filemoonExtractor(url, "", "");
} }
videos.addAll(a); videos.addAll(a);
} }
return videos; return videos;
} }
Future<List<MVideo>> sendVidExtractorr(String url, String prefix) async {
final res = (await client.get(Uri.parse(url))).body;
final document = parseHtml(res);
final masterUrl = document.selectFirst("source#video_source")?.attr("src");
if (masterUrl == null) return [];
final masterHeaders = {
"Accept": "*/*",
"Host": Uri.parse(masterUrl).host,
"Origin": "https://${Uri.parse(url).host}",
"Referer": "https://${Uri.parse(url).host}/",
};
List<MVideo> videos = [];
if (masterUrl.contains(".m3u8")) {
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
.split("#EXT-X-STREAM-INF:")) {
final quality =
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
String videoUrl = substringBefore(substringAfter(it, "\n"), "\n");
if (!videoUrl.startsWith("http")) {
videoUrl =
"${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl";
}
final videoHeaders = {
"Accept": "*/*",
"Host": Uri.parse(videoUrl).host,
"Origin": "https://${Uri.parse(url).host}",
"Referer": "https://${Uri.parse(url).host}/",
};
var video = MVideo();
video
..url = videoUrl
..originalUrl = videoUrl
..quality = prefix + "Sendvid:$quality"
..headers = videoHeaders;
videos.add(video);
}
} else {
var video = MVideo();
video
..url = masterUrl
..originalUrl = masterUrl
..quality = prefix + "Sendvid:default"
..headers = masterHeaders;
videos.add(video);
}
return videos;
}
} }
AnimesUltra main(MSource source) { AnimesUltra main(MSource source) {

View File

@@ -1,12 +1,12 @@
import '../../../../../model/source.dart'; import '../../../../../model/source.dart';
Source get animesultraSource => _animesultraSource; Source get animesultraSource => _animesultraSource;
const _animesultraVersion = "0.0.65"; const _animesultraVersion = "0.0.7";
const _animesultraSourceCodeUrl = const _animesultraSourceCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesultra/animesultra.dart"; "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/animesultra/animesultra.dart";
Source _animesultraSource = Source( Source _animesultraSource = Source(
name: "AnimesUltra", name: "AnimesUltra",
baseUrl: "https://ww.animesultra.net", baseUrl: "https://w2.animesultra.net",
lang: "fr", lang: "fr",
typeSource: "single", typeSource: "single",
iconUrl: iconUrl: