5

Vocês usam a API do TabNews para alguma coisa? (+ versão nova da biblioteca da API do TabNews para Kotlin e alerta da defesa civil)

Fala, pessoal. De boa?

Depois do 3x0 do Brasil e de ter recebido o alerta da defesa civil na madrugada, queria listar alguns endpoints da API do TabNews. A API em sim tem uma série de outros endpoints voltados para analytics e monitoramento. Não vou considerá-los aqui por que ainda não usei pra nada. Aqui vou focar em Session, User e Contents. Acho que esses são os principais.

API TabNews

URL Base: https://www.tabnews.com.br/api/v1


Autenticação & Sessões

POST /sessions

Cria uma nova sessão (login). Define um cookie de sessão em caso de sucesso. Se o usuário ainda não estiver ativado, envia um novo e-mail de ativação e retorna 403.

  • Autenticação: pública
  • Body:
    CampoObrigatório
    emailobrigatório
    passwordobrigatório
  • Resposta 201: objeto de sessão

DELETE /sessions

Expira a sessão atual (logout). Limpa o cookie de sessão.

  • Autenticação: requer feature read:session (sessão ativa)
  • Resposta 200: objeto de sessão expirada

PATCH /activation

Ativa uma conta de usuário usando o token enviado por e-mail.

  • Autenticação: pública
  • Body:
    CampoObrigatório
    token_idobrigatório
  • Resposta 200: objeto do token

PATCH /email-confirmation

Confirma uma alteração de e-mail usando um token enviado para o novo endereço.

  • Autenticação: pública
  • Body:
    CampoObrigatório
    token_idobrigatório
  • Resposta 200: objeto do token

POST /recovery

Solicita um token de recuperação de senha, enviado para o e-mail do usuário.

  • Autenticação: pública
  • Body (ao menos um obrigatório):
    CampoObrigatório
    usernameopcional
    emailopcional
  • Resposta 201: objeto do token de recuperação

PATCH /recovery

Redefine a senha do usuário usando um token de recuperação.

  • Autenticação: pública
  • Body:
    CampoObrigatório
    token_idobrigatório
    passwordobrigatório
  • Resposta 200: objeto do token

Usuários

POST /users

Cria uma nova conta de usuário. Envia um e-mail de ativação.

  • Autenticação: pública
  • Body:
    CampoObrigatório
    usernameobrigatório
    emailobrigatório
    passwordobrigatório
  • Resposta 201: objeto de usuário

GET /users/:username

Retorna o perfil público de um usuário, incluindo saldos de TabCoin e TabCash.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username (obrigatório)
  • Resposta 200: objeto de usuário

PATCH /users/:username

Atualiza o perfil de um usuário. Usuários só podem atualizar o próprio perfil, a menos que tenham a feature update:user:others.

  • Autenticação: requer feature update:user
  • Path: username (obrigatório)
  • Body:
    CampoObrigatório
    usernameopcional
    emailopcional
    descriptionopcional
    notificationsopcional
  • Resposta 200: objeto de usuário atualizado
  • Observação: a alteração de senha por este endpoint está atualmente desabilitada.

GET /user

Retorna o perfil do próprio usuário autenticado, incluindo saldo, features e recompensa diária de TabCoins. Renova a sessão automaticamente se ela expirar em menos de 3 semanas.

  • Autenticação: requer feature read:session
  • Resposta 200: objeto de usuário (visão própria)

Conteúdos

GET /contents

Lista todos os conteúdos raiz publicados. Paginado.

  • Autenticação: pública
  • Cache: SWR 10s
  • Query:
    ParâmetroObrigatórioObservações
    pageopcional
    per_pageopcional
    strategyopcionalex.: new, relevant
    with_childrenopcionalIncluir comentários
    with_rootopcionalIncluir posts raiz
  • Resposta 200: array de objetos de conteúdo (com cabeçalhos de paginação)

POST /contents

Cria um novo conteúdo (post ou comentário). Pode transmitir a resposta como NDJSON ao criar um comentário, caso o cliente envie Accept: application/x-ndjson.

  • Autenticação: requer feature create:content:text_root (posts) ou create:content:text_child (comentários)
  • Body:
    CampoObrigatórioObservações
    bodyobrigatório
    parent_idopcionalDefinido para criar um comentário
    titleopcional
    slugopcional
    statusopcionaldraft ou published
    source_urlopcional
    content_typeopcional
  • Resposta 201: objeto de conteúdo (ou stream NDJSON)

GET /contents/:username

