Yahoo Pipes: bugs en performance
- op 27 december 2010
- in Eigen werk, Handig
- 0
Sinds een jaar of twee experimenteer ik volop met Yahoo Pipes, een gratis tool om RSS-feeds samen te voegen, te filteren en te verrijken. Een krachtige tool met een mooie grafische interface, maar in de praktijk loop je vroeg of laat tegen haken en ogen aan. Hier drie tips voor professioneel gebruik van Yahoo Pipes.
Output valideert niet altijd
Yahoo Pipes gebruik ik onder meer om Twitter-accounts automatisch te voorzien van nieuwsberichten, zoals @climatenews, @openfeed, @internetprivacy en @fietsen. Een deel van die nieuwsberichten komt bij Google News vandaan. Dat gaat in grote lijnen zo:
- Doe een vernuftige zoekactie in Google News.
- Ergens onderaan de pagina met zoekresultaten vind je een onopvallende link naar de bijbehorende RSS-feed.
- Die RSS kun je weer in Yahoo Pipes samenvoegen met andere relevante feeds.
- Het resultaat koppel je met Twitterfeed (eveneens gratis) aan een Twitter-account.
Klinkt makkelijk, toch?
Wat ik echter gaandeweg heb doorgekregen is dat de output van Yahoo Pipes niet altijd valide is, als je Google News als een van de bronnen gebruikt. Dat zit ‘m vooral in het enorm complexe Description-veld, zoiets als:
<description>
<table border=”0″ cellpadding=”2″ cellspacing=”7″ style=”vertical-align:top;”><tr><td width=”80″ align=”center” valign=”top”><font style=”font-size:85%;font-family:arial,sans-serif”><a href=”http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNGSJyymp7CH52iDQ8gJCe4urSlKRQ &url=http://www.pzc.nl/algemeen/buitenland/7864079/Bijna-1-miljoen-euro-voor-WikiLeaks.ece”><img src=”http://nt0.ggpht.com/news/tbn/XNe_X4KojhXvtM/0.jpg” alt=”” border=”1″ width=”80″ height=”53″ /><br /><font size=”-2″>PZC</font></a></font></td><td valign=”top” class=”j”><font style=”font-size:85%;font-family:arial,sans-serif”><br /><div style=”padding-top:0.8em;”><img alt=”” height=”1″ width=”1″ /></div><div class=”lh”><a href=”http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNGSJyymp7CH52iDQ8gJCe4urSlKRQ &url=http://www.pzc.nl/algemeen/buitenland/7864079/Bijna-1-miljoen-euro-voor-WikiLeaks.ece”><b>Bijna 1 miljoen euro voor <b>WikiLeaks</b></b></a><br /><font size=”-1″><b><font color=”#6f6f6f”>PZC</font></b></font><br /><font size=”-1″>WASHINGTON (ANP) – De belangrijkste financiële tak van onthullingssite <b>WikiLeaks</b>, de in Duitsland gevestigde Wau Holland Foundation, heeft dit jaar ruim <b>…</b></font><br /><font size=”-1″><a href=”http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNH7x_XSIbuCV2JMU20AYe3xWZS38w &url=http://www.nrc.nl/nieuws/2010/12/24/17863/”><b>WikiLeaks</b> ziet kosten verdubbelen</a><font size=”-1″ color=”#6f6f6f”><nobr>NRC Handelsblad</nobr></font></font><br /><font size=”-1″><a href=”http://news.google.com/news/url?sa=t&fd=R&usg=AFQjCNHX0rdS9YfBLrjAUj6MEYMobsNPRQ &url=http://www.bndestem.nl/algemeen/economie/7858514/WikiLeaks-geeft-meer-geld-uit.ece”><b>WikiLeaks</b> geeft meer geld uit</a><font size=”-1″ color=”#6f6f6f”><nobr>BN/De Stem</nobr></font></font><br /><font size=”-1″ class=”p”></font><br /><font class=”p” size=”-1″><a class=”p” href=”http://news.google.nl/news/story?pz=1&ned=nl_nl&ncl=d6Di-E4d_v7NuZMXPZX_KsO42dD4M”><nobr><b>alle 76 nieuwsartikelen »</b></nobr></a></font></div></font></td></tr></table>
</description>
Het gevolg: Twittterfeed raakt de klus kwijt bij het inlezen van je feed en skipt de hele inhoud, waardoor je Twitter-account een paar dagen lang niet meer wordt bijgewerkt – net zolang totdat dat ene probleembericht zo oud is geworden dat het uit je feed is verdwenen.
Hoe dit te verhelpen? De eenvoudigste oplossing is het Description-veld te legen, maar in Yahoo Pipes heb je geen operator om velden te legen. Wat ook niet blijkt te werken is de inhoud van een veld met de Regex-operator (^.*$) te vervangen door helemaal niets, of door een enkele spatie. Om een of andere reden werkt dit wel met tekstuele inhoud, niet met HTML-content.
Na wat experimenteren vond ik wel deze workaround: gebruik de Rename-operator om het veld item.description te hernoemen naar iets onzinnigs als item.nothing. In de uitvoer van Yahoo Pipes worden betekenisloze velden als item.nothing automatisch geskipt. En opeens valideert je feed weer wel en plaatst Twitterfeed de nieuwste berichten weer door naar je Twitter-account.
De V2-engine heeft bugs
Sinds zijn introductie in februari 2007 werkt Yahoo Pipes onder de motorkap met de zogenoemde V1-engine. Sinds juni 2010 is er een V2-engine, die betere performance en meer stabiliteit belooft. Maar de makers zeggen het zelf al:
there will be bugs, this isn’t ready for primetime
En dat klopt: als je overschakelt op de V2-engine, dan blijkt je pipe opeens andere uitvoer te genereren. Neem bijvoorbeeld deze reguliere expressie:
^.*http://(.*\.nl)/.*$ → $1
Unix- en Linux-kenners zullen dit meteen herkennen: deze reguliere expressie extraheert .nl-domeinen. De link:
http://www.knmi.nl/cms/content/89547/knmi_annual_report_2009
wordt dan:
www.knmi.nl
Bij de V1-engine werkt dat inderdaad zo, prima. Maar de V2-engine denkt er anders over. Het heeft me twee uur puzzelen gekost voordat ik ontdekte dat die er gewoon niets mee doet:
www.knmi.nl/cms/content/89547/knmi_annual_report_2009
Terugswitchen naar V1 loste het probleem meteen op. Kortom: blijf lekker de V1-engine gebruiken.
Yahoo Pipes is traag
En dan bedoel ik ook echt tráág. Zolang je Yahoo Pipes gebruikt voor automatisch gevulde Twitter-accounts, dan merk je hier weinig van – Twitterfeed importeert je pipe achter de schermen. Maar als je een pipe op een webpagina plaatst (zie bijvoorbeeld het nieuwsoverzicht op de voorpagina van Klimaatnieuws.nl), dan kun je wel allerlei issues verwachten. De laadtijd van een complexe pipe kan 5 tot 10 seconden bedragen, die nog eens bovenop de laadtijd van de rest van de pagina komt. Op mijn eigen server merk ik dat het embedden van een Yahoo-pipe in een webpagina de load average soms flink omhoog jaagt.
Caching van webpagina’s kan dit probleem een stuk verlichten, maar hoe langer de levensduur van je cache, hoe meer je feed gaat achterlopen. En ook bij caching zul je altijd bezoekers blijven houden die incidenteel geconfronteerd worden met een niet-gecachte pagina en dus onaanvaardbaar lang moeten wachten.
Wat te doen om de beroerde laadtijd van Yahoo Pipes te verbeteren? Daarvoor bleek een simpele oplossing: geen hele webpagina’s cachen, maar alleen de feed zelf. Een cronjob op mijn server laadt elk half uur alle benodigde pipes in en slaat de uitvoer lokaal op. Alle sites op de server kunnen simpelweg volstaan met het embedden van de lokale kopieën. Sinds ik deze oplossing heb geïmplementeerd, is de gemiddelde laadtijd van alle websites op mijn server met 12 procent afgenomen.
Kortom
Yahoo Pipes is en blijft een geweldige tool om webdata te verwerken en nieuwe RSS-feeds en mashups samen te stellen. Maar bijna vier jaar na de introductie krijg ik de indruk dat Pipes nog steeds niet helemaal uit het experimentele stadium is gekomen. Zodra je deze service voor professionele doeleinden gebruikt, dan is er maar één devies: testen, testen en nog eens testen – zowel qua output als qua performance. En hier en daar een wat minder elegante maar wel doelgerichte tweak kan een enorme winst opleveren.
Laatste reacties