Giter Club home page Giter Club logo

tabnews.js's Introduction

Tabnews.js



Uma biblioteca javascript feita para interagir com a API do Tabnews

Instalação

npm install tabnews.js
yarn add tabnews.js

Exemplo de uso

import { Client } from "tabnews.js"
const client = new Client()

client.login({
    email: "[email protected]",
    password: "examplePassword",
    //ou então você pode logar direto pelo token, porém o token fica inválido depois de algum tempo.
    token: "token"
}).then((user) => {
    console.log(`Logado na conta ${user.username} com o token ${user.token}`)
}).catch(console.error)

Documentação(Não está pronta.)

Alerta: recomendo expandir tudo caso for ler as docs!

Classe Client(clique para expandir)

Eventos: ready, destroyed

Construtor

O constructor da classe Client aceita 1 parâmetro opcional, que é um objeto de configuração O objeto de configuração se parece com isso:

Nome Descrição tipo
tabnewsUrl uma url customizada do tabnews. string, opcional
log se o client deve usar o logger ou não boolean, opcional
customAgentUser um agent user customizado pro client, use o nome do seu projeto aqui! string, opcional
debug se o client deve usar o modo debug ou não(não é recomendado usar) boolean, opcional

Métodos do client

Método login

O metódo login aceita 1 parâmetro obrigatório, que é um objeto de login. O objeto de login se parece com isso:

Nome Descrição tipo
email o email da conta string, opcional
password a senha da conta string, opcional
token o token da conta string, opcional

Caso você use um token, você não precisa usar um email e password, caso você não use um token, você precisa usar o email e o password

esse método retorna uma Promise contendo um ClientUserData, ele também emite o evento ready

Método destroy

Este método destroi a conexão do client com a api. Para você se conectar novamente você tera que usar o método login ele também emite o evento destroyed


Propriedades do client

Nome Descrição tipo
connected se o client está conectado boolean
token o token do client string
contents um gerenciador de contéudos ContentManager
status um gerenciador do status do tabnews StatusManager
users um gerenciador de usuários UsersManager
user um gerenciador do usuário do client UserManager

Vale lembrar que as propriedades contents, status, users, user só estão disponiveis após o login do bot!


ContentManager

Um content manager, como o nome já diz é responsavel por gerenciar os conteudos. Através dele você vai consegur publicar, deletar, editar, dar upvote/downvote em conteúdos, obter os conteúdos relevantes, etc...
A seguir estão os metodos de um ContentManager

Método get

O método get obtém um conteudo com base em 2 parâmetros obrigatórios, sendo eles author e slug.
Exemplo: se o author for igual a Gustavo33 e o slug for tabnews-js-uma-biblioteca-javascript-para-interagir-com-a-api-do-tabnews o contéudo que ele vai obter vai ser: https://www.tabnews.com.br/Gustavo33/tabnews-js-uma-biblioteca-javascript-para-interagir-com-a-api-do-tabnews Esse método retorna uma Promise contendo um Content

Método getContents

Este método obtém os contéudos mais novos, mais antigos, e mais relevantes com base no primeiro parâmetro. o segundo parâmetro é a página que ele vai obter os conteúdos(Cada página tem 30 conteúdos) Pârametros:

Nome Valores obrigatório
strategy "new" - "old" - "relevant" Não, o default é "new".
page Qualquer número Não, o default é 1.

Esse método retorna uma Promise contendo um Array de Contents.

Método post

Este método posta um contéudo, ele aceita 1 pârametro obrigatório, que o objeto listado abaixo:

Nome Descrição obrigatório Efeito
parentId o id de um conteúdo não obrigatório faz o conteúdo ser uma resposta ao conteúdo com id igual ao parentId
customSlug um slug customizado não obrigatório adiciona um slug customizado
title o título do conteúdo não obrigatório caso seja uma resposta adiciona um título ao conteúdo
body o corpo do conteúdo, você pode usar markdown aqui nesse campo obrigatório adiciona texto ao conteúdo
sourceUrl a url da fonte não obrigatório adiciona uma fonte ao conteúdo

Esse método retorna uma Promise contendo um Content

Método edit

Este método edita um conteúdo, ele aceita 3 pârametros obrigatórios, sendo eles:

