mirror of
https://github.com/Radiquum/AniX.git
synced 2025-09-05 22:15:36 +05:00
feat: start implementing api proxy with ability to use hooks: #8
This commit is contained in:
parent
9931962a6b
commit
6f45876240
6 changed files with 1720 additions and 0 deletions
28
api-prox/hooks/profile.example.ts
Normal file
28
api-prox/hooks/profile.example.ts
Normal file
|
@ -0,0 +1,28 @@
|
|||
// хук меняет юзернейм 'Anixart' на 'Anixartiki'
|
||||
|
||||
import { logger } from "../shared";
|
||||
|
||||
export function match(path: string): boolean {
|
||||
// id профиля 1, это профиль Anixart (разработчиков)
|
||||
if (path == "/profile/1") return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
export async function get(data: any, url: URL) {
|
||||
const newUname = "Anixartiki";
|
||||
|
||||
// проверяем что есть поле 'profile' и оно не равно 'null', что значит что мы получили данные с апи и можно двигаться дальше
|
||||
// иначе возвращаем оригинальные данные
|
||||
if (!data.hasOwnProperty("profile") || !data.profile) return data;
|
||||
|
||||
// выводим сообщение в лог, если уровень логгера 'debug'
|
||||
logger.debugHook(
|
||||
`Changed username of '${data["profile"]["login"]}' (${data["profile"]["id"]}) to ${newUname}`
|
||||
);
|
||||
|
||||
// меняем поле на новый юзернейм
|
||||
data["profile"]["login"] = newUname;
|
||||
|
||||
// возвращаем изменённые данные
|
||||
return data;
|
||||
}
|
41
api-prox/hooks/release.ts
Normal file
41
api-prox/hooks/release.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
// хук добавляет рейтинг шикимори в поле note релиза
|
||||
|
||||
export function match(path: string): boolean {
|
||||
// используем только страницы с путём /release/<id>
|
||||
const pathRe = /\/release\/\d+/
|
||||
if (pathRe.test(path)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
export async function get(data: any, url: URL) {
|
||||
// проверяем что есть поле 'release'
|
||||
// иначе возвращаем оригинальные данные
|
||||
if (!data.hasOwnProperty("release")) return data;
|
||||
|
||||
// ищём аниме на шикимори по названию, т.к. ид аниме аниксарт и шикимори разные и нет никакого референса друг на друга
|
||||
const shikiIdRes = await fetch(
|
||||
`https://shikimori.one/api/animes?search=${data["release"]["title_original"]}`
|
||||
);
|
||||
if (!shikiIdRes.ok) return data; // если при поиске произошла ошибка, то возвращаем оригинальные данные
|
||||
const shikiIdJson = await shikiIdRes.json();
|
||||
if (shikiIdJson.length == 0) return data; // если нет результатов, то возвращаем оригинальные данные
|
||||
|
||||
const shikiId = shikiIdJson[0]["id"]; // берём ид от первого результата
|
||||
|
||||
// повторяем процесс, уже с ид от шикимори
|
||||
const shikiAnimRes = await fetch(
|
||||
`https://shikimori.one/api/animes/${shikiId}}`
|
||||
);
|
||||
if (!shikiAnimRes.ok) return data;
|
||||
const shikiAnimJson = await shikiAnimRes.json();
|
||||
|
||||
// пушим строки в список, что-бы было легче их объединить
|
||||
const noteBuilder = [];
|
||||
if (data["release"]["note"] != null) noteBuilder.push(`${data.note}<hr/>`); // если в поле note уже что-то есть, разделяем значение и рейтинг
|
||||
noteBuilder.push(`<b>Рейтинг Shikimori:</b> ${shikiAnimJson.score}★<br>`); // добавляем рейтинг от шикимори
|
||||
data["release"]["note"] = noteBuilder.toString(); // заменяем оригинальное поле нашей строкой
|
||||
data["release"]["id_shikimori"] = shikiId; // добавляем айди шикимори в ответ, потому что почему нет
|
||||
|
||||
// возвращаем изменённые данные
|
||||
return data;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue