Consulter les informations détaillées d'une image Flickr avec PHPFlickr

Aujourd'hui nous verrons comment récupérer toutes les informations d'une image (Du titre aux coordonnées GPS, en passant par le nombre de commentaires et les permissions d'accès).

Introduction

Je ne vais pas re-présenter Flickr. Pour ceux qui ne le connaissent toujours pas, rendez vous sur le billet lister les albums d'un utilisateur Flickr. Nous poursuivons encore l'exploration de la classe PHPFlickr ainsi que de l'API de Flickr avec photos_getInfo(). Cette méthode nous permettra de récupérer toutes les informations nécessaires sur une image.

Pré-requis

Les pré-requis seront identiques au billet Authentification à Flickr via API, Oauth et PHPFlickr. Je vous invite donc à consulter ce billet pour en savoir d'avantage sur les éléments nécessaires pource tutoriel.

Détail de photos_getInfo()

Cette méthode renvoie une liste complète d'informations sur une photo. Elle requiert 2 paramètres (1 obligatoire, 1 facultatif).
view plaincopy to clipboardprint?

$f = new phpFlickr($cle_api, $cle_secret_api);  
$infos_photo = $f->photos_getInfo($id_photo, $secret);

 

  • $id_photo (Obligatoire) doit contenir l'identifiant d'une image.
  • $secret (Facultatif) Chaque image contient un identifiant secret. Si l'identifiant secret est renseigné, vous sautez l'étape des droits d'accès. Imaginons que le compte sur lequel vous êtes authentifié n'a pas les droits pour consulter les informations, si $secret est correct vous aurez quand même l’autorisation.

La méthode retourne les éléments dans un tableau PHP. Il est composé comme ceci :

     photo  
     {  
          id :: Identifiant de l'image  
          secret :: Identifiant secret de l'image  
          server :: Serveur contenant l'image  
          farm :: Numéro du sous-domaine contenant l'image  
          dateuploaded :: Timestamp unix de la date d'ajout  
          isfavorite :: Dans vos favoris (0=non, 1=oui) (Authentification exigée)  
          license :: License utilisée (Tous droits réservés, paternité...)  
          safety_level :: 0=Non renseigné, 1=Contenu sûr, 2=Modéré, 3=Restreint  
          rotation :: Angle de rotation par rapport à l'image d'origine.  
          owner  
          {  
               nsid :: Identifiant de l'auteur  
               username :: Pseudonyme de l'auteur  
               realname :: Nom réel (vide si non renseigné)  
               location :: Localisation de l'auteur (vide si non renseigné)  
               iconserver :: Serveur contenant l'avatar (0 si non renseigné)  
               iconfarm :: Sous domaine contenant l'avatar (0 si non renseigné)  
          }  
          title :: Titre de l'image  
          description :: Description de l'image  
          visibility  
          {  
               ispublic :: Visible par le public (1=oui, 0=non)  
               isfriend :: Visible par les amis (1=oui, 0=non)  
               isfamily :: Visible par la famille (1=oui, 0=non)  
          }  
          dates  
          {  
               posted :: Timestamp Unix de la date d'upload  
               taken :: Date de prise de la photo (Format : 0000-00-00 00:00:00)  
               takengranularity :: Justesse de la date de prise (0=exacte, 4=mois et année, 6=année)  
               lastupdate :: Timestamp unix de la dernière mise à jour  
          }  
          permissions //est retourné uniquement si c'est l'auteur qui effectue la requête  
          {  
               permcomment :: Ajout/modification des commentaires (0=uniquement l'auteur, 1=famille et amis, 2=contacts, 3=tout le monde)  
               permaddmeta :: Modification du remarques, personnes, tags... (0=uniquement l'auteur, 1=famille et amis, 2=contacts, 3=tout le mondeà  
          }  
          views :: Nombre de vues  
          editability  
          {  
               cancomment :: Ajout/modification de commentaires par l'utilisateur authentifié (0=non, 1=oui)  
               canaddmeta :: Modification du remarques, personnes, tags... par l'utilisateur authentifié (0=non, 1=oui)  
          }  
          publiceditability  
          {  
               cancomment :: Ajout/modification de commentaires par le public (0=non, 1=oui)  
               canaddmeta :: Modification des remarques, personnes, tags... par le public (0=non, 1=oui)  
          }  
          usage  
          {  
               candownload :: Autorisation de télécharger l'image d'origine pour l'utilisateur authentifié  
               canblog :: Autorisation d'insérer l'image dans un site externe pour l'utilisateur authentifié  
               canprint :: Autorisation d'impression pour l'utilisateur authentifié  
               canshare :: Autorisation de partage pour l'utilisateur authentifié  
          }  
          comments :: Nombre de commentaires  
          notes  
          {  
               note  
               {  
                    0  
                    {  
                         id :: Identifiant de la remarques  
                         author :: Identifiant de l'auteur  
                         authorname :: Pseudonyme de l'auteur  
                         x :: Position x en px de la remarque  
                         y :: Position y en px de la remarque  
                         w :: Largeur en px de la remarque  
                         h :: Hauteur en px de la remarque  
                         _content :: Texte de la remarque  
                    }  
                    1...X {}  
               }  
          }  
          people  
          {  
               haspeople :: Personnes identifiés sur l'image (0=non, 1=oui)  
          }  
          tags  
          {  
               tag  
               {  
                    0  
                     {  
                         id :: Identifiant du tag  
                         author :: Identifiant de l'auteur  
                         raw :: Tag avant formatage (suppression des espace et autres caractères spéciaux)  
                         _content :: Tag formaté  
                         machine_tag :: Machine tag (0=non, 1=oui)  
                    }  
                    1...X {}  
               }  
          }  
          location  
          {  
               latitude :: Position GPS  
               longitude :: Position GPS  
               accuracy :: Niveau de précision de la géolocalisation (0=monde > 16=rue)  
               context :: Environnement de la photo (0=non définis, 1=intérieur, 2=extérieur)  
               neighbourhood  
               {  
                    _content :: Nom du quartier  
                    place_id :: Identifiant du quartier  
                    woeid :: Position géographique de la zone  
               }  
               locality  
               {  
                    _content :: Nom de la ville  
                    place_id :: Identifiant de la ville  
                    woeid :: Position géographique de la zone  
               }  
               county  
               {  
                    _content :: Nom du département  
                    place_id :: Identifiant du département  
                    woeid :: Position géographique de la zone  
               }  
               region  
               {  
                    _content :: Nom de la région  
                    place_id :: Identifiant de la région  
                    woeid :: Position Géographique de la zone  
               }  
               country  
               {  
                    _content :: Nom du pays  
                    place_id :: Identifiant du pays  
                    woeid :: Position géographique de la zone  
               }  
               place_id :: Identifiant de la zone géographique (ville, département, région, pays) la plus précise  
               woeid :: Position géographique la plus précise  
          }  
          geoperms  
          {  
               ispublic :: Tout le monde a accès à la géolocalisation (0=non, 1=oui)  
               iscontact :: Les contacts ont accès à la géolocalisation  
               isfriend :: Les amis ont accès à la géolocalisation  
               isfamily :: La famille a accès à la géolocalisation  
          }  
          urls  
          {  
               url  
               {  
                    0  
                    {  
                         type :: Type du lien  
                         _content :: Lien  
                    }  
                    1...X {}  
               }  
          }  
          media :: Type du fichier (photo, video)  
     }  
     stat :: Statut de la requête 

Comment utiliser photos_getInfo()

Voici un exemple d'utilisation de photos_getInfo. Le résultat du code ci-dessous sera l'image $id_photo accompagnée d'informations comme le titre, la description, l'auteur, l'avatar, la date d'upload, le nombre de commentaires...

$f = new phpFlickr($cle_api, $cle_secret_api);  
$photos = $f->photos_getInfo($id_photo);  

if($photos['photo']['owner']['iconserver'] == 0 && $photos['photo']['owner']['iconfarm'] == 0)  
    echo '<img alt="Avatar par Défaut" src="http://www.flickr.com/images/buddyicon.jpg" /><br />';  
else  
    echo '<img alt="Avatar Auteur" src="http://farm'.$photos['photo']['owner']['iconfarm'].'.staticflickr.com/'.$photos['photo']['owner']['iconserver'].'/buddyicons/'.$photos['photo']['owner']['nsid'].'.jpg" /><br />';  

echo ' Posté par '.$photos['photo']['owner']['username'].' le '.date('d/m/Y', $photos['photo']['dateuploaded']).' à '.date('H:i', $photos['photo']['dateuploaded']).' - '.$photos['photo']['comments'].' Commentaire(s).<br />'; 
echo 'Titre : '.$photos['photo']['title'].'<br />';  
echo 'Description : '.$photos['photo']['description'].'<br />';  
echo 'Tags : ';
foreach($photos['photo']['tags']['tag'] as $tag)  
{  
     echo $tag['raw'].', ';  
}