Como Criar um Feed RSS de Hashtag do Mastodon Usando a API Pública
🔍 WiseChecker

Como Criar um Feed RSS de Hashtag do Mastodon Usando a API Pública

Você quer monitorar uma hashtag específica do Mastodon sem fazer login ou atualizar a timeline manualmente. A API pública do Mastodon permite buscar publicações por hashtag em formato JSON, e você pode converter esses dados em um feed RSS para seu leitor preferido. Este artigo mostra o processo usando o endpoint da API pública, explica os parâmetros necessários e como gerar uma saída RSS XML válida.

Principais Pontos: RSS de Hashtag do Mastodon via API Pública

  • GET /api/v1/timelines/tag/{hashtag}: Endpoint principal que retorna publicações públicas recentes para qualquer hashtag em uma instância do Mastodon.
  • Parâmetro de consulta limit=40: Controla o número de publicações retornadas por requisição, sendo 40 o valor máximo permitido.
  • Script de conversão XML: Um script simples em Python ou Node.js transforma o array JSON em XML RSS 2.0 válido para seu leitor de feeds.

ADVERTISEMENT

Como a API de Timeline Pública do Mastodon Funciona para Hashtags

O Mastodon expõe uma API RESTful que não requer autenticação para leitura de dados públicos. O endpoint GET /api/v1/timelines/tag/{hashtag} retorna um array JSON de objetos de status para a hashtag fornecida. Cada objeto de status contém o conteúdo da publicação renderizado como HTML, o nome de exibição e nome de usuário da conta, o timestamp de criação e a URL da publicação. A API respeita as configurações de conteúdo e privacidade da instância, então apenas publicações públicas que a instância federou aparecem nos resultados.

A URL base para qualquer instância do Mastodon é tipicamente https://<instância>.social. Por exemplo, usando a instância principal, a URL completa se torna https://mastodon.social/api/v1/timelines/tag/technology. A hashtag na URL não inclui o símbolo #. A API retorna até 40 publicações por padrão, e você pode definir o parâmetro limit com um valor entre 1 e 40. Para um feed que atualiza com frequência, você pode solicitar o máximo de 40 publicações e depois filtrar ou truncar o feed conforme necessário.

Campos de Dados Necessários para um Feed RSS

Um feed RSS 2.0 requer pelo menos um título de canal, descrição, link e um ou mais elementos de item. Cada item deve ter um título, descrição, link e data de publicação. A partir do objeto de status do Mastodon, você pode mapear estes campos:

  • Título do item: Use o nome de exibição da conta seguido por dois pontos, depois os primeiros 80 caracteres do conteúdo sem tags HTML.
  • Descrição do item: O conteúdo HTML completo da publicação, opcionalmente sanitizado para remover scripts e tags indesejadas.
  • Link do item: O campo url do objeto de status, que aponta para a publicação na instância de origem.
  • Data de publicação do item: O timestamp ISO 8601 created_at, que pode ser convertido para o formato RFC 822 para conformidade com RSS.

