1
0
forked from 50n50/sources

Add 123anime/123anime.js

This commit is contained in:
aka paul
2026-02-07 15:06:26 +00:00
parent ecc07a4c8c
commit 494f820496
+129
View File
@@ -0,0 +1,129 @@
async function searchResults(keyword) {
const results = [];
try {
const response = await fetchv2("https://123animes.ru/search?keyword=" + encodeURIComponent(keyword));
const html = await response.text();
const filmListMatch = html.match(/<div class="film-list">([\s\S]*?)<div class="clearfix"><\/div>/);
if (!filmListMatch) {
return JSON.stringify(results);
}
const filmList = filmListMatch[1];
const itemRegex = /<div class="item">[\s\S]*?<a href="([^"]+)"[^>]*class="poster"[\s\S]*?<img[^>]*alt="([^"]+)"[^>]*src="([^"]+)"/g;
let match;
while ((match = itemRegex.exec(filmList)) !== null) {
results.push({
title: match[2].trim(),
image: "https://123animes.ru" + match[3].trim(),
href: "https://123animes.ru" + match[1].trim()
});
}
return JSON.stringify(results);
} catch (err) {
return JSON.stringify([{
title: "Error",
image: "Error",
href: "Error"
}]);
}
}
async function extractDetails(url) {
try {
const response = await fetchv2(url);
const html = await response.text();
let description = "N/A";
let aliases = "N/A";
let airdate = "N/A";
const descMatch = html.match(/<div class="desc">([\s\S]*?)<\/div>/);
if (descMatch) {
description = descMatch[1].replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
}
const aliasMatch = html.match(/<p class="alias">([^<]*)<\/p>/);
if (aliasMatch) {
aliases = aliasMatch[1].trim();
}
const airdateMatch = html.match(/<dt>Released:<\/dt>\s*<dd>\s*<a[^>]*>(\d+)<\/a>/);
if (airdateMatch) {
airdate = airdateMatch[1].trim();
}
return JSON.stringify([{
description: description,
aliases: aliases,
airdate: airdate
}]);
} catch (err) {
return JSON.stringify([{
description: "Error",
aliases: "Error",
airdate: "Error"
}]);
}
}
async function extractEpisodes(url) {
const results = [];
try {
const animeId = url.split('/').pop();
const response = await fetchv2("https://123animes.ru/ajax/film/sv?id=" + animeId);
const jsonData = await response.json();
const html = jsonData.html;
const episodesMatch = html.match(/<ul class="episodes range"[^>]*>([\s\S]*?)<\/ul>/);
if (!episodesMatch) {
return JSON.stringify(results);
}
const episodesHTML = episodesMatch[1];
const episodeRegex = /data-pop='(\d+)'/g;
let match;
const seenEpisodes = new Set();
while ((match = episodeRegex.exec(episodesHTML)) !== null) {
const episodeNum = parseInt(match[1], 10);
if (!seenEpisodes.has(episodeNum)) {
seenEpisodes.add(episodeNum);
results.push({
href: animeId + "/" + episodeNum + "/vidstreaming.io",
number: episodeNum
});
}
}
return JSON.stringify(results);
} catch (err) {
return JSON.stringify([{
href: "Error",
number: "Error"
}]);
}
}
async function extractStreamUrl(ID) {
try {
const response = await fetchv2("https://123animes.ru/ajax/episode/info?epr=" + ID);
const data = await response.json();
const target = data.target;
const streamID = target.split('/').pop();
const responseTwo = await fetchv2("https://play.shipimagesbolt.online/hs/getSources?id=" + streamID);
const dataTwo = await responseTwo.json();
const stream = dataTwo.sources;
return stream;
} catch (err) {
return "https://error.org/";
}
}