Observação
A API mudou para a versão 2, introduzindo naturalmente alterações significativas. Se você quiser usar a versão anterior desta API, consulte a última versão estável.
Importante
https://api-aniwatch.onrender.com destina-se apenas a demonstrar a API e tem limitação de taxa habilitada para minimizar o consumo de largura de banda. Recomenda-se implantar sua própria instância para uso pessoal, personalizando a API conforme necessário.
Esta API é apenas uma API não oficial para hianime.to e não está oficialmente relacionada a ela de outra forma.
O conteúdo que esta API fornece não é meu, nem é hospedado por mim. Estes pertencem aos seus respectivos proprietários. Esta API apenas demonstra como construir uma API que coleta sites e usa seu conteúdo.
Instalação
Local
Docker
Ambientes
Hospede sua instância
Vercel
Renderizar
Documentação
OBTER a página inicial do anime
OBTER informações sobre anime
OBTER resultados de pesquisa
OBTER sugestões de pesquisa
GET Produtor de Animes
OBTER Animes de gênero
OBTER Categoria Animes
OBTER horários estimados
OBTER episódios de anime
OBTER servidores de episódios de anime
OBTENHA links de streaming de episódios de anime
Desenvolvimento
Colaboradores
Obrigado
Apoiar
Licença
História das Estrelas
Clone o repositório e vá para o diretório.
clone git https://github.com/ghoshRitesh12/aniwatch-api.gitcd aniwatch-api
Instale todas as dependências.
npm i #ou yarn install ou pnpm i
Inicie o servidor!
npm start #ou yarn start ou pnpm start
Agora o servidor deve estar rodando em http://localhost:4000
A imagem Docker está disponível no GitHub Container Registry.
Execute os seguintes comandos para extrair e executar a imagem do Docker.
docker pull ghcr.io/ghoshritesh12/aniwatch docker run -p 4000:4000 ghcr.io/ghoshritesh12/aniwatch
O comando acima iniciará o servidor na porta 4000. Você pode acessar o servidor em http://localhost:4000 e também pode alterar a porta alterando a opção -p
para -p <port>:4000
.
Você também pode adicionar o sinalizador -d
para executar o contêiner no modo desanexado.
Mais informações podem ser encontradas no arquivo .env.example
ANIWATCH_API_PORT
: número da porta da API aniwatch
ANIWATCH_API_WINDOW_MS
: duração para rastrear solicitações de limitação de taxa (em milissegundos)
ANIWATCH_API_MAX_REQS
: número máximo de solicitações no período ANIWATCH_API_WINDOW_MS
ANIWATCH_API_CORS_ALLOWED_ORIGINS
: origens permitidas, separadas por vírgulas e sem espaços entre elas
ANIWATCH_VERCEL_DEPLOYMENT
: necessário para distinguir a implantação vercel de outras, defina-a como verdadeira para qualquer outro valor diferente de zero
ANIWATCH_API_HOSTNAME
: defina como o nome do host da sua instância da API para ativar a limitação de taxa, não tenha esse valor se não desejar limitar a taxa
Cuidado
Para implantações pessoais:
Se você deseja limitar a taxa em seu aplicativo, defina o env ANIWATCH_API_HOSTNAME
como o nome do host da sua instância implantada, caso contrário, não defina nem tenha esse env. Se você definir este ambiente com um valor incorreto, poderá enfrentar outros problemas.
Remova o bloco if do arquivo server.ts
, abrangendo as linhas 71 a 83.
Implante sua própria instância da API Aniwatch no Vercel.
Observação
Ao implantar no vercel, defina um ambiente chamado ANIWATCH_VERCEL_DEPLOYMENT
como true
ou qualquer valor diferente de zero, mas esse ambiente deve estar presente.
Implante sua própria instância da API Aniwatch no Render.
Os endpoints expostos pela API estão listados abaixo com exemplos que usam a API Fetch, mas você pode usar qualquer biblioteca http.
GET
a página inicial do anime/api/v2/hianime/home
const resp = aguardar fetch("/api/v2/hianime/home");const data = aguardar resp.json();console.log(data);
{ sucesso: verdadeiro, dados: {gêneros: ["Ação", "Carros", "Aventura", ...],últimoEpisódioAnimes: [ {id: string,nome: string,poster: string,tipo: string,episódios: { sub: número, dub: número,} }, {...},],spotlightAnimes: [ {id: string,nome: string,jname: string,poster: string,descrição: string,classificação: número,otherInfo: string[],episódios: { sub: número, dub: número,}, }, {...},],top10Animes: { hoje: [{ episódios: {sub: número,dub: número, }, id: string , nome: string, pôster: string, classificação: número},{...}, ], mês: [...], semana: [...]},topAiringAnimes: [ {id: string,nome: string ,jname: string, pôster: string, }, {...},],topUpcomingAnimes: [ {id: string,nome: string,poster: string,duração: string,tipo: string,rating: string,episódios: { sub: número, dub: número,} }, {...},],trendingAnimes: [ {id: string,nome: string,poster: string,classificação: número, }, {...},],mostPopularAnimes: [ {id: string,nome: string, poster: string, tipo: string, episódios: { sub: número, dub: número,} }, {...},],mostFavoriteAnimes: [ {id: string,nome: string,poster: string,type: string,episódios: { sub: número, dub: número,} }, {...},],latestCompletedAnimes: [ {id: string,nome: string,poster: string,tipo: string,episódios: { sub: número, dublagem: número,} }, {...},], }}
? Voltar ao topo
GET
informações sobre anime/api/v2/hianime/anime/{animeId}
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
animeId | corda | O ID exclusivo do anime (no caso do kebab). | Sim | -- |
const resp = aguardar fetch("/api/v2/hianime/anime/attack-on-titan-112");const data = aguardar resp.json();console.log(data);
{ sucesso: verdadeiro, dados: {anime: [informações: {id: string, nome: string, pôster: string, descrição: string, estatísticas: { classificação: string, qualidade: string, episódios: {sub: número, dublagem: número }, tipo: string, duração: string},promocionaisVídeos: [ {title: string | indefinido, fonte: string | indefinido, miniatura: string | indefinido }, {...},],characterVoiceActor: [ {personagem: {id: string, pôster: string, nome: string, cast: string},voiceActor: { id: string, pôster: string, nome: string, cast: string} }, {...},] } moreInfo: {exibido: string,genres: ["Ação", "Mistério", ...],status: string,studios: string,duração: string.. . }],mostPopularAnimes: [ {episódios: { sub: number, dub: number,},id: string,jname: string,name: string,poster: string,type: string }, {...},],recommendedAnimes : [ {id: string, nome: string, pôster: string, duração: string, tipo: string, classificação: string, episódios: { sub: número, dub: número,} }, {...},], RelatedAnimes: [ {id: string,nome: string,poster: string,duração: string,tipo: string,rating: string,episódios: { sub: número, dub: número,} }, {...},], temporadas: [ {id: string,nome: string,título: string,poster: string,isCurrent: boolean }, {...}] }}
? Voltar ao topo
GET
resultados de pesquisa# exemplo básico/api/v2/hianime/search?q={query}&page={page}# avançado exemplo/api/v2/hianime/search?q={query}&page={page}&genres={genres}&type={type}&sort={sort}&season={season}&language={sub_or_dub}&status={status} &rated={classificação}&start_date={aaaa-mm-dd}&end_date={aaaa-mm-dd}&pontuação={pontuação}
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
q | corda | A consulta de pesquisa, ou seja, o título do item que você está procurando. | Sim | -- |
page | número | O número da página do resultado. | Não | 1 |
type | corda | Tipo de anime. ex.: movie | Não | -- |
status | corda | Status do anime. ex.: finished-airing | Não | -- |
rated | corda | Avaliação do anime. por exemplo: r+ ou pg-13 | Não | -- |
score | corda | Pontuação do anime. ex.: good ou very-good | Não | -- |
season | corda | Temporada do anime exibido. ex.: spring | Não | -- |
language | corda | Categoria de idioma do anime. por exemplo: sub ou sub-&-dub | Não | -- |
start_date | corda | Data de início do anime (aaaa-mm-dd). por exemplo: 2014-10-2 | Não | -- |
end_date | corda | Data de término do anime (aaaa-mm-dd). por exemplo: 2010-12-4 | Não | -- |
sort | corda | Ordem de classificação do resultado do anime. por exemplo: recently-added | Não | -- |
genres | corda | Gênero do anime, separados por vírgulas. ex.: isekai,shounen | Não | -- |
[!TIP] Para
start_date
eend_date
, o ano deve ser mencionado. Se você quiser omitir a data ou o mês, especifique0
. Ex: omitindo data -> 2014-10-0, omitindo mês -> 2014-0-12, omitindo ambos -> 2014-0-0
// exemplo básicoconst resp = await fetch("/api/v2/hianime/search?q=titan&page=1");const data = await resp.json();console.log(data);// exemplo avançadoconst resp = aguarde buscar ( "/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 = aguarda resp. json();console.log(dados);
{ sucesso: verdadeiro, dados: {animes: [ {id: string, nome: string, pôster: string, duração: string, tipo: string, classificação: string, episódios: { sub: número, dub: número,} }, {...} ,],mostPopularAnimes: [ {episódios: { sub: number, dub: number,},id: string,jname: string,name: string,poster: string,type: string }, {...},],currentPage : 1,totalPages: 1,hasNextPage: false,searchQuery: string,searchFilters: { [nome_do_filtro]: [valor_do_filtro] ...} }}
? Voltar ao topo
GET
sugestões de pesquisa/api/v2/hianime/search/suggestion?q={consulta}
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
q | corda | A consulta de sugestão de pesquisa. | Sim | -- |
const resp = aguardar fetch("/api/v2/hianime/search/suggestion?q=monster");const data = aguardar resp.json();console.log(data);
{ sucesso: verdadeiro, dados: {sugestões: [ {id: string,nome: string,poster: string,jname: string,maisInfo: ["21 de janeiro de 2022", "Filme", "17m"] }, {...},] }}
? Voltar ao topo
GET
Produtor de Animes/api/v2/hianime/producer/{nome}?page={página}
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
name | corda | O nome do produtor do anime (no caso do kebab). | Sim | -- |
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
page | número | O número da página do resultado. | Não | 1 |
const resp = aguardar fetch("/api/v2/hianime/producer/toei-animation?page=2");const data = aguardar resp.json();console.log(data);
{ sucesso: verdadeiro, dados: {nome do produtor: "Toei Animation Anime", animes: [ {id: string, nome: string, pôster: string, duração: string, tipo: string, classificação: string, episódios: { sub: número, dub: número, } }, {...},],top10Animes: { hoje: [{ episódios: {sub: número,dub: número, }, id: string, nome: string, pôster: string, classificação: número},{. ..}, ], mês: [...], semana: [...]},topAiringAnimes: [ {episódios: { sub: número, dub: número,},id: string,jname: string,nome: string,poster: string, tipo: string }, {...},], currentPage: 2,totalPages: 11,hasNextPage: true }}
? Voltar ao topo
GET
Animes de gênero/api/v2/hianime/genre/{nome}?page={página}
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
name | corda | O nome do gênero de anime (no caso kebab). | Sim | -- |
Parâmetro | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
page | número | O número da página do resultado. | Não | 1 |
const resp = aguardar fetch("/api/v2/hianime/genre/shounen?page=2");const data = aguardar resp.json();console.log(data);
{ sucesso: verdadeiro, dados: {genreName: "Shounen Anime",animes: [ {