Nome Descrição
author o autor do conteúdo
slug o slug do conteúdo
content o que vai ser alterado

o pârametro content é um objeto, as propriedades desse objeto estão listadas abaixo:

Nome Descrição obrigatório Efeito
title o título do conteúdo não obrigatório adiciona um título ao conteúdo
body o corpo do conteúdo, você pode usar markdown aqui nesse campo não obrigatório adiciona texto ao conteúdo
sourceUrl a url da fonte não obrigatório adiciona uma fonte ao conteúdo

Esse método retorna uma Promise contendo um Content

Método delete

O método delete deleta um conteudo com base em 2 parâmetros obrigatórios, sendo eles author e slug.
Exemplo: se o author for igual a Gustavo33 e o slug for tabnews-js-uma-biblioteca-javascript-para-interagir-com-a-api-do-tabnews o contéudo que ele vai deletar vai ser: https://www.tabnews.com.br/Gustavo33/tabnews-js-uma-biblioteca-javascript-para-interagir-com-a-api-do-tabnews Esse método retorna uma Promise contendo um Content

Método upvote e downvote

os Métodos upvote e downvote funcionam com base em 2 parâmetros obrigatórios, sendo eles author e slug.
E com base nesses pârametros ele da um upvote/downvote Esse método retorna uma Promise contendo um objeto parecido com isso:

Nome Descrição
tabcoins O numero de tabcoins que o contéudo ficou depois do upvote/downvote

Método watch

o método watch começa a assistir um contéudo, retornando um Watcher. Pârametros:

Nome Descrição obrigatório
author o autor do conteúdo que ele vai assistir. sim
slug o slug do conteúdo que ele vai assistir. sim
observeWhat em que o watcher deve assistir por mudanças não, o padrão é ele assistir por todos.
ms o tempo que o watcher vai procurar por mudanças(em milisegundos) não, o padrão é 2 minutos e 5 segundos

UsersManager

Um UsersManager, como o nome já diz é responsavel por gerenciar os usuários. Através dele você vai consegur obter um usuário, obter os conteúdos relevantes de um usuário, etc...
A seguir estão os metodos de um UsersManager

Método get

O método get obtém um usuário com base em 1 parâmetro obrigatório, sendo ele username.
Exemplo: se o username for Gustavo33, o usuário que ele vai obter vai ser: https://www.tabnews.com.br/Gustavo33 Esse método retorna uma Promise contendo um UserData

Método getContentsOfUser

Este método obtém os contéudos mais novos, mais antigos, e mais relevantes de um usuário com base no primeiro e segundo parâmetro. o terceiro parâmetro é a página que ele vai obter os conteúdos(Cada página tem 30 conteúdos) Pârametros:

Nome Valores obrigatório
username Nome do usuário que você quer obter Sim
strategy "new" - "old" - "relevant" Não, o default é "new".
page Qualquer número Não, o default é 1.

Esse método retorna uma Promise contendo um Array de Contents.

Método watch

o método watch começa a assistir um usuário, retornando um Watcher. Pârametros:

Nome Descrição obrigatório
username o username do usuário que ele vai assistir. sim
observeWhat em que o watcher deve assistir por mudanças não, o padrão é ele assistir por todos.
ms o tempo que o watcher vai procurar por mudanças(em milisegundos) não, o padrão é 2 minutos e 5 segundos

UserManager

Um UserManager, é responsavel por gerenciar o usuário do client. Através dele você vai consegur obter o usuário do client, editar o usuário do client, etc...
A seguir estão os metodos e propriedades de um UserManager

Método get

O método get atualiza o usuário do Client. Esse método retorna uma Promise contendo um ClientUserData

Método edit

Este método edita o usuário do client, ele aceita 1 pârametro que é um objeto, o objeto se parece com isso:

Nome Descrição
username o username do usuário

Esse método retorna uma Promise contendo um ClientUserData

Método watch

o método watch começa a assistir o usuário do client, retornando um Watcher. Pârametros:

Nome Descrição obrigatório
observeWhat em que o watcher deve assistir por mudanças não, o padrão é ele assistir por todos.
ms o tempo que o watcher vai procurar por mudanças(em milisegundos) não, o padrão é 2 minutos e 5 segundos

