2009-11-26 8 views
21

Est-il possible d'obtenir une URL d'image statique depuis l'URL flickr via un appel api ou un script?
Pour exemple:
Flickr URL ->http://www.flickr.com/photos/[email protected]/2658147888/in/set-72157606175084388/
URL de l'image statique ->http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpgComment obtenir l'URL statique de l'URL flickr?

+7

Oui, vraiment vieux. Mais si vous, comme moi, encore finir ici après google, consultez ce lien: http://www.flickr.com/services/api/misc.urls.html –

Répondre

24

Dans votre URL Flickr, l'ID de photo est 2658147888. Vous utilisez flickr.photos.getSizes pour obtenir les différentes tailles de photo disponibles, et choisissez l'URL que vous voulez, en fonction de la taille. Il existe plusieurs façons d'accéder à l'API, veuillez donc spécifier si vous souhaitez plus de détails sur une langue particulière.

+0

Merci! C'est exactement ce que je cherchais. –

+0

Merci, moi aussi! n'était pas du tout évident que si l'un des appels api flickr donnait le lien de l'image statique réelle. – cboettig

4

Je ne sais pas si vous pouvez l'obtenir directement par un simple appel API, mais ce lien explique comment les urls pour les images sont contructed : link

+0

Merci pour le lien. Je préfère construire le lien par moi-même, car faire un appel d'API pour chaque image est lent pour moi. – Daniel

41

Avec la spécification extras=url_o vous obtenez un lien vers l'image originale:

https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=YOURAPIKEY&format=json&nojsoncallback=1&text=cats&extras=url_o 

Pour les images à échelle réduite, utilisez les paramètres suivants: url_t, url_s, url_q, url_m, url_n, url_z, url_c, url_l

Vous pouvez construire l'URL as described:

http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}.jpg 
or 
http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg 
+5

Ceci est une réponse parfaite puisque j'utilise déjà flickr.photos.search. Je vous remercie! – TechnoTim

+0

Réponse vraiment parfaite que celle acceptée. Cela devrait être la bonne réponse. @ mb21 merci beaucoup. – Mahesh

+0

Je suis d'accord avec @Mahesh, cela devrait être la bonne réponse. –

3

Voici un code que j'ai écrit pour extraire des métadonnées à partir d'une photo Flickr en fonction de son ID:

J'ai d'abord défini un objet javascript FlickrPhoto pour contenir les métadonnées de la photo:

function FlickrPhoto(title, owner, flickrURL, imageURL) { 
    this.title = title; 
    this.owner = owner; 
    this.flickrURL = flickrURL; 
    this.imageURL = imageURL; 
} 

J'ai ensuite créé un objet FlickrService de tenir mes Flickr API Key et tous mes appels ajax à l'API RESTful.

La fonction getPhotoInfo prend la photo ID en tant que paramètre, construit l'appel Ajax approprié et transmet un objet FlickrPhoto contenant les métadonnées de photo à un fonction de rappel.

function FlickrService() { 
    this.flickrApiKey = "763559574f01aba248683d2c09e3f701"; 
    this.flickrGetInfoURL = "https://api.flickr.com/services/rest/?method=flickr.photos.getInfo&nojsoncallback=1&format=json"; 

    this.getPhotoInfo = function(photoId, callback) { 
     var ajaxOptions = { 
      type: 'GET', 
      url: this.flickrGetInfoURL, 
      data: { api_key: this.flickrApiKey, photo_id: photoId }, 
      dataType: 'json', 
      success: function (data) { 
       if (data.stat == "ok") { 
        var photo = data.photo; 
        var photoTitle = photo.title._content; 
        var photoOwner = photo.owner.realname; 
        var photoWebURL = photo.urls.url[0]._content; 
        var photoStaticURL = "https://farm" + photo.farm + ".staticflickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + "_b.jpg"; 

        var flickrPhoto = new FlickrPhoto(photoTitle, photoOwner, photoWebURL, photoStaticURL); 
        callback(flickrPhoto); 
       } 
      } 
     }; 

     $.ajax(ajaxOptions); 
    } 
} 

Vous pouvez alors utiliser le service comme suit:

var photoId = "11837138576"; 
var flickrService = new FlickrService(); 
flickrService.getPhotoInfo(photoId, function(photo) { 
    console.log(photo.imageURL); 
    console.log(photo.owner); 
}); 

Hope it helps.

0

Voici une solution sans en utilisant flickr-apis, seulement les commandes Linux standard (en fait je l'ai couru sur MS Windows avec Cygwin):

  • Mettez votre liste d'URL dans le tmp variables
  • Si vous téléchargez des photos privées comme moi, le protocole sera https et vous devrez passer les cookies d'authentification à wget. Je me connecte avec un navigateur (Chrome) et exporté le fichier de cookies en utilisant un extension
  • Si vous accédez à des URL publiques, supprimez le paramètre --load-cookies les cookies $
  • Les téléchargements de script dans le dossier local de la photos dans leur format original
  • Si vous voulez juste l'URL de l'image statique, supprimez la dernière commande | xargs wget --load-cookies les cookies $

Voici le script, vous pouvez l'utiliser comme point de départ pour vos explorations:

cookies=~/cookies.txt 
root="https://www.flickr.com/photos/[email protected]/" 

tmp="https://www.flickr.com/photos/[email protected]/29765108124/in/album-72157673986011342/ 
https://www.flickr.com/photos/[email protected]/29765103724/in/album-72157673986011342/ 
https://www.flickr.com/photos/[email protected]/29765102344/in/album-72157673986011342/" 

while read -r url; do 

    if [[ $url == http* ]] ; 
    then 
     url2=$root`echo -n $url | grep -oP '(?<=https://www.flickr.com/photos/[email protected]/)\w+'`/sizes/o 
     wget -q --load-cookies $cookies -O - $url2 | grep -io 'https://c[0-9].staticflickr.com.*_o_d.jpg' | xargs wget --load-cookies $cookies 
    fi 
done <<< "$tmp";