Landing do projeto: camaleao.dev. Eu to tocando isso em público, postando avanço, número e tombo no Bluesky, no X, no TikTok e no Instagram. Se quiser acompanhar de perto, é por lá.
Objetivo
O Camaleão precisa de uma grande quantidade de notícias por dia para triar, agrupar e transformar em matéria. Dava pra raspar a home de cada site, mas aí cada mudança de layout vira um bug meu, e eu estaria pegando conteúdo de um jeito que o site não ofereceu. O feed é o site dizendo "isso aqui é pra ser lido por programa". É estável, é barato e não precisa de navegador.
Coleta de RSS
O primeiro passo foi um script que bateu em 108 feeds e APIs se identificando como CamaleãoBot e anotando, pra cada um: se responde, quantos itens saíram em 7 dias, se o feed traz o texto completo ou só um resumo, e o que o robots.txt diz. O texto completo decide muita coisa. Quando o feed já traz, eu nem entro no site. Quando vem só título ou resumo, uso o feed pra achar a matéria, busco só aquela página, extraio o texto com readability e guardo por uns 14 dias. Ninguém lê esse texto além do pipeline.
Limitações e Exceções
Eu checo o robots.txt duas vezes: o do feed e o da página da matéria. Se qualquer um disser não, a fonte sai. Robots que não dá pra ler também conta como não. Isso me custou fonte que eu queria muito. Canaltech, Mobile Time e The Register bloqueiam o feed. O 9to5Mac responde 403 pra robô. A página de matéria da Folha não responde pro meu robô. E tem o caso mais chato: o OpenAI News libera no robots, mas devolve 403 quando eu peço a página da matéria. Dava pra contornar trocando o user agent pelo de um navegador. Não fiz, ficou anotado como limitação.
Limitações de Layout
O Reddit caiu nessa peneira em setembro: o robots bloqueia robô e a API já pedia acordo comercial. Agora quem lê subreddit por app de feed vai sentir a mesma coisa, e o Reddit não ofereceu substituto, só um relay no Discord pra moderador.
Triagem de Noticias
Com a primeira lista, de 18 fontes, rodei um dia e saíram 12 matérias de 122 grupos. Onze vinham de uma fonte só, e cinco eram do changelog do GitHub. Isso não é jornal, é leitor de release. O motivo é uma regra que eu não quero tirar: pra virar pauta, a notícia precisa vir de fonte primária (a própria empresa anunciando) ou de duas redações diferentes cobrindo o mesmo fato. A segunda parte quase nunca disparava.
Aumento da Janela de Tempo
Minha primeira aposta foi aumentar a janela de 24 pra 72 horas, achando que ia dar tempo da segunda redação aparecer. Piorou: grupos com mais de uma redação caíram de 2 pra 1. Com mais item velho na conta, o agrupador abre mais grupos em vez de juntar. O que resolveu foi largura. Com 25 fontes na mesma janela de 24 horas, foram 9.
Revisão da Regra
Essa semana eu abri o app de 10 pra 20 assuntos (games, cripto, tech no Brasil, carreira, produto e design.) e precisei de fonte pra tudo isso. Testei 166 candidatas com as mesmas regras e entraram 113. A lista foi de 68 pra 181. Só que, rodando com as fontes novas, Brasil, games e cripto continuavam quase sem pauta. O Tecnoblog trazia 22 matérias num dia e uma passava. Aí eu fui olhar as notas.
Medição de Interesse
A triagem perguntava pro modelo "o quanto isso importa para uma pessoa que trabalha com software?". Matéria de game tirava, em média, entre 0,4 e 1,3, e o corte é 2. Pela pergunta, faz sentido: lançamento de jogo não muda o trabalho de ninguém. Mas eu leio notícia de game toda semana e quase nunca é por causa do trabalho. A pergunta tava medindo a coisa errada. Troquei por "quanto alguém do mundo do software se importaria com isso, por interesse em tecnologia ou pelo trabalho". Antes de trocar, reperguntei a nota de 382 itens três vezes, sem gravar nada. A pergunta velha reproduziu o que tava gravado em 378 deles, e a nova concordou com ela mesma nos mesmos 378. As pautas do dia foram de 40 pra 52 sem perder nenhuma, e entrou coisa como o incidente da MetaMask e o IPO da OpenAI adiado. A medição toda custou US$ 0,038.
Conclusão
O Camaleão Bot coleta notícias de RSS de maneira eficiente, evitando bugs de layout e garantindo uma fonte primária para cada notícia, com uma triagem de interesse que reflete os interesses do público-alvo.