Programando bots para o Mastodon: exibindo threads encadeadas

Criei um script shell (usando jq e curl) que recebe como parâmetro a URL de um post do Mastodon, e gera (em HTML ou no terminal) uma árvore encadeada das respostas a ele, como neste exemplo:


print da saída HTML gerada pelo script deste artigo
Uma árvore encadeada de respostas a um post no Mastodon

Na imagem acima você pode perceber que os posts estão encadeados de uma forma que indica visualmente, e em vários níveis, qual deles é resposta a qual outro.

Mas por que?

Mais uma vez, foi uma interação no Fediverso que me deu o ensejo para postar algo por aqui: o Gabriel Bezerra me fez uma pergunta sobre a complexidade de exibir uma thread do Mastodon encadeada em forma de árvore em vários níveis, como a típica exibição de uma thread do Reddit, por exemplo.

Era madrugada e eu não percebi que a pergunta dele (desculpa, Gabriel!) veio no contexto da thread sobre o lançamento do meu app Estica, e assim na verdade era uma consulta sobre a possibilidade de eu agregar a ele esse recurso.

Entendi que era uma pergunta sobre viabilidade, e respondi explicando como ele podia implementar, e até dei um exemplo de código. A discussão foi boa, mas encerrou ali, sem a solução que o Gabriel queria.

O script

Como eu havia respondido ao Gabriel, a complexidade de implementar essa exibição não é das mais elevadas - a API do Mastodon oferece os dados necessários, e o esforço maior é na criação de um layout visual (do qual só fiz o mínimo necessário) do que em ter os dados da thread para trabalhar.

Para demonstrar isso, desenvolvi este script aqui, que funciona como prova de conceito: ele recebe como parâmetro a URL do post que inicia uma thread, e formata essa thread visualmente como uma árvore, tanto em texto puro (para o terminal) quanto em HTML (para a web).

Faça o download do script, renomeie para mastotree.sh, leia o código para compreendê-lo, dê permissão de execução, e aí o rode assim:

./mastotree.sh https://arram.senta-la.cloud/@autobrain/116579911019740570

Substitua a URL pela do post inicial de alguma thread que você deseje usar em seu teste, naturalmente. A saída no terminal será algo assim:


print da saída HTML gerada pelo script deste artigo
Thread encadeada em formato de árvore, no terminal, mostrando o começo da minha conversa com o Gabriel, que deu origem a este post.

Para gerar a saída em formato HTML (o script gera e informa o nome do arquivo que foi gerado), basta acrescentar o parâmetro -w antes da URL, assim:

./mastotree.sh -w https://arram.senta-la.cloud/@autobrain/116579911019740570

Indo além

Você irá notar que o script não é dos mais curtos, mas a parte que interage com a API do Mastodon se concentra em meia dúzia de linhas - todo o restante são detalhes de ordenação e exibição dos dados recebidos.

Por isso, hoje me permiti ser menos didático e ir direto à aplicação. Interação com a API é a parte em que eu tenho mais lugar de fala, e front-end pra mim é sempre um oceano misterioso. No post Programando bots para o Mastodon: obtendo dados via API e em vários outros posts da tag Mastodon aqui do blog eu já mostrei detalhadamente como obter e tratar dados da API.

Mas o script, em sua forma atual, se limita ao essencial (por exemplo, incluí uma restrição fixa de só ir até ao 4º nível de respostas, e mostro só os campos mínimos necessários para fazer sentido, além de formatar insuficientemente o texto no terminal).

Ele é uma prova de conceito, e você pode reimplementá-lo em outras arquiteturas, e incluir funcionalidades adicionais. Afinal, é open source!