

Ik hou niet echt van dubbel werk. Wanneer ik mij inschrijf op de RSS-feed van een blog, vind ik het lastig dat ik daarnaast ook nog eens mijn blogroll moet gaan aanpassen. Ik doe het eerlijk gezegd al een tijdje niet meer. Ondertussen heb ik het aangepast. De oplossing is eenvoudig en noemt OPML.
Mijn idee : op dagelijkse basis mijn OPML-file van Google Reader gaan ophalen en ergens stockeren op mijn server. De blogroll zou op die manier gegenereerd worden vanaf de OPML-file iedere keer dat iemand ze raadpleegt. Zo zou ze maximum 24u vertraging hebben met de realiteit.
Maar de realiteit is echter een beetje minder eenvoudig, want om de OPML-file te kunnen downloaden moet je je eerst aanloggen op Google Reader. Hiervoor moest ik een beetje prutsen en iets doen dat ik nooit eerder had gedaan: werken met cURL en cookies.
Het principe is eenvoudig: roep een URL aan met een reeks parameters, in mijn geval de pagina achter een aanlog-formulier van Google. Ik geef aan cURL de nodige opties mee dat die de gegevens die voor een cookie bestemd zijn naar een file gaat schrijven. Deze file gebruik ik dan later opnieuw, als cookie, om 'aangelogd' de OPML-file op te halen.
Indien u Google Reader gebruikt, dan is de URL van uw OPML-file de volgende:
http://www.google.com/reader/public/subscriptions/user/<user_id>/
U kunt uw user id achterhalen door op « All Items » te klikken. De user id bevindt zich tussen de %2F, in mijn geval ‘06937166373900766291’:
http://www.google.com/reader/view/#stream/user%2F06937166373900766291%2Fstate%2Fcom.google%2Freading-list
Het volgend PHP-scriptje logt zich aan en gaat de OPML-file ophalen. Ik gebruik in dit voorbeeldje wel absolute paden voor de cookie en de file, omdat ik het scriptje in crontab zet om dagelijks op te halen.
<?
$email="barney.stinson@gmail.com";
$password="legen-wait4it-wait4it-wait4it-dary";
$url = "https://www.google.com/accounts/ServiceLoginAuth?service=reader";
$params = "service=reader";
$params.= "&Email=".urlencode($email);
$params.= "&Passwd=$password";
$params.= "&continue=http://www.google.com/reader/";
$params.= "&hl=en";
$params.= "&nui=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch);
curl_close($ch);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "http://www.google.com/reader/public/subscriptions/user/06937166373900766291/");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
curl_setopt($ch2, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch2);
curl_close($ch2);
$fp = fopen("/home/emich.be/public_html/misc/google-reader-subscriptions.xml","w");
fputs($fp,$data);
fclose($fp);
unlink("/tmp/cookie.txt");
?>
Vervang natuurlijk uw login, paswoord en user id in het bovenstaand voorbeeld. Ik plaats de cookie-file in de /tmp folder opdat deze extern nooit toegankelijk wordt gemaakt. Deze file wordt op het einde van het scriptje gedelete.
Dit scriptje zou eigenlijk ook in puur bash-scripting kunnen worden geschreven, maar ik koos hier niet voor omdat niet iedereen een server heeft draaien met command line access.

Deze namiddag ontving ik een telefoonoproep :
Dag meneer, ik ben van bedrijf X en ik bel u in naam van de gemeente Schaarbeek. Wij zouden graag met u afspreken om uw sloten te komen nakijken en u preventief informatie te geven over inbraken, groeiend en verontrustend fenomeen in uw gemeente. Wanneer bent u beschikbaar?
Bon. Chronologisch, wat toen in me opkwam:
Maar bon, ik heb echt wel geen inbraakadvies nodig hoor. Vooraleer ze door de lastige deur beneden zijn, moeten ze nog langs mijn huisbaas die ieder verdacht geluidje kan horen. Dan moeten ze ook nog langs de nymphomane 50-jarige vrouw geraken vooraleer ze op mijn verdiep komen en het aan de stok krijgen met mijn 2 luipaarden en @flexyflow (indien u voor de optie ‘breek mijn nek als ik u wakker maak’ heeft gekozen). Dus ja, no worries, ze.
Vorige zaterdag vond er alweer een nieuwe editie van Barcamp plaats. Deze keer was het in Antwerpen te doen en werd het georganiseerd door Anne. Misschien kennen jullie het principe van Barcamp wel: presentaties, maar geen toeschouwers. Met andere woorden, iedereen die deelneemt aan Barcamp moet zelf ook een presentatie geven of op de één of andere manier bijdragen aan de organisatie.
De presentaties die ik het leukste vond waren die van Koen Delvaux, over een auto-pilot systeem over GPS voor telegeleide vliegtuigen, Steffest en zijn Arduino-experimenten en Tom Klaasen over @twunch. Er waren waarschijnlijk ook nog een andere reeks interessante presentaties, maar zo gaat dat op Barcamp, ze zijn parallel en het is onmogelijk om zich in 3 stukken te knippen.
Mijn presentatie kreeg de naam "build your own Google Latitude", of hoe je eigenlijk zelf op je GSM met J2ME via de location-module (JSR-179) je GPS-positie kan doorsturen naar een centrale server en deze op je site op een Google Map aan de wereld kan tonen.
Ondanks het hoog aantal last-minute afwezigen vond ik Barcamp een succes. Een grote dank u aan Anne en de sponsors: Nucleus, Devia, Chocolatque, 10to1, The Parking Lot en Nespresso.
Volgende keer in Brussel?
Ik weet echt niet wat zeggen de laatste dagen. Echt wel geen goesting om wat dan ook te schrijven. Maar alles gaat goed, he, dat het daarover toch maar eventjes duidelijk is.
Iedere reis hetzelfde verhaal. Mij zo proberen tegen te houden.
Net als de film is de soundtrack van Slumdog Millionaire door A R Rahman een aanrader. Luister er wel niet teveel naar, want sommige liedjes werken aanstekelijk en blijven lang plakken, zoals Ringa Ringa in de video hierboven.