Merge pull request 'added animelib when extracting streams in animelib module' (#3) from ibro/sources:main into main

Reviewed-on: https://git.luna-app.eu/50n50/sources/pulls/3
This commit is contained in:
aka paul 2025-12-21 02:56:59 +00:00
commit 7a6f22e51b

View file

@ -80,42 +80,112 @@ async function extractStreamUrl(ID) {
const data = json.data || {}; const data = json.data || {};
const players = data.players || []; const players = data.players || [];
// const parserPromises = players
// .filter(player => player.src && player.team && player.team.name)
// .map(async (player) => {
// try {
// const kodikUrl = "https:" + player.src;
// const qualitiesJson = await kodikParser(kodikUrl);
// const qualities = JSON.parse(qualitiesJson);
// let highestQuality = null;
// let highestQualityNum = 0;
// for (const quality in qualities) {
// if (qualities[quality].src) {
// const qualityNum = parseInt(quality.replace('p', '')) || 0;
// if (qualityNum > highestQualityNum) {
// highestQualityNum = qualityNum;
// highestQuality = qualities[quality].src;
// }
// }
// }
// if (highestQuality) {
// if (highestQuality.startsWith('//')) {
// highestQuality = 'https:' + highestQuality;
// }
// return {
// title: player.team.name,
// streamUrl: highestQuality,
// headers: {
// "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
// "Referer": "https://kodik.info/"
// }
// };
// }
// return null;
// } catch (err) {
// return null;
// }
// });
players.sort((a, b) => {
const order = { Animelib: 0, Kodik: 1 };
return (order[a.player] ?? 99) - (order[b.player] ?? 99);
});
const parserPromises = players const parserPromises = players
.filter(player => player.src && player.team && player.team.name) .filter(player => player.team && player.team.name)
.map(async (player) => { .map(async (player) => {
try { try {
const kodikUrl = "https:" + player.src; let streamUrl = null;
const qualitiesJson = await kodikParser(kodikUrl);
const qualities = JSON.parse(qualitiesJson);
let highestQuality = null;
let highestQualityNum = 0; let highestQualityNum = 0;
for (const quality in qualities) { if (player.player === "Animelib" && player.video && player.video.quality) {
if (qualities[quality].src) { const qualities = player.video.quality;
const qualityNum = parseInt(quality.replace('p', '')) || 0;
if (qualityNum > highestQualityNum) { console.log(qualities);
highestQualityNum = qualityNum;
highestQuality = qualities[quality].src; for (const qualityItem of qualities) {
if (qualityItem.href && qualityItem.quality > highestQualityNum) {
highestQualityNum = qualityItem.quality;
streamUrl = qualityItem.href;
console.log("Found Animelib quality: " + qualityItem.quality + " URL: " + streamUrl);
} }
} }
}
// Animelib URLs are relative, prepend base URL
if (highestQuality) { if (streamUrl && !streamUrl.startsWith('http')) {
// https://video1.cdnlibs.org/.аs/
if (highestQuality.startsWith('//')) { // https://video2.anilib.me/.аs/
highestQuality = 'https:' + highestQuality; // https://video3.anilib.me/.аs/
streamUrl = 'https://video1.cdnlibs.org/.%D0%B0s/' + streamUrl;
}
} else if (player.player === "Kodik" && player.src) {
const kodikUrl = "https:" + player.src;
const qualitiesJson = await kodikParser(kodikUrl);
const qualities = JSON.parse(qualitiesJson);
for (const quality in qualities) {
if (qualities[quality].src) {
const qualityNum = parseInt(quality.replace('p', '')) || 0;
if (qualityNum > highestQualityNum) {
highestQualityNum = qualityNum;
streamUrl = qualities[quality].src;
}
}
} }
if (streamUrl && streamUrl.startsWith('//')) {
streamUrl = 'https:' + streamUrl;
}
}
if (streamUrl) {
return { return {
title: player.team.name, title: player.team.name + (highestQualityNum ? ` (${highestQualityNum}p)` : '') + (player.player === "Animelib" ? " (Animelib)" : " (Kodik)"),
streamUrl: highestQuality, streamUrl,
headers: { headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Referer": "https://kodik.info/" "Referer": player.player === "Kodik" ? "https://kodik.info/" : "https://v3.animelib.org/"
} }
}; };
} }
return null; return null;
} catch (err) { } catch (err) {
return null; return null;