source/broken/videasy/videasy.js
2025-12-06 17:28:33 +01:00

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";
}
}