Retrouver l’URL réelle d’un article derrière FeedBurner

Yahoo Query LanguageFeedBurner 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] => http://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 :

3 commentaires

  • Par Freeroots 

    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…

    • Serait-ce la menace d’une class-action pour la défense de cette brave madame Michu ? Pour ma défense à moi, je n’ai point titillé ni l’endroit, ni l’envers de la sus-dite !
      Quant aux feignasses môssieur, dans le billet précédent, j’arguais judicieusement le contraire. C’est qu’il ne s’adressait point aux développeurs.
      Pour cette caste (dont j’essaye discrètement de faire partie), l’évidence est de mise : rien ne sert de réinventer la roue. La fainéantise chez ces gens est souvent un moteur d’innovations assez efficace 😉

  • Par Jean MICHU 

    +1
    (innovation traduisant en 2 caractères : je suis geek, donc feignasse, et je trouve que ce que vous dites, c’est pas faux).
    Mais quand même, laissez ma femme tranquille !

Ajouter un commentaire