- Rode o código abaixo para instalar via
NPM
:
$ npm i @killovsky/mal
- Rode o código abaixo para instalar via
GIT
:
$ git clone https://github.com/KillovSky/MyAnimeList.git
- Ele faz scrapping de todas as informações possíveis das páginas de anime do My Anime List.
- Assim como o da NASA, muitas coisas, confira abaixo:
Neste módulo, os erros não afetam o funcionamento, o que significa que apesar de qualquer erro, os valores 'sempre' estarão lá para que você não seja afetado. [Leia o Q&A]
Os erros serão inseridos na resposta com uma explicação sobre o que causou eles, facilitando para você entender.
Os headers estão inseridos na resposta, facilitando para saber detalhes que podem lhe ser uteis.
Não existem dependências de módulos de terceiro, tudo é feito usando o puro
Node.js
.Cada linha do código possui uma explicação do que está rodando ou vai rodar, ou seja, o código INTEIRO é explicado, linha por linha.
Ao contrario da API oficial do MAL, esse módulo retorna dezenas de informações sem uma
API-KEY
ou 'limitação'.E muitas outras coisas, confira o código para entender!
- Basta abrir um terminal na pasta do módulo e digitar:
$ npm test
- Existem diversas formas de utilizar, mas como se trata de um script que faz uso de
Promises
, irei dar dois exemplos que funcionam bem, lembrando, você pode rodar sem especificar nada pois também funciona desta forma. - Clique em uma das linhas/setas abaixo para exibir os detalhes!
Descrição de cada parâmetro da execução:
// Adquire um anime aleatório
get()
// Enviando "TESTING_USAGE" na função...
// ...Executará em modo teste.
// Retorna o JSON padrão
defaults()
// Retorna apenas a URL de um anime
onlyurl()
// Retorna os animes padrões
animes()
// Retorna os códigos HTTP
http()
// Retorna a package JSON
packages()
Exemplos de uso:
// Usando .then | Modo de uso padrão
const mal = require('@killovsky/mal');
mal.get().then(data => {
// Faça seu código baseado na object 'data' aqui
// Exemplo: console.log(data);
})
// Usando await [async] | Modo de uso padrão
const mal = require('@killovsky/mal');
const data = await mal.get();
// Faça seu código aqui usando a const 'data'
// Exemplo: console.log(data);
Código já prontos [.then]:
// Código usando .then
const mal = require('@killovsky/mal');
mal.get().then(data => console.log(data));
Código já prontos [async/await]:
// Código usando await
const mal = require('@killovsky/mal');
const data = await mal.get();
console.log(data);
// Se você não sabe criar uma função async ou ainda não tiver uma, use este código abaixo:
(async () => {
// Cole um código com await aqui dentro
})();
Exemplo de resultado com explicações:
- Caso um dos valores, como as arrays, não seja encontrado ou obtenha erros,
false
será colocado no seu lugar.
{
"date": "String | Data [YYYY-MM-DD HH:MM:SS]",
"error": "true | false",
"error_msg": "String / false | Códigos de erros de execução",
"code": "Number | String | Código de erro HTTP",
"explain": {
"code": "Number / String | Código escrito de HTTP",
"why": "String | Explicação do código HTTP"
},
"headers": {
"date": "String | Data escrita da requisição",
"content-type": "String | Tipo de resposta",
"Outros": "E vários outros headers, faça uma requisição para obter todos."
},
"MAL": {
"url": "String / false | URL MAL do anime",
"image": "String / false | URL da capa do anime",
"title": "String / false | Nome padrão",
"title_synonyms": "String / false | Sinônimos do Nome",
"title_japanese": "String / false | Nome Japonês",
"title_french": "String / false | Nome Francês",
"title_english": "String / false | Nome Inglês",
"sort": {
"url": "String / false | URL MAL do tipo de transmissão",
"type": "String / false | Tipo de transmissão"
},
"episodes": "String / false | Número de episódios",
"list": {
"data": [
{
"platform": {
"id": "Número | ID?",
"name": "String | Nome da plataforma?",
"icon": "String | Nome do Icone?",
"type": "Número | Tipo?"
},
"available": "Boolean / true, false | Disponível na plataforma?",
"url": "String | URL na plataforma?"
}
],
"count": {
"available": "Número | ?",
"typicals": "Número | ?",
"others": "Número | ?",
"total": "Número | ?"
}
},
"status": "String / false | Status de transmissão",
"duration": "String / false | Duração do episodio",
"score": {
"votes": "String / false | Número de votos",
"value": "String / false | Porcentagem de aprovação"
},
"rank": "String / false | Número de ranking",
"popularity": "String / false | Número de popularidade",
"members": "String / false | Número de membros",
"favorites": "String / false | Número de favoritos",
"rating": "String / false | Classificação de idade",
"external": [
{
"name": "String / false | Nome do site externo",
"url": "String / false | URL's do site externo"
}
],
"characters": [
{
"voice": {
"name": "String / false | Nome do dublador/a",
"url": "String / false | URL da página MAL do dublador/a",
"images": "array / false | Fotos do dublador/a"
},
"name": "String / false | Nome do personagem",
"url": "String / false | URL's da página do personagem"
}
],
"ost": [
{
"hear": {
"spotify": "String / false | URL da música no Spotify",
"apple": "String / false | URL da música na Apple",
"amazon": "String / false | URL da música no Amazon",
"youtube": "String / false | URL da música no YouTube",
"other": "String / false | URL's de outros locais"
},
"name": "String / false | Nome da música",
"by": "String / false | Nome do autor",
"ep": "String / false | Episódios em que a OST apareceu"
}
],
"reviews": [
{
"name": "String / false | Nome do avaliador",
"date": "String / false | Data do comentário",
"url": "String / false | Link do perfil do avaliador",
"at": "String / false | Link da página do comentário",
"review": "String / false | Comentário do examinador"
}
],
"related": [
{
"name": "String / false | Nome de anime relacionado",
"url": "String / false | URL do anime relacionado"
}
],
"links": [
{
"name": "String / false | Nome da página MAL",
"url": "String / false | Link da página MAL"
}
],
"description": "String / false | Descrição do anime",
"stream": [
{
"name": "String / false | Nome do streaming",
"url": "String / false | URL do streaming"
}
],
"foruns": [
{
"name": "String / false | Nome da discussão",
"url": "String / false | URL MAL da discussão"
}
],
"recommendations": [
{
"name": "String / false | Nome da recomendação",
"url": "String / false | URL MAL da recomendação"
}
],
"aired": "String / false | Data de inicio ao fim da exibição",
"source": "String / false | Origem do anime",
"broadcast": "String / false | Dia da semana em que os episódios vão ao ar",
"premier": [
{
"at": "String / false | Tipo de premiação",
"url": "String / false | URL MAL do prêmio"
}
],
"genres": [
{
"name": "String / false | Nome do tema",
"url": "String / false | URL MAL do Tema"
}
],
"producers": [
{
"name": "String / false | Nome do produtor/a",
"url": "String / false | URL MAL do produtor/a"
}
]
}
}
Exemplo utilizável de resultado:
- A
Object
utilizável é grande demais para ser exibida aqui, sendo 2 a 3 vezes maior que a versão explicativa acima, para conferir um exemplo utilizável, acesse a "Github" oficial e abra o arquivo "default.json" ou "Clique Aqui".
- Isso é bem similar ao seu módulo do Projeto APOD da NASA, não é?
Sim, é por que quero criar sistemas fáceis de entender e usar, decidi que a melhor forma seria fazendo eles de forma similar, deixando o código bem simples para qualquer um que vier de outros projetos meus.
- Por que não usou
axios
,cheerio
ou módulos do tipo?
Esse meio exige instalação de módulos de terceiro, quero fazer meus sistemas sem dependências, nada além do próprio
Node.js
, pois tenho foco em uma única tarefa: ser simples.
- O que é proibido ao usar este módulo?
Você jamais deve abusar de qualquer programa, sempre crie um limitador de tempo ou armazene a ultima resposta se caso seja a mesma imagem e use ela, evite ficar utilizando um programa deste estilo muitas vezes seguidas sem esperar.
- Comunicado do DEV [Q&A]
Este módulo foi feito em menos de um dia de forma apressada e rápida, ele não está completo ainda e pode apresentar erros, embora obter erros graves seja um pouco difícil, mesmo assim, use com cuidado e sem abuso.
- Se obtiver algum problema, você pode me dizer Reportando nas Issues.
- Confira outros projetos meus Acessando Isto.
- Se gostar, doe para me ajudar a continuar desenvolvendo, mais informações Clicando Aqui - [Página do Projeto Íris]