mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
anime(dramacool): Added stream extraction
This commit is contained in:
@@ -6,7 +6,7 @@ const mangayomiSources = [{
|
|||||||
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://dramacool.com.tr",
|
"iconUrl": "https://www.google.com/s2/favicons?sz=128&domain=https://dramacool.com.tr",
|
||||||
"typeSource": "multi",
|
"typeSource": "multi",
|
||||||
"itemType": 1,
|
"itemType": 1,
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"pkgPath": "anime/src/all/dramacool.js"
|
"pkgPath": "anime/src/all/dramacool.js"
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@@ -84,22 +84,22 @@ class DefaultExtension extends MProvider {
|
|||||||
|
|
||||||
var mins = 0
|
var mins = 0
|
||||||
var mons = 0
|
var mons = 0
|
||||||
if(unit.includes('minute')){
|
if (unit.includes('minute')) {
|
||||||
mins = t;
|
mins = t;
|
||||||
}else if(unit.includes('hour')){
|
} else if (unit.includes('hour')) {
|
||||||
mins = t * 60;
|
mins = t * 60;
|
||||||
}else if(unit.includes('day')){
|
} else if (unit.includes('day')) {
|
||||||
mins = t * 60 * 24;
|
mins = t * 60 * 24;
|
||||||
}else if(unit.includes('week')){
|
} else if (unit.includes('week')) {
|
||||||
mins = t * 60 * 24 * 7;
|
mins = t * 60 * 24 * 7;
|
||||||
}else if(unit.includes('month')){
|
} else if (unit.includes('month')) {
|
||||||
mons = t;
|
mons = t;
|
||||||
}
|
}
|
||||||
var now = new Date();
|
var now = new Date();
|
||||||
now.setMinutes(now.getMinutes() - mins)
|
now.setMinutes(now.getMinutes() - mins)
|
||||||
now.setMinutes(now.getMonth() - mons)
|
now.setMinutes(now.getMonth() - mons)
|
||||||
var pastDate = new Date(now);
|
var pastDate = new Date(now);
|
||||||
return ""+pastDate.valueOf();
|
return "" + pastDate.valueOf();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDetail(url) {
|
async getDetail(url) {
|
||||||
@@ -149,9 +149,120 @@ class DefaultExtension extends MProvider {
|
|||||||
async cleanHtmlContent(html) {
|
async cleanHtmlContent(html) {
|
||||||
throw new Error("cleanHtmlContent not implemented");
|
throw new Error("cleanHtmlContent not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decodeBase64(f) {
|
||||||
|
var g = {},
|
||||||
|
b = 65,
|
||||||
|
d = 0,
|
||||||
|
a, c = 0,
|
||||||
|
h, e = "",
|
||||||
|
k = String.fromCharCode,
|
||||||
|
l = f.length;
|
||||||
|
for (a = ""; 91 > b;) a += k(b++);
|
||||||
|
a += a.toLowerCase() + "0123456789+/";
|
||||||
|
for (b = 0; 64 > b; b++) g[a.charAt(b)] = b;
|
||||||
|
for (a = 0; a < l; a++)
|
||||||
|
for (b = g[f.charAt(a)], d = (d << 6) + b, c += 6; 8 <= c;)((h = d >>> (c -= 8) & 255) || a < l - 2) && (e += k(h));
|
||||||
|
return e
|
||||||
|
};
|
||||||
|
|
||||||
|
extractDramacoolEmbed(doc) {
|
||||||
|
var streams = []
|
||||||
|
var script = doc.select('script').at(-2)
|
||||||
|
var unpack = unpackJs(script.text)
|
||||||
|
|
||||||
|
var skey = 'hls2":"'
|
||||||
|
var eKey = '"};jwplayer'
|
||||||
|
var start = unpack.indexOf(skey) + skey.length
|
||||||
|
var end = unpack.indexOf(eKey, start)
|
||||||
|
var track = unpack.substring(start, end)
|
||||||
|
|
||||||
|
streams.push({
|
||||||
|
url: track,
|
||||||
|
originalUrl: track,
|
||||||
|
quality: "Dramacool - Auto",
|
||||||
|
});
|
||||||
|
|
||||||
|
return streams
|
||||||
|
}
|
||||||
|
|
||||||
|
extractAsianLoadEmbed(doc) {
|
||||||
|
var streams = []
|
||||||
|
var script = doc.select('script').at(-2)
|
||||||
|
var unpack = script.text
|
||||||
|
|
||||||
|
// tracks
|
||||||
|
var skey = '|image|'
|
||||||
|
var eKey = '|setup|'
|
||||||
|
var start = unpack.indexOf(skey) + skey.length
|
||||||
|
var end = unpack.indexOf(eKey, start)
|
||||||
|
var track = unpack.substring(start, end)
|
||||||
|
var streamUrl = this.decodeBase64(track)
|
||||||
|
|
||||||
|
// subs
|
||||||
|
eKey = "|default|"
|
||||||
|
var end = unpack.indexOf(eKey)
|
||||||
|
var subs = []
|
||||||
|
if(end != -1) {
|
||||||
|
skey = "|type|"
|
||||||
|
var start = unpack.indexOf(skey) + skey.length
|
||||||
|
var subTracks = unpack.substring(start, end).split("|")
|
||||||
|
subs.push({
|
||||||
|
file: this.decodeBase64(subTracks[1]),
|
||||||
|
label: subTracks[0]
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
streams.push({
|
||||||
|
url: streamUrl,
|
||||||
|
originalUrl: streamUrl,
|
||||||
|
quality: "Asianload - Auto",
|
||||||
|
subtitles: subs
|
||||||
|
});
|
||||||
|
|
||||||
|
// Download url
|
||||||
|
skey = '|_blank|'
|
||||||
|
eKey = '|open|'
|
||||||
|
start = unpack.indexOf(skey) + skey.length
|
||||||
|
end = unpack.indexOf(eKey, start)
|
||||||
|
track = unpack.substring(start, end)
|
||||||
|
var downUrl = this.decodeBase64(track)
|
||||||
|
|
||||||
|
streams.push({
|
||||||
|
url: downUrl,
|
||||||
|
originalUrl: downUrl,
|
||||||
|
quality: "Asianload - Direct Download",
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return streams
|
||||||
|
}
|
||||||
|
|
||||||
// For anime episode video list
|
// For anime episode video list
|
||||||
async getVideoList(url) {
|
async getVideoList(url) {
|
||||||
throw new Error("getVideoList not implemented");
|
var res = await this.request(url)
|
||||||
|
var iframe = res.selectFirst("iframe").attr("src").trim()
|
||||||
|
if (iframe == "") {
|
||||||
|
throw new Error("No iframe found")
|
||||||
|
}
|
||||||
|
|
||||||
|
var streams = []
|
||||||
|
|
||||||
|
res = await new Client().get(iframe)
|
||||||
|
var doc = new Document(res.body);
|
||||||
|
|
||||||
|
if (iframe.includes("//dramacool")) {
|
||||||
|
|
||||||
|
streams = this.extractDramacoolEmbed(doc)
|
||||||
|
} else if (iframe.includes("//asianload")) {
|
||||||
|
|
||||||
|
streams = this.extractAsianLoadEmbed(doc)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return streams
|
||||||
|
|
||||||
}
|
}
|
||||||
// For manga chapter pages
|
// For manga chapter pages
|
||||||
async getPageList(url) {
|
async getPageList(url) {
|
||||||
|
|||||||
Reference in New Issue
Block a user