<?php
// exemple : http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=x3...2b&tags=pegasus,bridge&tag_mode=all&license=1

Class Flickr {

    private 
$ApiKey;
    private 
$rest "";
    private 
$options = array();

    
/**
     * constructeur
     */    
    
public function __construct() {
      
/* clé de développement */
      
$this->ApiKey "your_key";

      
/* URL du service */
      
$this->rest "http://api.flickr.com/services/rest/?";

      
/* options diverses de requête */
      /* cf. doc http://www.flickr.com/services/api/flickr.photos.search.html */
      
$this->options['content_type'] = 1;
      
$this->options['sort'] = "relevance";
      
/* on ne prendra que les images avec licence CC by-nc-sa :
       * voir http://creativecommons.org/licenses/by-nc-sa/2.0/
       */
      
$this->options['license'] = 1;
    }
    
    
    private function 
getApiKey() {
      return 
$this->ApiKey;
    }
    


    
/**
     * effectue une recherche avec une liste de mots clés
     * @param la liste des mots clés
     * @param le nombre de résultats voulus, optionnel (10 par défaut)
     *
     * @return le code XHTML à utiliser pour afficher les vignettes carrées
     */
    
public function rechercheParTags($tagliste$nb=10) {
      
/* construire l'URL */
      
$url $this->rest "api_key=" $this->getApiKey() . "&method=flickr.photos.search&tags=" urlencode($tagliste) . "&sort=" $this->options['sort'] . "&license=" $this->options['license'] . "&per_page=" $nb;

      
// fetch data
      
$data $this->curlGet($curl);   

      
/* parser la réponse XML avec simpleXML */      
      
$sx simplexml_load_string($data);

      
/* obtenir tous les éléments <photo> */
      
$tab $sx->xpath("//photo");

      
$photoset "<div>";

      
/* pour chaque photo, créer son affichage */      
      
foreach ($tab as $photo)  {
    
$values $photo->attributes();
    
/**
     * le tableau $values a les données :
     * $values = array(
     *     "farm" =>  $att,
     *    "server" => ,
     *    "id" => ,
     *    "secret" => 
     *    );
     */
    
$photoset .= "<div class=\"photo\"><img src=\"{$this->imgSrc($values"_s")}\" alt=\"{$values['title']}\"  /><br/><a href=\"\">Sélectionner</a></div>\n";
      }

      
$photoset .= "</div>\n";

      return 
$photoset;      
    }


    
/**
     * fabrique l'URL d'une image en fonction des infos données en paramètres 
     * cf doc API Flickr : http://www.flickr.com/services/api/misc.urls.html
     */
    
private function imgSrc($values$size="") {
      
$r="";
      
$r "http://farm{$values['farm']}.static.flickr.com/{$values['server']}/{$values['id']}_{$values['secret']}{$size}.jpg";
      return 
$r;
    }

    private function 
curlGet($url) {
      
/* utilisation de CURL, avec proxy si besoin */
      
$curl curl_init();
      if (
USE_PROXY) {
    
curl_setopt($curlCURLOPT_PROXYURL_PROXY);
      }
      
curl_setopt($curlCURLOPT_URL$url);
      
curl_setopt($curlCURLOPT_RETURNTRANSFER1);
      
$data curl_exec($curl);     
      return 
$data;
    }

// fin de la classe Flickr
?>