mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-21 21:26:19 +01:00
178 lines
7.7 KiB
JavaScript
178 lines
7.7 KiB
JavaScript
async function searchResults(keyword) {
|
|
try {
|
|
const encodedKeyword = encodeURIComponent(keyword);
|
|
const responseText = await fetchv2(`https://post-eosin.vercel.app/api/proxy?url=${encodeURIComponent(`https://api.themoviedb.org/3/search/multi?api_key=9801b6b0548ad57581d111ea690c85c8&query=${encodedKeyword}`)}&simple=true`);
|
|
const data = await responseText.json();
|
|
|
|
const transformedResults = data.results.map(result => {
|
|
if(result.media_type === "movie" || result.title) {
|
|
return {
|
|
title: result.title || result.name || result.original_title || result.original_name,
|
|
image: `https://image.tmdb.org/t/p/w500${result.poster_path}`,
|
|
href: `movie/${result.id}`
|
|
};
|
|
} else if(result.media_type === "tv" || result.name) {
|
|
return {
|
|
title: result.name || result.title || result.original_name || result.original_title,
|
|
image: `https://image.tmdb.org/t/p/w500${result.poster_path}`,
|
|
href: `tv/${result.id}/1/1`
|
|
};
|
|
} else {
|
|
return {
|
|
title: result.title || result.name || result.original_name || result.original_title || "Untitled",
|
|
image: `https://image.tmdb.org/t/p/w500${result.poster_path}`,
|
|
href: `tv/${result.id}/1/1`
|
|
};
|
|
}
|
|
});
|
|
|
|
console.log('Transformed Results: ' + transformedResults);
|
|
return JSON.stringify(transformedResults);
|
|
} catch (error) {
|
|
console.log('Fetch error in searchResults:' + error);
|
|
return JSON.stringify([{ title: 'Error', image: '', href: '' }]);
|
|
}
|
|
}
|
|
|
|
async function extractDetails(url) {
|
|
try {
|
|
if(url.includes('movie')) {
|
|
const match = url.match(/movie\/([^\/]+)/);
|
|
if (!match) throw new Error("Invalid URL format");
|
|
|
|
const movieId = match[1];
|
|
const responseText = await fetchv2(`https://post-eosin.vercel.app/api/proxy?url=${encodeURIComponent(`https://api.themoviedb.org/3/movie/${movieId}?api_key=ad301b7cc82ffe19273e55e4d4206885`)}&simple=true`);
|
|
const data = await responseText.json();
|
|
|
|
const transformedResults = [{
|
|
description: data.overview || 'No description available',
|
|
aliases: `Duration: ${data.runtime ? data.runtime + " minutes" : 'Unknown'}`,
|
|
airdate: `Released: ${data.release_date ? data.release_date : 'Unknown'}`
|
|
}];
|
|
|
|
return JSON.stringify(transformedResults);
|
|
} else if(url.includes('tv')) {
|
|
const match = url.match(/tv\/([^\/]+)/);
|
|
if (!match) throw new Error("Invalid URL format");
|
|
|
|
const showId = match[1];
|
|
const responseText = await fetchv2(`https://post-eosin.vercel.app/api/proxy?url=${encodeURIComponent(`https://api.themoviedb.org/3/tv/${showId}?api_key=ad301b7cc82ffe19273e55e4d4206885`)}&simple=true`);
|
|
const data = await responseText.json();
|
|
|
|
const transformedResults = [{
|
|
description: data.overview || 'No description available',
|
|
aliases: `Duration: ${data.episode_run_time && data.episode_run_time.length ? data.episode_run_time.join(', ') + " minutes" : 'Unknown'}`,
|
|
airdate: `Aired: ${data.first_air_date ? data.first_air_date : 'Unknown'}`
|
|
}];
|
|
|
|
console.log(JSON.stringify(transformedResults));
|
|
return JSON.stringify(transformedResults);
|
|
} else {
|
|
throw new Error("Invalid URL format");
|
|
}
|
|
} catch (error) {
|
|
console.log('Details error: ' + error);
|
|
return JSON.stringify([{
|
|
description: 'Error loading description',
|
|
aliases: 'Duration: Unknown',
|
|
airdate: 'Aired/Released: Unknown'
|
|
}]);
|
|
}
|
|
}
|
|
|
|
async function extractEpisodes(url) {
|
|
try {
|
|
if(url.includes('movie')) {
|
|
const match = url.match(/movie\/([^\/]+)/);
|
|
|
|
if (!match) throw new Error("Invalid URL format");
|
|
|
|
const movieId = match[1];
|
|
|
|
const movie = [
|
|
{ href: `movie/${movieId}`, number: 1, title: "Full Movie" }
|
|
];
|
|
|
|
console.log(movie);
|
|
return JSON.stringify(movie);
|
|
} else if(url.includes('tv')) {
|
|
const match = url.match(/tv\/([^\/]+)\/([^\/]+)\/([^\/]+)/);
|
|
|
|
if (!match) throw new Error("Invalid URL format");
|
|
|
|
const showId = match[1];
|
|
|
|
const showResponseText = await fetchv2(`https://post-eosin.vercel.app/api/proxy?url=${encodeURIComponent(`https://api.themoviedb.org/3/tv/${showId}?api_key=ad301b7cc82ffe19273e55e4d4206885`)}&simple=true`);
|
|
const showData = await showResponseText.json();
|
|
|
|
let allEpisodes = [];
|
|
for (const season of showData.seasons) {
|
|
const seasonNumber = season.season_number;
|
|
|
|
if(seasonNumber === 0) continue;
|
|
|
|
const seasonResponseText = await fetchv2(`https://post-eosin.vercel.app/api/proxy?url=${encodeURIComponent(`https://api.themoviedb.org/3/tv/${showId}/season/${seasonNumber}?api_key=ad301b7cc82ffe19273e55e4d4206885`)}&simple=true`);
|
|
const seasonData = await seasonResponseText.json();
|
|
|
|
if (seasonData.episodes && seasonData.episodes.length) {
|
|
const episodes = seasonData.episodes.map(episode => ({
|
|
href: `tv/${showId}/${seasonNumber}/${episode.episode_number}`,
|
|
number: episode.episode_number,
|
|
title: episode.name || ""
|
|
}));
|
|
allEpisodes = allEpisodes.concat(episodes);
|
|
}
|
|
}
|
|
|
|
console.log(allEpisodes);
|
|
return JSON.stringify(allEpisodes);
|
|
} else {
|
|
throw new Error("Invalid URL format");
|
|
}
|
|
} catch (error) {
|
|
console.log('Fetch error in extractEpisodes: ' + error);
|
|
return JSON.stringify([]);
|
|
}
|
|
}
|
|
|
|
async function extractStreamUrl(url) {
|
|
try {
|
|
let apiUrl;
|
|
|
|
if (url.startsWith("tv/")) {
|
|
const [, id, season, episode] = url.split("/");
|
|
apiUrl = `https://videasier.onrender.com/api/extract?id=${id}&type=tv&season=${season}&episode=${episode}`;
|
|
console.log('TV API URL: ' + apiUrl);
|
|
}
|
|
else if (url.startsWith("movie/")) {
|
|
const [, id] = url.split("/");
|
|
apiUrl = `https://videasier.onrender.com/api/extract?id=${id}&type=movie`;
|
|
console.log('Movie API URL: ' + apiUrl);
|
|
}
|
|
|
|
if (apiUrl) {
|
|
const headers = {
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
|
|
'Connection': 'keep-alive',
|
|
'Keep-Alive': 'timeout=15, max=100',
|
|
'Accept': 'application/json, text/plain, */*'
|
|
};
|
|
|
|
const response = await fetchv2(apiUrl, headers);
|
|
const data = await response.json();
|
|
console.log('Stream URL data: ' + JSON.stringify(data));
|
|
if (data.success && data.m3u8) {
|
|
return data.m3u8;
|
|
}
|
|
return "https://files.catbox.moe/elfax8.mp4";
|
|
}
|
|
|
|
const response = await fetchv2(url);
|
|
const html = await response.text();
|
|
return "https://files.catbox.moe/elfax8.mp4";
|
|
|
|
} catch (err) {
|
|
console.error('Error in extractStreamUrl:'+ err);
|
|
return "https://files.catbox.moe/elfax8.mp4";
|
|
}
|
|
}
|