mirror of
https://git.luna-app.eu/50n50/sources
synced 2025-12-21 21:26:19 +01:00
Upload
This commit is contained in:
commit
09c423e95a
276 changed files with 54396 additions and 0 deletions
178
broken/videasy/videasy.js
Normal file
178
broken/videasy/videasy.js
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
async function searchResults(keyword) {
|
||||
try {
|
||||
const encodedKeyword = encodeURIComponent(keyword);
|
||||
const responseText = await fetchv2(`https://api.themoviedb.org/3/search/multi?api_key=9801b6b0548ad57581d111ea690c85c8&query=${encodedKeyword}`);
|
||||
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://api.themoviedb.org/3/movie/${movieId}?api_key=ad301b7cc82ffe19273e55e4d4206885`);
|
||||
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://api.themoviedb.org/3/tv/${showId}?api_key=ad301b7cc82ffe19273e55e4d4206885`);
|
||||
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://api.themoviedb.org/3/tv/${showId}?api_key=ad301b7cc82ffe19273e55e4d4206885`);
|
||||
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://api.themoviedb.org/3/tv/${showId}/season/${seasonNumber}?api_key=ad301b7cc82ffe19273e55e4d4206885`);
|
||||
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";
|
||||
}
|
||||
}
|
||||
19
broken/videasy/videasy.json
Normal file
19
broken/videasy/videasy.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"sourceName": "VidEasy",
|
||||
"iconUrl": "https://www.videasy.net/logo.png",
|
||||
"author": {
|
||||
"name": "50/50",
|
||||
"icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s"
|
||||
},
|
||||
"version": "1.0.0",
|
||||
"language": "English",
|
||||
"streamType": "HLS",
|
||||
"quality": "4K - 1080p - 720p",
|
||||
"baseUrl": "https://player.videasy.net/",
|
||||
"searchBaseUrl": "https://player.videasy.net/",
|
||||
"scriptUrl": "https://gitlab.com/50n50/sources/-/raw/main/videasy/videasy.js",
|
||||
"type": "shows/movies",
|
||||
"asyncJS": true,
|
||||
"softsub": false,
|
||||
"downloadSupport": true
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue