Criando um feed RSS com Delicious, Yahoo! Pipes e Readability

You are viewing an old revision of this post, from April 6, 2015 @ 18:22:29. See below for differences between this version and the current revision.

A retirada das funcionalidades sociais (e posterior desligamento) do Google Reader matou uma das mais notáveis comunidades virtuais, mas trouxe vida a um mercado antes monopolizado. Por exemplo, uns malucos apareceram do nada com um clone chamado The Old Reader (e passaram por maus bocados por isso). Dada sua completude e qualidade (além do quase heroísmo e a notável competência dos criadores), escolhi o Old Reader como meu novo leitor.

The Old Reader fornece praticamente tudo que havia no Google Reader. Uma das poucas exceções é a habilidade de compartilhar links arbitrários: só posso compartilhar o que vier de meus feeds. Tentei usar o Delicious como alternativa. Adicionava meu link em uma tag específica, assinava o feed da tag e depois o compartilhava. O resultado, porém, não foi bom: o feed do Delicious só compartilha o link e o título, sem o conteúdo.

Feed RSS do Delicious, visto no Firefox

Feed RSS do Delicious, visto no Firefox

Aí entram os Yahoo! Pipes. Esta ferramenta maluca permite recuperar conteúdo da Internet (em especial, feeds), processá-los e publicá-los em, entre outros formatos, RSS. Cheguei a brincar com eles um pouco, há muito tempo; assinava um ou outro pipe, geralmente expandindo webcomics, mas nada sério e nada que eu tenha feito. Ainda assim, Pipes pareciam a solução: é fácil recuperar feeds em um pipe, e é fácil recuperar o conteúdo de um link.

Entretanto, eu não poderia simplesmente recuperar o conteúdo de um link e jogá-lo na descrição de um item RSS. Uma página contém muitas coisas: menus, cabeçalhos, propaganda… Para piorar, boa parte da formatação se perderia quando o HTML fosse incluído no feed. Experimentei copiar o conteúdo de interesse e colá-lo no comentário do Delicious, mas o resultado foi lamentável: não era possível adicionar parágrafos, muito menos HTML. Como, então, extrair o conteúdo?

Minha primeira abordagem foi adicionar, no campo Comment do meu bookmark, uma expressão XPath que retornasse o conteúdo de interesse.

Link to share through Delicious and the XPath expression to retrieve the relevant content.

Link to share through Delicious and the XPath expression to retrieve the relevant content.

Daí criei um pipe que percorria o feed com o módulo Loop e, para cada link, baixava o conteúdo. Para isto, usava o módulo XPath Fetch Page, que também retirava o elemento apontado pela expressão XPath do bookmark e o colocava na descrição do feed. Veja o screenshot do pipe:

Expansor dos feeds RSS do Delicious que usa XPath para extrair o conteúdo relevante.

Expansor dos feeds RSS do Delicious que usa XPath para extrair o conteúdo relevante.

O feed resultante era bom mas o processo não era satisfatório. Eu tinha de descobrir qual era o XPath mais adequado para cada página. Frequentemente, não tinha como testar a expressão, de modo que compartilhava links sem conteúdo. Não era possível criar uma expressão para todas as páginas, naturalmente, e Pipes não fornecem uma ferramenta poderosa o suficiente para isso. Como seria bom, pensei, ter algo como um Readability

Feed RSS do Delicious, expandido com XPath, visto no Firefox.

Feed RSS do Delicious, expandido com XPath, visto no Firefox. Agora sim!

E assim a resposta brilhou na minha frente.

Readability é uma aplicação  que torna legíveis artigos em páginas muito sobrecarregadas. Originalmente um mero bookmarklet, hoje é uma aplicação cliente-servidor multiplataforma. Parece mágica: depois de “descobrir” o que é relevante na página, Readability apresenta este conteúdo de maneira padronizada e legível. Eu o uso há muito tempo, tanto para tornar artigos legíveis quanto para enviá-los para meu Kindle.

Huffington Post, al natural e alterado por Readability.

Huffington Post, al natural e alterado por Readability

Para nossa sorte, Readability provê uma API para seu parser! Obtendo um token de autenticação – que é passado como um parâmetro na URL ou via POST – é possível fazer um número considerável de requisições e receber respostas em JSON. Assim,  para cada item no feed, montei uma URL para invocar a API (com o URL Builder) e a pus em um campo; num loop seguinte, invoquei a URL com Fetch Data e atribuí o campo content da resposta à descrição do item.

Este pipe usa a Parser API de Readability para expandir os links.

Este pipe usa a Parser API de Readability para expandir os links.

¡Voilà! Todas as minhas URLs aparecem lindamente expandidas no meu feed.

Depois, vi que o pipe poderia ser ainda mais incrementado: agora, o Delicious sharing tag expander é parametrizável (qualquer um pode usá-lo, passando o nome de usuário no Delicious, a tag escolhida e uma chave de API) e também adiciona a descrição do bookmark como um comentário.

Como extrair o conteúdo de uma página via Readability é uma necessidade comum, isolei esta parte em outro pipeURL Readabilitifier – e a utilizei como um módulo no original. Também a reaproveitei no Feed Readabilitifier, um pipe parametrizado que expande os links de um feed RSS em sua descrição. Uso-o especialmente para expandir feeds truncados (por exemplo, compare este RSS da Folha de São Paulo com a versão expandida) mas também pode ser usado como submódulo, como no meu pipe que expande um dos RSS mais chatos do mundo, o do Arts & Letters Daily.

Post Revisions:

Changes:

There are no differences between the April 6, 2015 @ 18:22:29 revision and the current revision. (Maybe only post meta information was changed.)

Post a Comment

Your email is never shared. Required fields are marked *

*
*