From d35b83e61dfeda49c760fb66c32068621e475a80 Mon Sep 17 00:00:00 2001 From: aka paul <50n50@noreply.localhost> Date: Sat, 17 Jan 2026 23:19:08 +0000 Subject: [PATCH] Update anicrush/anicrush.js --- anicrush/anicrush.js | 65 +++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/anicrush/anicrush.js b/anicrush/anicrush.js index c39fc0a..f7b93d7 100644 --- a/anicrush/anicrush.js +++ b/anicrush/anicrush.js @@ -23,11 +23,20 @@ async function searchResults(keyword) { if (data.status && data.result && data.result.movies) { for (const movie of data.result.movies) { - results.push({ - title: movie.name_english || movie.name, - image: getImage(movie.poster_path), - href: "/watch/" + movie.slug + "." + movie.id - }); + if (movie.has_sub) { + results.push({ + title: (movie.name_english || movie.name) + " [SUB]", + image: getImage(movie.poster_path), + href: "/watch/" + movie.slug + "." + movie.id + "?type=SUB" + }); + } + if (movie.has_dub) { + results.push({ + title: (movie.name_english || movie.name) + " [DUB]", + image: getImage(movie.poster_path), + href: "/watch/" + movie.slug + "." + movie.id + "?type=DUB" + }); + } } } @@ -93,7 +102,9 @@ async function extractDetails(url) { async function extractEpisodes(url) { const results = []; - const id = url.split('.').pop(); + const id = url.split('.').pop().split('?')[0]; + const typeMatch = url.match(/[?&]type=([^&]+)/); + const type = typeMatch ? typeMatch[1] : "SUB"; const headers = { "Host": "api.anicrush.to", @@ -122,7 +133,7 @@ async function extractEpisodes(url) { const season = data.result[seasonKey]; const isMovie = seasonKey === "001 - 001"; for (const ep of season) { - const href = isMovie ? `?_movieId=${id}&ep=1` : `?_movieId=${id}&ep=${ep.number}`; + const href = isMovie ? `?_movieId=${id}&ep=1&type=${type}` : `?_movieId=${id}&ep=${ep.number}&type=${type}`; results.push({ href: href, number: ep.number @@ -138,7 +149,12 @@ async function extractEpisodes(url) { } } -async function extractStreamUrl(ID) { +async function extractStreamUrl(ID, type = "DUB") { + const typeMatch = ID.match(/[?&]type=([^&]+)/); + if (typeMatch) { + type = typeMatch[1]; + } + const headers = { "Host": "api.anicrush.to", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0", @@ -206,6 +222,7 @@ async function extractStreamUrl(ID) { const getSourcesUrl = `${defaultDomain}embed-2/v3/e-1/getSources?id=${fileId}&_k=${nonce}`; const getSourcesResp = await fetchv2(getSourcesUrl, headersTwo); const getSourcesJson = await getSourcesResp.json(); + console.log(JSON.stringify(getSourcesJson)); const videoUrl = getSourcesJson.sources?.[0]?.file || ""; if (!videoUrl) return null; @@ -227,9 +244,9 @@ async function extractStreamUrl(ID) { }; const serverPromises = []; - if (subServerId) serverPromises.push(processServer(subServerId, "SUB")); - if (dubServerId) serverPromises.push(processServer(dubServerId, "DUB")); - if (rawServerId) serverPromises.push(processServer(rawServerId, "RAW")); + if (type === "SUB" && subServerId) serverPromises.push(processServer(subServerId, "SUB")); + else if (type === "DUB" && dubServerId) serverPromises.push(processServer(dubServerId, "DUB")); + else if (type === "RAW" && rawServerId) serverPromises.push(processServer(rawServerId, "RAW")); const results = await Promise.all(serverPromises); const streams = results.filter(r => r !== null); @@ -238,22 +255,24 @@ async function extractStreamUrl(ID) { return "https://error.org/"; } - const englishTrack = streams[0].sourcesData.tracks?.find(t => t.kind === "captions" && t.label === "English"); - const subtitle = englishTrack ? englishTrack.file : ""; - const finalStreams = streams.map(s => ({ title: s.title, streamUrl: s.streamUrl, headers: s.headers })); - console.log(JSON.stringify({ + + let subtitle = null; + if (streams.length > 0 && streams[0].sourcesData.tracks) { + const englishTrack = streams[0].sourcesData.tracks.find(t => t.kind === "captions" && t.label === "English"); + subtitle = englishTrack ? englishTrack.file : null; + } + + const result = { streams: finalStreams, subtitle: subtitle - })); - return JSON.stringify({ - streams: finalStreams, - subtitles: subtitle - }); + }; + console.log(JSON.stringify(result)); + return JSON.stringify(result); } catch (err) { console.log(err); return "https://error.oraag/"; @@ -275,8 +294,4 @@ function getImage(path, type = "poster") { const imageUrl = `${baseUrl}/${size}/100/${reversedHash}.${ext}`; return imageUrl; -} - - - - +} \ No newline at end of file