Propriedades de um UserManager

Nome Descrição tipo
email o email do client string
token o token do client string
id o id do client string
username o username do client string
features as features do client array
tabcoins a quantidade de tabcoins do client number
tabcash a quantidade de tabcash do client number
created_at quando que o client foi criado Date
updated_at ultima vez que o client foi modificado Date

StatusManager

Um StatusManager, é responsavel por gerenciar o status do tabnews Através dele você vai obter o status do tabnews.

Método get

o método get obtém o status do tabnews. Esse método retorna uma Promise contendo um Status

Classe Watcher(clique para expandir)

Um Watcher, é uma classe que assiste por mudanças um Conteúdo/Usuário.
Todos os Watchers são iguais, a única coisa que muda é o que ele assiste.
Eventos do watcher: watcherUpdate

Métodos de um watcher

Método start

o método start inicia o watcher, e faz ele começar a assistir o Conteúdo/usuário.

Método destroy

o método destroy destrói o Watcher, ou seja, para de assistir ao Conteúdo/usuário. Você pode iniciar novamente o watcher pelo método start.

Estruturas de dados(clique para expandir)

Tipos de informação

UserData

Propriedades

Nome Descrição tipo
id o id de um usuário string
username o username de um usuário string
features as features de um usuário array
tabcoins a quantidade de tabcoins de um usuário number
tabcash a quantidade de tabcash de um usuário number
created_at quando que o usuário foi criado Date
updated_at ultima vez que o usuário foi modificado Date

ClientUserData

Propriedades

Nome Descrição tipo
email o email do client string
token o token do client string
id o id do client string
username o username do client string
features as features do client array
tabcoins a quantidade de tabcoins do client number
tabcash a quantidade de tabcash do client number
created_at quando que o client foi criado Date
updated_at ultima vez que o client foi modificado Date

Content

Propriedades

Nome Descrição tipo
id o id do conteúdo string
parent_id o id do conteúdo root string
slug o slug do conteúdo string
title o título do conteúdo string
body o texto do conteúdo string
status o status do conteúdo string
source_url a fonte do conteúdo string
thumbnail a thumbnail do conteúdo string
tabcoins o número de tabcoins do conteúdo number
created_at data da criação do conteúdo Date
published_at data da postagem do conteúdo Date
updated_at data de quando o conteúdo foi editado Date
deleted_at data de quando o conteúdo foi deletado Date
is_children se o conteúdo é uma resposta boolean
is_root se o conteúdo é root boolean
has_children se o conteúdo tem respostas boolean
owner o criador do contéudo
Nome Descrição Tipo
id O id do criador string
username O username do criador string

Métodos

Método fetchOwner

O método fetchOwner obtém o usuário criador do conteúdo. Retorna uma Promise contendo um UserData

Método fetchParent

O método fetchParent obtém o conteúdo root do conteúdo atual. Retorna uma Promise contendo um Content

Método fetchChildren

O método fetchChildren obtém as respostas do conteúdo atual. Retorna uma Promise contendo um Array de Content

Método edit

Este método edita o conteúdo, ele aceita 1 parâmetro obrigatório, sendo ele:

content o que vai ser alterado

o pârametro content é um objeto, as propriedades desse objeto estão listadas abaixo:

Nome Descrição obrigatório Efeito
title o título do conteúdo não obrigatório adiciona um título ao conteúdo
body o corpo do conteúdo, você pode usar markdown aqui nesse campo não obrigatório adiciona texto ao conteúdo
sourceUrl a url da fonte não obrigatório adiciona uma fonte ao conteúdo

Esse método retorna uma Promise contendo um Content

Método delete

O método delete deleta o conteúdo. Esse método retorna uma Promise contendo um Content

Método upvote e downvote

os Métodos upvote e downvote não tem nenhum parâmetro.
Esse método retorna uma Promise contendo um objeto parecido com isso:

Nome Descrição
tabcoins O numero de tabcoins que o contéudo ficou depois do upvote/downvote

Eventos(clique para expandir)

Aqui estão os eventos do tabnews.js, você pode escutar eles com:

<client ou watcher>.on("Nome do evento", (data) => {})

