extension(animegg): extract streams

This commit is contained in:
Swakshan
2025-03-16 18:36:19 +05:30
parent 52901bc900
commit d761743543

View File

@@ -6,7 +6,7 @@ const mangayomiSources = [{
"iconUrl": "https://www.google.com/s2/favicons?sz=256&domain=https://www.animegg.org/", "iconUrl": "https://www.google.com/s2/favicons?sz=256&domain=https://www.animegg.org/",
"typeSource": "single", "typeSource": "single",
"itemType": 1, "itemType": 1,
"version": "0.0.3", "version": "1.0.0",
"pkgPath": "anime/src/en/animegg.js" "pkgPath": "anime/src/en/animegg.js"
}]; }];
@@ -19,8 +19,8 @@ class DefaultExtension extends MProvider {
getHeaders(url) { getHeaders(url) {
return { return {
Referer: this.getSourcePreferences.baseUrl, "Referer": this.source.baseUrl,
Origin: this.getSourcePreferences.baseUrl "Origin": this.source.baseUrl
} }
} }
@@ -28,12 +28,15 @@ class DefaultExtension extends MProvider {
return new SharedPreferences().get(key); return new SharedPreferences().get(key);
} }
async request(slug) { async requestText(slug) {
var url = `${this.source.baseUrl}${slug}` var url = `${this.source.baseUrl}${slug}`
var res = await this.client.get(url, this.getHeaders()); var res = await this.client.get(url, this.getHeaders());
return new Document(res.body); return res.body;
} }
async request(slug) {
return new Document(await this.requestText(slug));
}
async fetchPopularnLatest(slug) { async fetchPopularnLatest(slug) {
var body = await this.request(slug) var body = await this.request(slug)
var items = body.select("li.fea") var items = body.select("li.fea")
@@ -43,7 +46,7 @@ class DefaultExtension extends MProvider {
for (var item of items) { for (var item of items) {
var imageUrl = item.selectFirst('img').getSrc var imageUrl = item.selectFirst('img').getSrc
var linkSection = item.selectFirst('.rightpop').selectFirst('a') var linkSection = item.selectFirst('.rightpop').selectFirst('a')
var link =linkSection.getHref var link = linkSection.getHref
var name = linkSection.text var name = linkSection.text
list.push({ list.push({
name, name,
@@ -86,7 +89,7 @@ class DefaultExtension extends MProvider {
} }
var slug = `/popular-series?${category}start=${start}&limit=${limit}` var slug = `/popular-series?${category}start=${start}&limit=${limit}`
return await this.fetchPopularnLatest(slug) return await this.fetchPopularnLatest(slug)
} }
get supportsLatest() { get supportsLatest() {
@@ -105,19 +108,19 @@ class DefaultExtension extends MProvider {
var body = await this.request(slug) var body = await this.request(slug)
var items = body.select(".moose.page > a") var items = body.select(".moose.page > a")
var list = [] var list = []
for (var item of items) { for (var item of items) {
var imageUrl = item.selectFirst('img').getSrc var imageUrl = item.selectFirst('img').getSrc
var link = item.getHref var link = item.getHref
var name = item.selectFirst("h2").text var name = item.selectFirst("h2").text
list.push({ list.push({
name, name,
imageUrl, imageUrl,
link link
}); });
} }
return { list, hasNextPage:false } return { list, hasNextPage: false }
} }
statusCode(status) { statusCode(status) {
@@ -135,7 +138,7 @@ class DefaultExtension extends MProvider {
var media = body.selectFirst(".media") var media = body.selectFirst(".media")
var title = media.selectFirst("h1").text var title = media.selectFirst("h1").text
var spans = media.selectFirst("p.infoami").select("span") var spans = media.selectFirst("p.infoami").select("span")
var statusText = spans[spans.length - 1].text.replace("Status: ",'') var statusText = spans[spans.length - 1].text.replace("Status: ", '')
var status = this.statusCode(statusText) var status = this.statusCode(statusText)
@@ -148,8 +151,8 @@ class DefaultExtension extends MProvider {
var episodesList = body.select(".newmanga > li") var episodesList = body.select(".newmanga > li")
episodesList.forEach(ep => { episodesList.forEach(ep => {
var epTitle = ep.selectFirst('i.anititle').text var epTitle = ep.selectFirst('i.anititle').text
var epNumber = ep.selectFirst('strong').text.replace(title,"Episode") var epNumber = ep.selectFirst('strong').text.replace(title, "Episode")
var epName = epNumber == epTitle?epNumber:`${epNumber} - ${epTitle}` var epName = epNumber == epTitle ? epNumber : `${epNumber} - ${epTitle}`
var epUrl = ep.selectFirst("a").getHref var epUrl = ep.selectFirst("a").getHref
var scanlator = ""; var scanlator = "";
@@ -160,34 +163,46 @@ class DefaultExtension extends MProvider {
}) })
scanlator = scanlator.slice(0, -2); scanlator = scanlator.slice(0, -2);
chapters.push({ name: epName, url: epUrl,scanlator}) chapters.push({ name: epName, url: epUrl, scanlator })
}) })
return { description, status, genre, chapters, link } return { description, status, genre, chapters, link }
} }
// For novel html content
async getHtmlContent(url) {
throw new Error("getHtmlContent not implemented");
}
// Clean html up for reader
async cleanHtmlContent(html) {
throw new Error("cleanHtmlContent not implemented");
}
// For anime episode video list // For anime episode video list
async getVideoList(url) { async getVideoList(url) {
throw new Error("getVideoList not implemented"); var body = await this.request(url)
} var iframe = body.selectFirst("iframe")
// For manga chapter pages var src = iframe.attr('src')
async getPageList(url) {
throw new Error("getPageList not implemented"); body = await this.requestText(src)
} var sKey = "var videoSources = "
getFilterList() { var eKey = "var httpProtocol"
throw new Error("getFilterList not implemented"); var start = body.indexOf(sKey) + sKey.length
var end = body.indexOf(eKey) - 8
var videoSourcesStr = body.substring(start, end)
let videoSources = eval("(" + videoSourcesStr + ")");
var streams = []
var headers = this.getHeaders();
videoSources.forEach(videoSource => {
var url = this.source.baseUrl +videoSource.file
var quality = videoSource.label
streams.push({
url,
originalUrl: url,
quality,
headers
});
});
return streams.reverse();
} }
getSourcePreferences() { getSourcePreferences() {
return [ return [
{ {