mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
Merge pull request #182 from Swakshan/extension/autoembed
Update: Autoembed
This commit is contained in:
@@ -7,7 +7,7 @@ const mangayomiSources = [{
|
|||||||
"typeSource": "multi",
|
"typeSource": "multi",
|
||||||
"isManga": false,
|
"isManga": false,
|
||||||
"itemType": 1,
|
"itemType": 1,
|
||||||
"version": "1.2.1",
|
"version": "1.2.4",
|
||||||
"dateFormat": "",
|
"dateFormat": "",
|
||||||
"dateFormatLocale": "",
|
"dateFormatLocale": "",
|
||||||
"pkgPath": "anime/src/all/autoembed.js"
|
"pkgPath": "anime/src/all/autoembed.js"
|
||||||
@@ -156,15 +156,20 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
// Extracts the streams url for different resolutions from a hls stream.
|
// Extracts the streams url for different resolutions from a hls stream.
|
||||||
async extractStreams(url, lang = "", hdr = {}) {
|
async extractStreams(url, lang = "", hdr = {}) {
|
||||||
const response = await new Client().get(url);
|
|
||||||
const body = response.body;
|
|
||||||
const lines = body.split('\n');
|
|
||||||
var streams = [{
|
var streams = [{
|
||||||
url: url,
|
url: url,
|
||||||
originalUrl: url,
|
originalUrl: url,
|
||||||
quality: "auto",
|
quality: `${lang} - Auto`,
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
var pref = this.getPreference("autoembed_split_stream_quality");
|
||||||
|
if(!pref) return streams
|
||||||
|
|
||||||
|
|
||||||
|
const response = await new Client().get(url);
|
||||||
|
const body = response.body;
|
||||||
|
const lines = body.split('\n');
|
||||||
|
|
||||||
for (let i = 0; i < lines.length; i++) {
|
for (let i = 0; i < lines.length; i++) {
|
||||||
if (lines[i].startsWith('#EXT-X-STREAM-INF:')) {
|
if (lines[i].startsWith('#EXT-X-STREAM-INF:')) {
|
||||||
var resolution = lines[i].match(/RESOLUTION=(\d+x\d+)/)[1];
|
var resolution = lines[i].match(/RESOLUTION=(\d+x\d+)/)[1];
|
||||||
@@ -185,8 +190,18 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
// For some streams, we can form stream url using a default template.
|
// For some streams, we can form stream url using a default template.
|
||||||
async splitStreams(url, lang = "", hdr = {}) {
|
async splitStreams(url, lang = "", hdr = {}) {
|
||||||
var streams = [];
|
var streams = [{
|
||||||
var quality = ["auto", "360", "480", "720", "1080"]
|
url: url,
|
||||||
|
originalUrl: url,
|
||||||
|
quality: `${lang} - Auto`,
|
||||||
|
headers: hdr
|
||||||
|
}];
|
||||||
|
|
||||||
|
var pref = this.getPreference("autoembed_split_stream_quality");
|
||||||
|
if(!pref) return streams
|
||||||
|
|
||||||
|
|
||||||
|
var quality = ["360", "480", "720", "1080"]
|
||||||
for (var q of quality) {
|
for (var q of quality) {
|
||||||
var link = url
|
var link = url
|
||||||
if (q != "auto") {
|
if (q != "auto") {
|
||||||
@@ -253,7 +268,7 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
// For anime episode video list
|
// For anime episode video list
|
||||||
async getVideoList(url) {
|
async getVideoList(url) {
|
||||||
var streamAPI = parseInt(this.getPreference("autoembed_stream_source"))
|
var streamAPI = parseInt(this.getPreference("autoembed_stream_source_2"))
|
||||||
|
|
||||||
var parts = url.split("||");
|
var parts = url.split("||");
|
||||||
var media_type = parts[0];
|
var media_type = parts[0];
|
||||||
@@ -278,7 +293,7 @@ class DefaultExtension extends MProvider {
|
|||||||
var response = await new Client().get(api);
|
var response = await new Client().get(api);
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("play2.123embed.net unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = JSON.parse(response.body);
|
var body = JSON.parse(response.body);
|
||||||
@@ -300,14 +315,14 @@ class DefaultExtension extends MProvider {
|
|||||||
var response = await new Client().get(api);
|
var response = await new Client().get(api);
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("autoembed.cc unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
var body = response.body
|
var body = response.body
|
||||||
var sKey = '"file": '
|
var sKey = '"file": '
|
||||||
var eKey = "]});"
|
var eKey = "]});"
|
||||||
var start = body.indexOf(sKey)
|
var start = body.indexOf(sKey)
|
||||||
if (start < 0) {
|
if (start < 0) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("autoembed.cc videos unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
start += sKey.length
|
start += sKey.length
|
||||||
|
|
||||||
@@ -327,17 +342,17 @@ class DefaultExtension extends MProvider {
|
|||||||
id = `${id}&season=${s}&episode=${e}`
|
id = `${id}&season=${s}&episode=${e}`
|
||||||
}
|
}
|
||||||
var api = `https://flicky.host/player/desi.php?id=${id}`
|
var api = `https://flicky.host/player/desi.php?id=${id}`
|
||||||
var response = await new Client().get(api, { "Referer": "https://flicky.host/" ,"sec-fetch-dest":"iframe"});
|
var response = await new Client().get(api, { "Referer": "https://flicky.host/", "sec-fetch-dest": "iframe" });
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("flicky.host unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
var body = response.body
|
var body = response.body
|
||||||
var sKey = 'streams = '
|
var sKey = 'streams = '
|
||||||
var eKey = "];"
|
var eKey = "];"
|
||||||
var start = body.indexOf(sKey)
|
var start = body.indexOf(sKey)
|
||||||
if (start < 0) {
|
if (start < 0) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("flicky.host videos unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
start += sKey.length
|
start += sKey.length
|
||||||
|
|
||||||
@@ -361,7 +376,7 @@ class DefaultExtension extends MProvider {
|
|||||||
var response = await new Client().get(api);
|
var response = await new Client().get(api);
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("vidapi.click unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = JSON.parse(response.body);
|
var body = JSON.parse(response.body);
|
||||||
@@ -378,43 +393,73 @@ class DefaultExtension extends MProvider {
|
|||||||
var response = await new Client().get(api, hdr);
|
var response = await new Client().get(api, hdr);
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("hexa.watch unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = JSON.parse(response.body);
|
var body = JSON.parse(response.body);
|
||||||
var strms = body.streams
|
var strms = body.streams
|
||||||
for (var strm of strms) {
|
for (var strm of strms) {
|
||||||
|
var streamLink = strm.url;
|
||||||
|
if (streamLink.length > 0) {
|
||||||
streams.push({
|
streams.push({
|
||||||
url: strm.url,
|
url: strm.url,
|
||||||
originalUrl: strm.url,
|
originalUrl: strm.url,
|
||||||
quality: strm.quality,
|
quality: `${strm.label} - Auto`,
|
||||||
headers: strm.headers
|
headers: strm.headers
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 7: {
|
case 7: {
|
||||||
if (media_type == "tv") {
|
if (media_type == "tv") {
|
||||||
id = `${id}/${s}/${e}`
|
id = `${id}/${s}/${e}`
|
||||||
}
|
}
|
||||||
var api = `https://febapi.bludclart.com/${media_type}/${id}`
|
var api = `https://vidsrc.su/embed/${media_type}/${id}`
|
||||||
var response = await new Client().get(api);
|
var response = await new Client().get(api);
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("vidsrc.su unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
var body = response.body
|
||||||
|
var sKey = 'fixedServers = '
|
||||||
|
var eKey = "];"
|
||||||
|
var start = body.indexOf(sKey)
|
||||||
|
if (start < 0) {
|
||||||
|
throw new Error("vidsrc.su videos unavailable\nPlease choose a different server");
|
||||||
|
}
|
||||||
|
start += sKey.length
|
||||||
|
|
||||||
var body = JSON.parse(response.body);
|
var end = body.substring(start,).indexOf(eKey) + start + 1
|
||||||
var strms = body.streams.qualities
|
var strms = body.substring(start, end)
|
||||||
for (var strm in strms) {
|
|
||||||
var quality = strm === "ORG" ? "auto" : strm
|
// Split the data into lines
|
||||||
var url = strms[strm]
|
var lines = strms.split('\n');
|
||||||
streams.push({
|
|
||||||
url: url,
|
// Regex to match URLs in quotes that start with https://
|
||||||
originalUrl: url,
|
var regex = /url:\s*'(https:\/\/[^']+)'/;
|
||||||
quality: quality,
|
var availableStreams = [];
|
||||||
|
|
||||||
|
// Process each line
|
||||||
|
lines.forEach(line => {
|
||||||
|
var match = line.match(regex);
|
||||||
|
if (match && match[1]) {
|
||||||
|
// Extract the label from the line
|
||||||
|
var labelMatch = line.match(/label:\s*'([^']+)'/);
|
||||||
|
var label = labelMatch ? labelMatch[1] : "Unknown";
|
||||||
|
// Add to our results
|
||||||
|
availableStreams.push({
|
||||||
|
url: match[1],
|
||||||
|
label: label,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var stream of availableStreams) {
|
||||||
|
var streamSplit = await this.extractStreams(stream.url, stream.label);
|
||||||
|
streams = [...streams, ...streamSplit]
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
@@ -425,7 +470,7 @@ class DefaultExtension extends MProvider {
|
|||||||
var response = await new Client().get(api, this.getHeaders());
|
var response = await new Client().get(api, this.getHeaders());
|
||||||
|
|
||||||
if (response.statusCode != 200) {
|
if (response.statusCode != 200) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("tom.autoembed.cc unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = JSON.parse(response.body);
|
var body = JSON.parse(response.body);
|
||||||
@@ -436,7 +481,7 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
}
|
}
|
||||||
if (streams.length < 1) {
|
if (streams.length < 1) {
|
||||||
throw new Error("Video unavailable");
|
throw new Error("No streams unavailable\nPlease choose a different server");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -483,12 +528,20 @@ class DefaultExtension extends MProvider {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'autoembed_stream_source',
|
key: 'autoembed_split_stream_quality',
|
||||||
|
"switchPreferenceCompat": {
|
||||||
|
'title': 'Split stream into different quality streams',
|
||||||
|
"summary": "Split stream Auto into 360p/720p/1080p",
|
||||||
|
"value": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'autoembed_stream_source_2',
|
||||||
listPreference: {
|
listPreference: {
|
||||||
title: 'Preferred stream source',
|
title: 'Preferred stream source',
|
||||||
summary: '',
|
summary: '',
|
||||||
valueIndex: 0,
|
valueIndex: 0,
|
||||||
entries: ["tom.autoembed.cc", "123embed.net", "autoembed.cc - Indian languages", "flicky.host - Indian languages", "vidapi.click", "hexa.watch", "febapi (supports 4K)"],
|
entries: ["tom.autoembed.cc", "123embed.net", "autoembed.cc - Indian languages", "flicky.host - Indian languages", "vidapi.click", "hexa.watch", "vidsrc.su"],
|
||||||
entryValues: ["1", "2", "3", "4", "5", "6", "7"]
|
entryValues: ["1", "2", "3", "4", "5", "6", "7"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user