Примечание
API перешел на версию 2, что, естественно, внесло критические изменения. Если вы хотите использовать предыдущую версию этого API, обратитесь к последней стабильной версии.
Важный
https://api-aniwatch.onrender.com предназначен только для демонстрации API и включает ограничение скорости для минимизации потребления полосы пропускания. Рекомендуется развернуть собственный экземпляр для личного использования, настроив API так, как вам нужно.
Этот API является неофициальным API для hianime.to и никаким другим образом официально не связан с ним.
Содержимое, предоставляемое этим API, не принадлежит мне и не размещается мной. Они принадлежат своим владельцам. Этот API просто демонстрирует, как создать API, который парсит веб-сайты и использует их контент.
Установка
Местный
Докер
Конверты
Разместите свой экземпляр
Версель
Оказывать
Документация
ПОЛУЧИТЬ домашнюю страницу аниме
ПОЛУЧИТЬ аниме О нас Информация
ПОЛУЧИТЬ Результаты поиска
ПОЛУЧИТЬ поисковые предложения
ПОЛУЧИТЬ аниме продюсера
ПОЛУЧИТЬ Жанр аниме
ПОЛУЧИТЬ Категории Аниме
ПОЛУЧИТЬ примерное расписание
ПОЛУЧИТЬ аниме-эпизоды
ПОЛУЧИТЬ серверы аниме-эпизодов
ПОЛУЧИТЬ ссылки на потоковые передачи аниме-эпизодов
Разработка
Авторы
Спасибо
Поддерживать
Лицензия
Звездная история
Клонируйте репозиторий и перейдите в каталог.
git-клон https://github.com/ghoshRitesh12/aniwatch-api.gitcd aniwatch-api
Установите все зависимости.
npm i #или установка пряжи или pnpm i
Запустите сервер!
npm start #или начало пряжи или начало pnpm
Теперь сервер должен работать по адресу http://localhost:4000.
Образ Docker доступен в реестре контейнеров GitHub.
Выполните следующие команды, чтобы получить и запустить образ Docker.
докер вытащить ghcr.io/ghoshritesh12/aniwatch docker run -p 4000:4000 ghcr.io/ghoshritesh12/aniwatch
Приведенная выше команда запустит сервер через порт 4000. Вы можете получить доступ к серверу по адресу http://localhost:4000, а также можете изменить порт, изменив параметр -p
на -p <port>:4000
.
Вы также можете добавить флаг -d
для запуска контейнера в автономном режиме.
Дополнительную информацию можно найти в файле .env.example
ANIWATCH_API_PORT
: номер порта API aniwatch.
ANIWATCH_API_WINDOW_MS
: продолжительность отслеживания запросов на ограничение скорости (в миллисекундах)
ANIWATCH_API_MAX_REQS
: максимальное количество запросов за период времени ANIWATCH_API_WINDOW_MS
.
ANIWATCH_API_CORS_ALLOWED_ORIGINS
: разрешенные источники, разделенные запятыми и без пробелов между ними.
ANIWATCH_VERCEL_DEPLOYMENT
: требуется для различения развертывания Vercel от других, установите для него значение true для любого другого ненулевого значения.
ANIWATCH_API_HOSTNAME
: установите это имя хоста вашего экземпляра API, чтобы включить ограничение скорости. Не указывайте это значение, если вы не хотите ограничивать скорость.
Осторожность
Для личного развертывания:
Если вы хотите иметь ограничение скорости в своем приложении, установите для окружения ANIWATCH_API_HOSTNAME
имя хоста развернутого экземпляра, в противном случае не устанавливайте и не используйте это окружение вообще. Если вы установите для этого env неправильное значение, вы можете столкнуться с другими проблемами.
Удалите блок if из файла server.ts
, занимающий строки с 71 по 83.
Разверните собственный экземпляр Aniwatch API на Vercel.
Примечание
При развертывании в Vercel установите для окружения с именем ANIWATCH_VERCEL_DEPLOYMENT
значение true
или любое ненулевое значение, но это окружение должно присутствовать.
Разверните свой собственный экземпляр Aniwatch API на Render.
Конечные точки, предоставляемые API, перечислены ниже с примерами, в которых используется Fetch API, но вы можете использовать любую библиотеку http.
GET
домашнюю страницу аниме/api/v2/хианиме/домой
const resp = await fetch("/api/v2/hianime/home");const data = await resp.json();console.log(data);
{ успех: правда, данные: {жанры: ["Боевик", "Тачки", "Приключения", ...],latestEpisodeAnimes: [ {id: строка, имя: строка, постер: строка, тип: строка, эпизоды: { суб: номер, dub: номер,} }, {...},],spotlightAnimes: [ {id: строка,имя: строка,jname: строка,плакат: строка,описание: строка,ранг: номер,otherInfo: string[],эпизоды: { sub: номер, дубляж: номер,}, }, {...},],top10Animes: { сегодня: [{ эпизоды: {sub: номер,дублирование: номер, }, id: строка , имя: строка, плакат: строка, ранг: номер},{...}, ], месяц: [...], неделя: [...]},topAiringAnimes: [ {id: строка,имя: строка ,jname: строка, плакат: строка, }, {...},],topUpcomingAnimes: [ {id: строка, имя: строка, плакат: строка, продолжительность: строка, тип: строка, рейтинг: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...},],trendingAnimes: [ {id: строка,имя: строка,плакат: строка,ранг: номер, }, {...},],mostPopularAnimes: [ {id: строка,имя: строка, плакат: строка, тип: строка, эпизоды: { sub: номер, дубляж: номер,} }, {...},],mostFavoriteAnimes: [ {id: строка, имя: строка, плакат: строка, тип: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...},],latestCompletedAnimes: [ {id: строка, имя: строка, плакат: строка, тип: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...},], }}
? Вернуться к началу
GET
аниме О нас Информация/api/v2/hianime/аниме/{animeId}
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
animeId | нить | Уникальный идентификатор аниме (в случае с кебабом). | Да | -- |
const resp = await fetch("/api/v2/hianime/anime/attack-on-titan-112");const data = await resp.json();console.log(data);
{ успех: правда, данные: {аниме: [ информация: {id: строка, имя: строка, постер: строка, описание: строка, статистика: { рейтинг: строка, качество: строка, эпизоды: {sub: номер, дубляж: номер }, тип: строка, продолжительность: строка},рекламные видео: [ {title: строка | не определено, источник: строка | не определено,миниатюра: строка | undefined }, {...},],characterVoiceActor: [ {character: { id: строка, плакат: строка, имя: строка, приведение: строка}, voiceActor: { id: строка, плакат: строка, имя: строка, cast: string} }, {...},] } moreInfo: {aired: string,genres: ["Action", "Mystery", ...],status: string,studios: string,duration: строка... }],mostPopularAnimes: [ {episodes: { sub: номер, дубляж: номер,},id: строка,jname: строка,имя: строка,плакат: строка,тип: строка }, {...} ,],recommendedAnimes: [ {id: строка, имя: строка, плакат: строка, продолжительность: строка, тип: строка, рейтинг: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...},], linkedAnimes: [ {id: строка, имя: строка, плакат: строка, продолжительность: строка, тип: строка, рейтинг: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...},],сезоны: [ {id: string,name: string,title: string,poster: string,isCurrent: boolean }, {...}] }}
? Вернуться к началу
GET
Результаты поиска# базовый пример/api/v2/hianime/search?q={query}&page={page}# расширенный example/api/v2/hianime/search?q={query}&page={page}&genres={genres}&type={type}&sort={sort}& Season={ Season}&la nguage={sub_or_dub}&status={status}&rated={rating}&start_date={гггг-мм-дд}&end_date={гггг-мм-дд}&score={score}
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
q | нить | Поисковый запрос, т.е. название искомого элемента. | Да | -- |
page | число | Номер страницы результата. | Нет | 1 |
type | нить | Тип аниме. например: movie | Нет | -- |
status | нить | Статус аниме. например: finished-airing | Нет | -- |
rated | нить | Рейтинг аниме. например: r+ или pg-13 | Нет | -- |
score | нить | Оценка аниме. например: good или very-good | Нет | -- |
season | нить | Сезон вышедшего в эфир аниме. например: spring | Нет | -- |
language | нить | Языковая категория аниме. например: sub или sub-&-dub | Нет | -- |
start_date | нить | Дата начала аниме (гггг-мм-дд). например: 2014-10-2 | Нет | -- |
end_date | нить | Дата окончания аниме (гггг-мм-дд). например: 2010-12-4 | Нет | -- |
sort | нить | Порядок сортировки результата аниме. например: recently-added | Нет | -- |
genres | нить | Жанр аниме через запятую. например: isekai,shounen | Нет | -- |
[!TIP] И для
start_date
, иend_date
необходимо указать год. Если вы хотите опустить дату или месяц, укажите вместо этого0
. Например: пропустить дату -> 2014-10-0, пропустить месяц -> 2014-0-12, пропустить оба -> 2014-0-0
// базовый exampleconst resp = await fetch("/api/v2/hianime/search?q=titan&page=1");const data = await resp.json();console.log(data);// расширенный exampleconst resp = жду получения( "/api/v2/hianime/search?q=girls&genres=action,adventure&type=movie&sort=score& Season=spring&language=dub&status=finished-airing&rated=pg-13&start_date=2014-0-0&score=good");const data = await соответственно. json();console.log(данные);
{ успех: правда, данные: {аниме: [ {id: строка, имя: строка, постер: строка, продолжительность: строка, тип: строка, рейтинг: строка, эпизоды: { суб: номер, дубляж: номер,} }, {...} ,],mostPopularAnimes: [ {эпизоды: { sub: номер, дубляж: номер,},id: строка,jname: строка,имя: строка,плакат: строка,тип: строка }, {...},],currentPage : 1, totalPages: 1, hasNextPage: false, searchQuery: строка, searchFilters: { [filter_name]: [filter_value] ...} }}
? Вернуться к началу
GET
поисковые предложения/api/v2/hianime/search/suggestion?q={query}
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
q | нить | Запрос поискового предложения. | Да | -- |
const resp = await fetch("/api/v2/hianime/search/suggestion?q=monster");const data = await resp.json();console.log(data);
{ успех: правда, data: {suggestions: [ {id: string,name: string,poster: string,jname: string,moreInfo: ["21 января 2022", "Фильм", "17m"] }, {...},] }}
? Вернуться к началу
GET
аниме продюсера/api/v2/hianime/producer/{name}?page={page}
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
name | нить | Имя продюсера аниме (в случае с шашлыком). | Да | -- |
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
page | число | Номер страницы результата. | Нет | 1 |
const resp = await fetch("/api/v2/hianime/producer/toei-animation?page=2");const data = await resp.json();console.log(data);
{ успех: правда, data: {producerName: "Toei Animation Anime",аниме: [ {id: строка,имя: строка,постер: строка,продолжительность: строка,тип: строка,рейтинг: строка,эпизоды: { суб:номер, дубляж: номер, } }, {...},],top10Animes: { сегодня: [{ эпизоды: {sub: номер, дубляж: номер, }, id: строка, имя: строка, плакат: строка, ранг: номер},{...}, ], месяц: [...], неделя: [...]},topAiringAnimes: [ {эпизоды: { суб: номер, дубляж: номер,},id: строка,jname : строка, имя: строка, плакат: строка, тип: строка }, {...},], currentPage: 2, totalPages: 11, hasNextPage: true }}
? Вернуться к началу
GET
Жанр аниме/api/v2/hianime/genre/{name}?page={page}
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
name | нить | Название жанра аниме (в случае с кебабом). | Да | -- |
Параметр | Тип | Описание | Необходимый? | По умолчанию |
---|---|---|---|---|
page | число | Номер страницы результата. | Нет | 1 |
const resp = await fetch("/api/v2/hianime/genre/shounen?page=2");const data = await resp.json();console.log(data);
{ успех: правда, data: {genreName: "Сёнэн-аниме",аниме: [ {