Ramener des images de flickr avec l’api publique

Flickr permet des recherches dans sa base de données d’images. La plupart des recherches nécessitent une clé facile àobtenir. Mais ce script utilise une api publique.

Ce code ramène un maximum de 20 images sur base d’un tag. Il affiche ensuite ces images en proportion dans la fenêtre de l’application.

Voici une version pour Processing 1.5.1

int parcoureur=0;
PImage lim;

PImage[] flickr_images;

void setup() {
  size(600, 600);
  String[] imgs = getimgflickr("bruxelles");
  //println(imgs); // pour controler les liens
  flickr_images=new PImage[imgs.length];
  for (int i=0;i<imgs.length;i++) {
    flickr_images[i] = requestImage(imgs[i]); // request plutôt que
  }
  println("nombre d'images " + imgs.length);
  delay(1000); // laisser un petit délai au chargement
}

void draw() {
  background(0);
  float[] dims=dimensions(flickr_images[parcoureur]);

  image(flickr_images[parcoureur], 0, 0, dims[0], dims[1]);
  parcoureur++;
  if (parcoureur > (flickr_images.length-1)) {
    parcoureur=0;
  }  
  delay(1000);
}

// recherche d'images sur base du tag
String[] getimgflickr(String letag) {
  String[] names_ok= {};
  String rest =  "http://api.flickr.com/services/feeds/photos_public.gne";
  rest += "?tags=" + letag;
  // get payload
  XMLElement xml = new XMLElement(this, rest);
  XMLElement[] desc = xml.getChildren("entry");  

  for (int i = 0; i < desc.length; i++) {
    // selectionner les tags contenant les liens des images
    XMLElement[] e = desc[i].getChildren("link");
    String lurl = e[1].getStringAttribute("href");
    // verifier que c'est une image
    String[] m = match(lurl, ".jpg|.gif|.png");
    if (m!= null) {
      names_ok=append(names_ok, lurl); // ajouter à la liste
    }
  }
  return names_ok;
}

// une fonction met l'image en proportion dans la fnetre
float[] dimensions(PImage limage) {
  float[] taille=new float[2];
  int largeur=limage.width;
  int hauteur=limage.height;

  if (largeur > hauteur) {
    // image horizontale 
    // adapter la hauteur à la largeur
    taille[0]=largeur/(hauteur*1.0/height);
    taille[1]=height; // la taille verticale est la hauteur de la fenêtre
  } 
  else {
    // image verticale 
    // adapter la hauteur à la largeur
    taille[0]=width; // la taille horizontale est la largeur de la fenêtre
    taille[1]=hauteur/(largeur*1.0/width);
  }
  return taille;
}

Voici une version pour Processing 2 (les fonctions XML ont été modifiées)

// ramener des images de Flickr par l'api publique
// pas besoin de clé
int parcoureur=0;
PImage lim;

PImage[] flickr_images;

void setup() {
  size(600, 600);
  String[] imgs = getimgflickr("portrait");
  println(imgs); // pour controler les liens
  flickr_images=new PImage[imgs.length];
  for (int i=0;i<imgs.length;i++) {
    flickr_images[i] = requestImage(imgs[i]); // request plutôt que
  }
  println("nombre d'images " + imgs.length);
  delay(1000); // laisser un petit délai au chargement
}

void draw() {
  background(0);
  float[] dims=dimensions(flickr_images[parcoureur]);

  image(flickr_images[parcoureur], 0, 0, dims[0], dims[1]);
  parcoureur++;
  if (parcoureur > (flickr_images.length-1)) {
    parcoureur=0;
  }  
  delay(1000);
}

// recherche d'images sur base du tag
String[] getimgflickr(String letag) {
  String[] names_ok= {};
  String rest =  "http://api.flickr.com/services/feeds/photos_public.gne";
  rest += "?tags=" + letag;
  // get payload
  XML xml = loadXML(rest);
  XML[] desc = xml.getChildren("entry");  

  for (int i = 0; i < desc.length; i++) {
    // selectionner les tags contenant les liens des images
    XML[] e = desc[i].getChildren("link");
    String lurl = e[1].getString("href");
    // verifier que c'est une image
    String[] m = match(lurl, ".jpg|.gif|.png");
    if (m!= null) {
      names_ok=append(names_ok, lurl); // ajouter à la liste
    }
  }
  return names_ok;
}

// une fonction met l'image en proportion dans la fnetre
float[] dimensions(PImage limage) {
  float[] taille=new float[2];
  int largeur=limage.width;
  int hauteur=limage.height;

  if (largeur > hauteur) {
    // image horizontale 
    // adapter la hauteur à la largeur
    taille[0]=largeur/(hauteur*1.0/height);
    taille[1]=height; // la taille verticale est la hauteur de la fenêtre
  } 
  else {
    // image verticale 
    // adapter la hauteur à la largeur
    taille[0]=width; // la taille horizontale est la largeur de la fenêtre
    taille[1]=hauteur/(largeur*1.0/width);
  }
  return taille;
}

void keyPressed(){
  String[] imgs = getimgflickr("portrait&num=25");
  println(imgs); // pour controler les liens
  flickr_images=new PImage[imgs.length];
  for (int i=0;i<imgs.length;i++) {
    flickr_images[i] = requestImage(imgs[i]); // request plutôt que
  }
}

Forum

  • Ramener des images de flickr avec l’api publique par ju’ , 22 octobre 2012

    il semblerait que ce script ne fonctionne plus depuis le 2.0.
    copie àrevoir :)