Retrouver l’URL réelle d’un article derrière FeedBurner
FeedBurner et les autres outils de raccourcis d’URL masquent l’URL réelle des articles (bah oui, suis en forme aujourd’hui !). C’est le problème que j’ai rencontré quand j’ai voulu mettre en place les miniatures sur ma revue de presse. La plupart des blogs utilisant FeedBurner, j’avais une URL de type « http://feedproxy.google.com/~r/… », or, pour la miniature, je voulais celle du site, pas celle de FeedBurner.
Pour retrouver une adresse cachée derrière un proxy, il faut donc suivre son URL jusqu’à tomber sur l’article final. En prog, c’est pas forcément simple à mettre en place. C’est là que je suis tombé sur le Yahoo! Query Language l’idée étant de demander à Yahoo! de suivre les URL successives et de me renvoyer l’URL finale.
Et en passant par les API de Yahoo!, ça marche ! (Si !)
Comme je sais que vous avez un petit côté curieux et un gros côté feignasse, voici le code que j’ai utilisé pour arriver à mes fins :
$url = 'http://feedproxy.google.com/~r/souslestoits/~3/_8fCCaBNhBk/'; // Définition de la requete YQL. // URL de base de l'API Yahoo! $yql_base_url = "http://query.yahooapis.com/v1/public/yql"; // On utilise la base de javarants.com $yql_query = "use 'http://javarants.com/yql/javascript.xml' as j;"; // La requete YQL en elle-meme $yql_query .= "select * from j where code=\"response.object = y.rest('".$url."').followRedirects(false).get().headers.location;\""; $yql_query_url = $yql_base_url . "?q=" . urlencode($yql_query); // On définit le format de sortie (XML ou JSON) $yql_query_url .= "&format=json"; // Récupération des données $session = curl_init($yql_query_url); curl_setopt($session, CURLOPT_RETURNTRANSFER,true); $json = curl_exec($session); // On décode le json $phpObj = json_decode($json); // et l'affaire est dans le sac echo '<pre>'; print_r($phpObj); echo '</pre>';
Ce qui nous donne le résultat suivant, dans lequel on retrouve notre URL de base.
stdClass Object ( [query] => stdClass Object ( [count] => 1 [created] => 2010-11-12T10:57:03Z [lang] => en-US [results] => stdClass Object ( [result] => https://www.souslestoits.net/comment-google-prepare-larrivee-de-la-google-tv/ ) ) )
Elle est pas belle la vie ?
Il ne vous reste plus qu’à mettre en place un petit système de cache pour ne pas lancer 12 fois les mêmes requêtes. Pour ceux que ça intéresse, voici l’objet tout fait dont je me sers pour la gestion de la revue de presse. Il n’y aura qu’à définir le chemin du fichier de cache (qui doit être accessible en écriture) dans la constante CACHEPATH, et hop 😉
Pour en savoir un peu plus sur le YQL qui, à la base, sert à un tas d’autres trucs super intéressants :
Depuis que Môssieur a changé de plateforme, il a publié 2 articles. Bien. C’est un bon rythme. Par contre ça fait 2 fois, une par article, que ce vénérateur de madame Michu nous traite de feignasses. Alors moi je dis ça suffit ! Va falloir songer à rétablir une ligne éditoriale décente. Sans quoi monsieur Michu pourrait bien être incidemment mis au fait des sombres agissement de ce technophile à l’endroit de son épouse…