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.

Précédent | 23/26 | Suivant

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 :)