Lista os conteúdos publicados por um usuário específico. Paginado.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username (obrigatório)
  • Query:
    ParâmetroObrigatório
    pageopcional
    per_pageopcional
    strategyopcional
    with_rootopcional
    with_childrenopcional
  • Resposta 200: array de objetos de conteúdo (com cabeçalhos de paginação)

GET /contents/:username/:slug

Retorna um único conteúdo publicado, identificado pelo nome do autor e pelo slug.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username, slug (ambos obrigatórios)
  • Resposta 200: objeto de conteúdo

PATCH /contents/:username/:slug

Atualiza um conteúdo. Usuários só podem editar o próprio conteúdo, a menos que tenham a feature update:content:others.

  • Autenticação: requer feature update:content
  • Path: username, slug (ambos obrigatórios)
  • Body:
    CampoObrigatório
    titleopcional
    bodyopcional
    slugopcional
    statusopcional
    source_urlopcional
  • Resposta 200: objeto de conteúdo atualizado

GET /contents/:username/:slug/children

Retorna a árvore completa de comentários de um conteúdo.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username, slug (ambos obrigatórios)
  • Resposta 200: array de objetos de conteúdo filho (árvore)

GET /contents/:username/:slug/parent

Retorna o conteúdo pai direto de um comentário. Retorna 404 se o conteúdo já for um post raiz.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username, slug (ambos obrigatórios)
  • Resposta 200: objeto de conteúdo pai

GET /contents/:username/:slug/root

Retorna o conteúdo raiz (ancestral) de uma thread de comentários. Retorna 404 se o conteúdo já for raiz.

  • Autenticação: pública
  • Cache: SWR 10s
  • Path: username, slug (ambos obrigatórios)
  • Resposta 200: objeto de conteúdo raiz

POST /contents/:username/:slug/tabcoins

Vota em um conteúdo (upvote ou downvote). Custa 2 TabCoins do votante. Limitado a 2 votos por conteúdo a cada 72 horas, por usuário/IP. Não é possível votar no próprio conteúdo.

  • Autenticação: requer feature update:content
  • Path: username, slug (ambos obrigatórios)
  • Body:
    CampoObrigatórioObservações
    transaction_typeobrigatóriocredit ou debit
  • Resposta 201: { "tabcoins": <saldo atualizado> }

GET /contents/:username/:slug/thumbnail

Retorna uma miniatura PNG gerada pelo servidor para um conteúdo.

  • Autenticação: pública
  • Cache: SWR 60s
  • Path: username, slug (ambos obrigatórios)
  • Resposta 200: binário PNG (Content-Type: image/png)

GET /contents/rss

Retorna um feed RSS 2.0 com os 30 conteúdos raiz publicados mais recentes.

  • Autenticação: pública
  • Cache: SWR 60s
  • Resposta 200: feed XML (Content-Type: text/xml)

A POST /sessions funcionava no passado mas foi "removida". Deve ter dado algum problema com a criação indiscriminada de usuários.

Aproveitando, caso alguém esteja trabalhando com Kotlin e não queria reiventar a roda, tenho mantido essa biblioteca aqui TabNews para Kotlin e acabei de publicar a versão 1.5.0 com um endpoint que tinha deixado de fora.

E aí? Vocês usam a API do TabNews para alguma coisa?

Carregando publicação patrocinada...
1

yes, eu tenho esse app que fiz, eu não estou dando manutenção pois tô desanimado com a quantidade de postagens feitas com IA, eu não uso direitamente a sua biblioteca ei bato direito na api no tempo acho que a sua lib ainda nem existia quando comecei, mas se algum dia eu voltar com o projeto eu com certeza irei utilizar e colaborar com o seu projeto.

screenshot

1

Que massa, @HarukaYamamoto0.

Quando eu criei o meu aplicativo eu dei uma olhada em todos que já tinham sido publicados e acredito que acabei passando pelo seu também. Interessante você dizer que caso volte a dar manutenção no seu aplicativo vai considerar usar a biblioteca. Fico feliz em saber e tomara que volte.

Em tempo, eu tenho um app também que uso a biblioteca e ele é quem acaba definindo o que eu preciso implementar e melhorar na biblioteca. Se quiser dar uma olhada e avaliar segue o link:

Tabs para o Tabnews

Seria interessante o olhar crítico de uma pessoa que também já desenvolvou um app pro TabNews.

A respeito dos posts com IA, acho que o trabalho agora é conseguir "separar o joio do trigo". Tem bastante coisa boa sendo compartilhada ainda.

0
1

Fala, @macnator.

Dei uma olhada no seu projeto. Está considerando publicar? Vi que o último commit foi a duas semanas. Tá com alguma ideia guardada aí pra implementar nele? Eu gosto dessa ideia da integração do TabNews com IA, pode ser que tenha alguma coisa aí.