testtestHome

Uw Google Reader OPML-file ophalen via PHP et CURL…

29.03.2009 door Mich - lire la version francophone - read this in English (1)

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.

tags: . . |
Zeg het eens...
  • Naam *

  • email *

  • Webstek

  • Uw reactie *

  • * = verplicht veld


  • Vergeet niet wie ik ben!