Passos para Construir o Feed RSS de Hashtag

  1. Escolha uma instância do Mastodon e verifique o endpoint da API
    Selecione uma instância do Mastodon que federe a hashtag que você deseja monitorar. Abra um navegador e navegue até https://<instância>.social/api/v1/timelines/tag/suahashtag?limit=5. Substitua suahashtag pelo texto exato da hashtag. Se o navegador exibir um array JSON de objetos de status, o endpoint funciona. Se você vir um erro, a instância pode bloquear o acesso público ou a hashtag pode conter caracteres não suportados.
  2. Escreva um script para buscar os dados JSON
    Crie um script Python usando a biblioteca requests. Aqui está um exemplo mínimo:
    import requests
    url = 'https://mastodon.social/api/v1/timelines/tag/technology?limit=40'
    response = requests.get(url)
    data = response.json()

    Para Node.js, use o pacote node-fetch. O script deve tratar erros HTTP e timeouts adequadamente.
  3. Analise os objetos de status e extraia os itens do feed
    Percorra o array JSON. Para cada objeto de status, extraia os campos content, url, created_at e account.display_name. Remova as tags HTML do conteúdo para criar um título em texto simples. Use uma biblioteca como html2text em Python ou he em Node.js para decodificar entidades HTML.
  4. Gere a saída RSS XML
    Construa um documento RSS 2.0 com um elemento channel. Defina o título do canal como algo como Mastodon hashtag: technology. O link do canal deve apontar para a página da hashtag na instância, por exemplo https://mastodon.social/tags/technology. Para cada publicação, crie um elemento <item>. Mapeie os campos conforme descrito na seção anterior. Use a biblioteca email em Python ou o módulo rss em Node.js para formatar datas no formato RFC 822.
  5. Hospede o feed como um arquivo XML estático ou um endpoint dinâmico
    Salve a saída como um arquivo .xml e faça upload para um servidor web. Para um feed que atualiza automaticamente, configure um cron job (Linux) ou Agendador de Tarefas (Windows) para executar o script a cada 15 a 30 minutos. Alternativamente, implante o script como uma função serverless em plataformas como AWS Lambda ou Vercel que retorna o XML RSS quando acessada.

ADVERTISEMENT

Problemas Comuns ao Construir o Feed

A API retorna um array vazio para uma hashtag popular

Isso geralmente acontece quando a instância que você está consultando não federa com as instâncias onde as publicações se originam. Tente uma instância diferente e maior, como mastodon.social ou mastodon.online. Você também pode verificar a página da hashtag na interface web da instância para confirmar se existem publicações.

O feed RSS não valida nos leitores de feed

Os leitores de feed exigem conformidade estrita com RSS 2.0. Erros comuns incluem a falta do atributo de versão <rss>, uso de formato de data não RFC 822, ou inclusão de HTML bruto sem escape adequado. Use uma biblioteca XML para construir o documento em vez de concatenação de strings. Valide seu feed usando o Serviço de Validação de Feed do W3C.

Limitação de taxa bloqueia requisições frequentes

As instâncias do Mastodon impõem limites de taxa nas chamadas de API. O limite padrão é de 300 requisições a cada 5 minutos por IP. Se você executar o script com mais frequência do que a cada 30 segundos, pode atingir o limite. Adicione um atraso entre as requisições e armazene em cache a saída do feed para reduzir a carga. Para uso de alta frequência, considere usar uma instância dedicada ou contatar o administrador para um limite maior.

Feed RSS Construído Manualmente vs. Uso de Serviço Terceiro

Item Script Manual da API Serviço Terceiro
Personalização Controle total sobre campos dos itens, formatação e frequência de atualização Limitado ao modelo e cronograma de atualização do serviço
Custo Gratuito se você tiver um servidor web ou função serverless Geralmente gratuito com anúncios ou pago por recursos premium
Privacidade Seu IP e padrões de consulta permanecem em sua própria infraestrutura O provedor de serviços registra suas consultas de hashtag e uso
Tempo de configuração 30 a 60 minutos para um script básico e implantação 5 minutos para configurar uma conta e selecionar uma hashtag
Confiabilidade Depende do tempo de atividade da sua hospedagem e do tratamento de erros do script O provedor de serviços gerencia o tempo de atividade e as mudanças na API

Com a abordagem de script manual, você pode adicionar recursos avançados, como filtrar publicações por idioma, remover boosts ou incorporar links de mídia na descrição do feed. O serviço terceiro funciona melhor quando você precisa de uma solução rápida e sem código para uma única hashtag.

Agora você pode construir um feed RSS personalizado para qualquer hashtag do Mastodon usando a API pública e um script curto. Teste o feed com um leitor local como Thunderbird ou um serviço baseado na web como Feedly para confirmar que ele é exibido corretamente. Para uma implantação em produção, adicione registro de erros e configure monitoramento para reiniciar o script se ele falhar. Considere estender o feed para incluir avisos de conteúdo lendo o campo spoiler_text do objeto de status, o que fornece uma representação mais completa da publicação.

ADVERTISEMENT