Atualizando a quantidade de comentários sem atualizar o feed
O Léo chamou a atenção hoje para o fato de alguns sites atualizarem seus feeds a cada novo comentário, mesmo não incluindo o comentário no conteúdo do feed.
Update: Aliás, incluir os comentários nos itens do feed também é algo que não me agrada nem um pouco. Na minha opinião, um feed deve ter os posts e mais nada. Quando os comentários são incluídos, obviamente o feed é atualizado e o agregador entende que deve mostrar aquele item como não lido…e isso é um saco…
Isso provavelmente acontece porque o autor do site quer exibir a quantidade de comentários de cada post em seu respectivo item no feed.
Há maneiras de mostrar a quantidade de comentários sem, com isso, fazer com que o agregador entenda que o item e, conseqüentemente, o feed foram atualizados. Basicamente, deve-se exibir a quantidade de comentários em uma imagem, ao invés de exibi-la no texto do item.
Para usuários do FeedBurner
Nota: Se você não sabe o que é o FeedBurner ou tem dúvidas sobre como usá-lo, leia dois posts meus sobre o assunto:
- Feedburner: estatísticas, economia de banda e um trato no visual dos seus feeds
- Redirecionando seu feed para o Feedburner
Se você for usuário do FeedBurner, o processo é muito simples.
Há algum tempo atrás eles lançaram um serviço chamado FeedFlare, que serve para adicionar um pouco de “interatividade” aos seus feeds. Além de exibir a quantidade de comentários de um post, o FeedFlare também coloca links para que o usuário possa adicionar o seu post ao del.icio.us, indicar por email para os amigos, procurar por links para o post no Technorati e otras cositas más. Além disso ainda tem uma API aberta que possibilita que qualquer um crie seus próprios “Flares”.
Mas, quanto à quantidade de comentários, há duas coisas que você precisa fazer para que seja exibida em cada post no seu feed.
- Colocar um elemento wfw:commentRss em cada item do seu feed, apontando para um outro feed que contenha apenas os comentários para o post em questão.
- Habilitar a opção Comments count na página de configuração do FeedFlare (Dentro do painel de administração do feed, aba “Optimize“, item “OptimizeFeedFlare”).
Se você usa o wordpress para publicar o seu blog — o que é muito provável, dada a popularidade que ele tem hoje em dia — e seu feed seja publicado no formato RSS 2 o item 1 já está resolvido. A única coisa que recomendo que você faça é trocar, no arquivo wp-rss2.php, wfw:commentRSS por wfw:commentRss, para tornar o feed válido.
Caso você use ATOM, RSS 1 ou não use o wordpress, faça o seguinte:
Disclaimer: Não posso garantir que funcione em ATOM ou RSS 1, pois não testei nesses formatos. Mas é muito provável que funcione. Se alguém já tiver comprovado o contrário, por favor, me conte.
Adicione o namespace wfw no elemento raiz (RSS no caso de feeds RSS e FEED no caso de ATOM):
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
Coloque um elemento wfw:commentsRss para cada ITEM (ou ENTRY, caso use ATOM), assim:
No Wordpress:
<wfw:commentRss>< ?php echo comments_rss(); ?></wfw:commentRss>
Em outros sistemas:
Se você não usa o wordpress, você deve verificar se o seu sistema de blog provê um feed com os comentários de cada post. A URL desse feed é o que entra no conteúdo do elemento wfw:commentRss.
Se você ainda usa o arcaico, obsoleto, sujo e fedorento RSS 0.9x, por favor, mude para um formato mais recente.
Para quem não usa FeedBurner
Se você não usa o FeedBurner para publicar seus feeds, você vai ter um pouquinho mais de trabalho, já que é você quem terá que criar as imagens para exibir a quantidade de comentários.
Para isso, você precisa saber programar em alguma linguagem de programação que rode no servidor (PHP, Java, Python, Ruby, ASP.Net, etc) e que tenha alguma biblioteca de manipulação de imagens, como a GD. Ah, e, claro, você precisa que o seu site esteja hospedado em um servidor que tenha suporte a alguma dessas tecnologias.
Para o nosso exemplo, vamos usar a linguagem PHP e a biblioteca GD.
Primeiro, crie uma função para pegar a quantidade de comentários de um determinado post. Vamos chamar essa função de commentsNumber(id), onde id é o identificador (a chave primária da tabela de posts, por exemplo) do post em questão.
Não vou, claro, fazer um exemplo dessa função aqui, já que ela vai depender do seu sistema. Vamos assumir que ela existe, funciona e retorna a quantidade de posts do post.
$nComments = commentsNumber(25);
Jogamos na variável $nComments a quantidade de comentários para o post 25. Agora vamos criar a imagem que exibirá esse número.
O código para criar a imagem deve ser algo mais ou menos como isso:
Nota: Se quiser copiar o código, copie do arquivo PHPS linkado acima e não do box abaixo. O wordpress troca as aspas simples e duplas por outras mais “fancy“, e isso vai te causar problemas…
<?php $postId = $_GET[’pid’]; $nComments = commentsNumber($postId); // Informa ao browser que o documento // é uma imagem PNG header(”Content-type: image/png”); // Cria a imagem (150px por 15px) $im = imagecreatetruecolor(150, 15); // Cria a cor branca para o fundo $white = imagecolorallocate($im, 255, 255, 255); // Desenha um retângulo branco para // ser o fundo da imagem imagefilledrectangle($im, 0, 0, 149, 14, $white); // Cria a cor preta para o texto $black = imagecolorallocate($im, 0, 0, 0); // O Texto $text = $nComments . ‘ comentários’; // Esta é a fonte que será usada // para escrever o texto // Você pode pegá-la em // http://www.dafont.com/search.php?q=xg+pixgo $font = ‘XG-pixo.TTF’; // Adiciona o texto na imagem imagettftext($im, 6, 0, 5, 10, $black, $font, $text); // Joga a imagem para a saída imagepng($im); ?>
Vamos chamar esse script de ncomments.php. Ele recebe uma variável chamada pid que é o id do post do qual se deseja saber o número dos comentários. Veja um exemplo da imagem criada pelo script.
Dentro do seu feed, coloque essa imagem onde você achar melhor. No final do item, por exemplo. Assim:
<img src="http://dominio.com/ncomments.php?pid=<?php echo $postId ?/>" alt="quantidade de comentários neste post">
É claro que você não pode simplesmente colocar a quantidade de comentários no atributo alt, senão acabamos caindo no mesmo caso do início. A cada comentário o feed seria atualizado.
Bem, nada é perfeito, mas se você realmente tem a necessidade de exibir a quantidade de comentários em cada post no seu feed e não quer (não queira, por favor) que o seu feed seja atualizado a cada novo comentário, os exemplos acima podem ajudar.


Reclamação de um usuário:
Tanto irritante quanto para comentários, é a atualização do feed com os famigerados:
“Links for yyyy-mm-dd [del-icio-us]” que despeja uma quantidade incrível de links que na maioria das vezes não interessam.
Colocar tais links em feeds só tem um efeito: “Unsubscribe”, como já fiz com alguns.
Quem está interessado em links do Del-icious-us procura direto no site.
Atualizem seus feeds com os novos assuntos publicados no seu blog/site.
Afinal foi para isso que eu assinei o feed.