testtestHome

Récupérer son OPML Google Reader via PHP et CURL…

29.03.2009 par Mich - lees dit in het Nederlands - read this in English (1)

Je n’aime pas faire du travail en double. Ainsi par exemple, lorsque je m’abonne à un blog car je le trouve intéressant, j’aimerais pouvoir l’afficher aussi dans ma blogroll. La solution s’appelle OPML.

Mon idée : récupérer de façon quotidienne mon fichier OPML de Google Reader et le stocker dans un répertoire sur mon serveur. La blogroll serait générée depuis ce fichier à chaque fois que quelqu’un aille la consulter. Et ainsi, à 24h près, elle serait toujours à jour.

Mais voila. La grosse merde, le gros bordel, le retour sur terre, c’est le suivant : pour accéder à votre fichier OPML il faut être authentifié et les choses un peu plus complèxe, car j’ai du essayer quelque chose que je n’avais jamais fait avant : utiliser cURL avec des cookies.

Le principe est simple : remplir les paramètres du formulaire de connexion Google avec CURL et stocker ce que celui-ci renvoie pour la cookie dans un fichier. Ensuite, réutiliser ce fichier comme cookie lorsque je veux accéder à l’URL de mon fichier OPML.

Si vous avez Google Reader, l’URL de votre fichier OPML est le suivant :

http://www.google.com/reader/public/subscriptions/user/<user_id>/

Vous pouvez obtenir votre userid en cliquant sur « All Items » ou « Tous mes éléments », un URL apparaîtra ensuite, votre user id est le numéro se trouvant entre les %2F, donc dans mon cas ‘06937166373900766291’:

http://www.google.com/reader/view/#stream/user%2F06937166373900766291%2Fstate%2Fcom.google%2Freading-list

Et voici donc le petit script PHP pour me connecter et récupérer le fichier OPML. Attention, j’utilise ici des noms de fichier absolu pour la cookie et le fichier final, la raison est simple : c’est parce que je compte également faire appel à ce script via un job crontab :

<?
$email="barney.stinson@gmail.com";
$password="br0";

$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");
?>

Remplacez évidemment le login, mot de passe et user id par les vôtres. J'ai choisi de mettre ma cookie dans le dossier /tmp, afin qu'il ne soit pas visible depuis l'exterieur.

A noter que ce script peut également être écrit en bash script en utilisant directement cURL. J’ai opté pour l’option php car pas tout le monde a un serveur avec accès en ligne de commande à disposition.

tags: . . |
Laisser un commentaire
  • Nom *

  • Email *

  • Homepage

  • Commentaire *

  • * = champs requis


  • Je suis amnésique