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