Update aniliberty/aniliberty.js
This commit is contained in:
@@ -1,12 +1,23 @@
|
||||
// AniLiberty module for Sora (AsyncJS)
|
||||
// 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;
|
||||
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) {
|
||||
@@ -18,8 +29,8 @@ function pickBestHls(ep) {
|
||||
// ------------------------------------------------------------
|
||||
async function checkApiStatus() {
|
||||
const domains = [
|
||||
"https://anilibria.top/api/v1/",
|
||||
"https://aniliberty.top/api/v1/",
|
||||
"https://anilibria.top/api/v1/",
|
||||
"https://anilibria.wtf/api/v1/"
|
||||
];
|
||||
for (const base of domains) {
|
||||
@@ -29,7 +40,7 @@ async function checkApiStatus() {
|
||||
if (data?.is_alive || data?.result === "ok") return base;
|
||||
} catch (_) {}
|
||||
}
|
||||
return "https://anilibria.top/api/v1/";
|
||||
return "https://aniliberty.top/api/v1/";
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
@@ -38,6 +49,7 @@ async function checkApiStatus() {
|
||||
async function searchResults(keyword) {
|
||||
try {
|
||||
const base = await checkApiStatus();
|
||||
const origin = originFromApi(base);
|
||||
const url = `${base}app/search/releases?query=${encodeURIComponent(keyword)}&include=id,name.main,poster.src`;
|
||||
|
||||
const res = await fetchv2(url);
|
||||
@@ -45,7 +57,7 @@ async function searchResults(keyword) {
|
||||
|
||||
const out = (Array.isArray(data) ? data : []).map(it => ({
|
||||
title: it?.name?.main || "Unknown title",
|
||||
image: fullImg(it?.poster?.src),
|
||||
image: fullImg(it?.poster?.src, origin),
|
||||
href:
|
||||
`${base}anime/releases/${it.id}?` +
|
||||
[
|
||||
@@ -99,7 +111,9 @@ async function extractEpisodes(url) {
|
||||
const res = await fetchv2(url);
|
||||
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 out = eps.map((ep, idx) => {
|
||||
@@ -111,7 +125,7 @@ async function extractEpisodes(url) {
|
||||
: (Number.isFinite(ep?.sort_order) ? ep.sort_order : (idx + 1));
|
||||
|
||||
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
|
||||
const opening = (ep?.opening && Number.isFinite(ep.opening.start) && Number.isFinite(ep.opening.stop))
|
||||
|
||||
Reference in New Issue
Block a user