forked from 50n50/sources
Update aniliberty/aniliberty.js
This commit is contained in:
@@ -1,12 +1,23 @@
|
|||||||
// AniLiberty module for Sora (AsyncJS)
|
// AniLiberty module for Sora (AsyncJS)
|
||||||
// Author: emp0ry
|
// Author: emp0ry
|
||||||
// Version: 1.0.1
|
// Version: 1.0.2
|
||||||
|
|
||||||
const IMAGE_HOST = "https://anilibria.top";
|
const DEFAULT_IMAGE_HOST = "https://aniliberty.top";
|
||||||
|
|
||||||
function fullImg(path) {
|
function originFromApi(urlOrBase) {
|
||||||
|
if (!urlOrBase) return DEFAULT_IMAGE_HOST;
|
||||||
|
const raw = String(urlOrBase);
|
||||||
|
const m = raw.match(/^(https?:\/\/[^/]+)\/api\/v1\/?/i);
|
||||||
|
if (m && m[1]) return m[1];
|
||||||
|
const m2 = raw.match(/^(https?:\/\/[^/]+)/i);
|
||||||
|
return (m2 && m2[1]) ? m2[1] : DEFAULT_IMAGE_HOST;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fullImg(path, host) {
|
||||||
if (!path) return;
|
if (!path) return;
|
||||||
return path.startsWith("http") ? path : `${IMAGE_HOST}${path}`;
|
if (path.startsWith("http")) return path;
|
||||||
|
const base = host || DEFAULT_IMAGE_HOST;
|
||||||
|
return `${base}${path}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function pickBestHls(ep) {
|
function pickBestHls(ep) {
|
||||||
@@ -18,8 +29,8 @@ function pickBestHls(ep) {
|
|||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
async function checkApiStatus() {
|
async function checkApiStatus() {
|
||||||
const domains = [
|
const domains = [
|
||||||
"https://anilibria.top/api/v1/",
|
|
||||||
"https://aniliberty.top/api/v1/",
|
"https://aniliberty.top/api/v1/",
|
||||||
|
"https://anilibria.top/api/v1/",
|
||||||
"https://anilibria.wtf/api/v1/"
|
"https://anilibria.wtf/api/v1/"
|
||||||
];
|
];
|
||||||
for (const base of domains) {
|
for (const base of domains) {
|
||||||
@@ -29,7 +40,7 @@ async function checkApiStatus() {
|
|||||||
if (data?.is_alive || data?.result === "ok") return base;
|
if (data?.is_alive || data?.result === "ok") return base;
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
return "https://anilibria.top/api/v1/";
|
return "https://aniliberty.top/api/v1/";
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@@ -38,6 +49,7 @@ async function checkApiStatus() {
|
|||||||
async function searchResults(keyword) {
|
async function searchResults(keyword) {
|
||||||
try {
|
try {
|
||||||
const base = await checkApiStatus();
|
const base = await checkApiStatus();
|
||||||
|
const origin = originFromApi(base);
|
||||||
const url = `${base}app/search/releases?query=${encodeURIComponent(keyword)}&include=id,name.main,poster.src`;
|
const url = `${base}app/search/releases?query=${encodeURIComponent(keyword)}&include=id,name.main,poster.src`;
|
||||||
|
|
||||||
const res = await fetchv2(url);
|
const res = await fetchv2(url);
|
||||||
@@ -45,7 +57,7 @@ async function searchResults(keyword) {
|
|||||||
|
|
||||||
const out = (Array.isArray(data) ? data : []).map(it => ({
|
const out = (Array.isArray(data) ? data : []).map(it => ({
|
||||||
title: it?.name?.main || "Unknown title",
|
title: it?.name?.main || "Unknown title",
|
||||||
image: fullImg(it?.poster?.src),
|
image: fullImg(it?.poster?.src, origin),
|
||||||
href:
|
href:
|
||||||
`${base}anime/releases/${it.id}?` +
|
`${base}anime/releases/${it.id}?` +
|
||||||
[
|
[
|
||||||
@@ -99,7 +111,9 @@ async function extractEpisodes(url) {
|
|||||||
const res = await fetchv2(url);
|
const res = await fetchv2(url);
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
|
|
||||||
const seriesPoster = fullImg(data?.poster?.src);
|
const origin = originFromApi(url);
|
||||||
|
|
||||||
|
const seriesPoster = fullImg(data?.poster?.src, origin);
|
||||||
const eps = Array.isArray(data?.episodes) ? data.episodes : [];
|
const eps = Array.isArray(data?.episodes) ? data.episodes : [];
|
||||||
|
|
||||||
const out = eps.map((ep, idx) => {
|
const out = eps.map((ep, idx) => {
|
||||||
@@ -111,7 +125,7 @@ async function extractEpisodes(url) {
|
|||||||
: (Number.isFinite(ep?.sort_order) ? ep.sort_order : (idx + 1));
|
: (Number.isFinite(ep?.sort_order) ? ep.sort_order : (idx + 1));
|
||||||
|
|
||||||
const title = ep?.name ? String(ep.name) : `Episode ${num}`;
|
const title = ep?.name ? String(ep.name) : `Episode ${num}`;
|
||||||
const image = fullImg(ep?.preview?.src) || seriesPoster;
|
const image = fullImg(ep?.preview?.src, origin) || seriesPoster;
|
||||||
|
|
||||||
// Build skip blocks only if numbers present
|
// Build skip blocks only if numbers present
|
||||||
const opening = (ep?.opening && Number.isFinite(ep.opening.start) && Number.isFinite(ep.opening.stop))
|
const opening = (ep?.opening && Number.isFinite(ep.opening.start) && Number.isFinite(ep.opening.stop))
|
||||||
|
|||||||
Reference in New Issue
Block a user