Ready

O evento ready é disparado quando o client faz login no tabnews, ele traz consigo um ClientUserData

<client>.on("ready", (clientUserData) => { console.log(clientUserData) })

Destroyed

O evento destroyed é disparado quando o client é destruído, ele traz consigo um ClientUserData

<client>.on("destroyed", (clientUserData) => { console.log(clientUserData) })

WatcherUpdate

o evento watcherUpdate é disparado quando um Watcher faz um update, ele traz consigo uma informação variada dependendo de o que você está assistindo.

<watcher>.on("watcherUpdate", (data) => { console.log(data) })

Problemas?

Caso você tenha um problema ou não entenda algo da documentação, não hesite em abrir uma issue ou entrar no discord do TabNews

Tabnews.js - Um biblioteca javascript para interagir com o TabNews

tabnews.js's People

Contributors

33gustavo33 avatar

Stargazers

Oz avatar Gabriel Aplok avatar Adler Luiz avatar Edilson Pateguana avatar Fábio de Souza Villaça Medeiros avatar Hebert  F. Barros avatar Ermeson Sampaio avatar Edson S. avatar Davi Coelho avatar Fabricio avatar Gabriel Sozinho avatar Ulisses Junior avatar  avatar João Inácio Neto avatar Ezequias avatar

Watchers

 avatar Ezequias avatar Ermeson Sampaio avatar

tabnews.js's Issues

100% de coverage da API do TabNews

Não tenho muito o que falar dentro dessa Issue, porém isso deve ser feito até a v1.2.0 do Tabnews.js (Por mais que devo terminar até a v1.1.1)

O que falta ser implementado?

  • criação de contas
  • verificação de conta
  • recuperação de senha
  • todos os métodos de administradores ( por mais que eu ache que isso não vai ser muito util )
    • migrations
    • banir usuários

Se eu tiver esquecido alguma coisa, pode avisar que eu adiciono aqui!

[Api do Tabnews] Breaking change em /api/v1/contents/[username]

Como foi anunciado no item 5 desse post no Tabnews, o endpoint /api/v1/contents/[username] vai começar a retornar conteúdos children também.

Essa breaking change está sendo discutida através desse PR
Atualmente, esse PR adiciona esses endpoints:

  • GET /api/v1/contents/[username]/root: retorna os conteúdos root do usuário
  • GET /api/v1/contents/[username]/: retorna todos os conteúdos do usuário
  • GET /api/v1/contents/[username]/children: retorna os conteúdos child do usuário

A parte boa disso, é que poderemos adicionar mais uma opção para obter os conteúdos de um usuário, um content_type para essa Route:

function allUserContents(username, strategy = "new", page = 1) {
return `${contents()}/${username}?strategy=${strategy}&page=${page}`;
}

Atualizarei aqui aqui se houver alguma mudança sobre essa Breaking Change.

Versão 1.1.0 do tabnews.js

Versão 1.1.0

Novas features:

  • Watcher - um Watcher vai ser uma Classe que assiste um content, assim que o content muda(desde de tabcoins e numero de comentários até o texto do content) o Watcher vai disparar um evento com as mudanças
  • Eventos - falando em eventos, eu quero implementar um EventListener no Client, assim quando o client fizesse login ele poderia disparar por exemplo, um evento "ready" e etc..
  • Poder informar um Agent-User customizado para requisições na api, atualmente o Agent-User que é usado é
    Mozilla/5.0 (compatible; Tabnews.js/1.0;) na versão 1.1 se você usar um Agent-User customizado vai ficar
    Mozilla/5.0 (compatible; Tabnews.js/1.0; {AGENT-USER CUSTOMIZADO}).

Ajustes:

  • Remover o log que o client dá quando ele é iniciado.
  • Mover o objeto User que está no /lib/client.js, para um arquivo separado em /lib/api/user.js

P.S: Essa versão vai ser lançada junto com o tabnews!

Terminar a documentação

Atualmente toda a documentação do projeto está incompleta

Eu vou dividir essa issue em 2 partes:

  • Mover a documentação pra Wiki do projeto, Criando páginas em vez do Clique pra expandir
  • Adicionar a Estrutura Status na documentação, assim finalizando ela.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.