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.
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.
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:
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…
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.
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.
¡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 pipe – URL 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:
- April 6, 2015 @ 18:22:29 [Current Revision] by brandizzi
- April 6, 2015 @ 18:22:29 by brandizzi