mangayomi-mirror/lib/services/anime_extractors/okru_extractor.dart
Moustapha Kodjo Amadou 3e401c8af2 dart format
2025-02-23 15:31:49 +01:00

60 lines
1.9 KiB
Dart

import 'package:html/parser.dart' show parse;
import 'package:http_interceptor/http_interceptor.dart';
import 'package:mangayomi/models/video.dart';
import 'package:mangayomi/services/http/m_client.dart';
import 'package:mangayomi/utils/extensions/dom_extensions.dart';
import 'package:mangayomi/utils/extensions/string_extensions.dart';
import 'package:path/path.dart' as path;
class OkruExtractor {
final InterceptedClient client = MClient.init(
reqcopyWith: {'useDartHttpClient': true},
);
Future<List<Video>> videosFromUrl(
String url, {
String prefix = "",
bool fixQualities = true,
}) async {
final response = await client.get(Uri.parse(url));
final document = parse(response.body);
final videoString = document
.selectFirst('div[data-options]')
?.attr("data-options");
if (videoString == null) {
return [];
}
if (videoString.contains('ondemandHls')) {
final playlistUrl = Uri.parse(
videoString
.substringAfter("ondemandHls\\\":\\\"")
.substringBefore("\\\"")
.replaceAll("\\\\u0026", "&"),
);
final masterPlaylistResponse = await client.get(playlistUrl);
final masterPlaylist = masterPlaylistResponse.body;
const separator = "#EXT-X-STREAM-INF";
return masterPlaylist.substringAfter(separator).split(separator).map((
it,
) {
final resolution =
"${it.substringAfter("RESOLUTION=").substringBefore("\n").substringAfter("x").substringBefore(",")}p";
final m3u8Host =
"${playlistUrl.scheme}://${playlistUrl.host}${path.dirname(playlistUrl.path)}";
final videoUrl =
"$m3u8Host/${it.substringAfter("\n").substringBefore("\n")}";
return Video(
videoUrl,
"${prefix.isNotEmpty ? prefix : ""}Okru:$resolution",
videoUrl,
);
}).toList();
}
return [];
}
}