web-dev-qa-db-fra.com

Comment obtenir l'URL d'une image statique à partir d'une URL Flickr?

Est-il possible d'obtenir une URL d'image statique à partir de l'URL flickr via un appel API ou un script?
Par exemple:
URL Flickr -> http://www.flickr.com/photos/53067560@N00/2658147888/in/set-72157606175084388/
URL d'image statique -> http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpg

28
NM.

Dans votre URL Flickr, l'ID de la photo est 2658147888. Vous utilisez flickr.photos.getSizes pour obtenir les différentes tailles de la photo disponibles, et choisissez l'URL que vous souhaitez, 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 pour une langue particulière.

31
user181548

En spécifiant extras=url_o vous obtenez un lien vers l'image d'origine:

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 réduites, vous utilisez les paramètres suivants: url_t, url_s, url_q, url_m, url_n, url_z, url_c, url_l

Alternativement, vous pouvez construire l'URL comme décrit :

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

Je ne sais pas si vous pouvez l'obtenir directement via un seul appel API, mais ce lien explique comment les URL des images sont construites: link

5
Andrew

Vous pouvez également accéder à l'image d'origine en utilisant le photoId (numéro avant le premier trait de soulignement)

http://flickr.com/photo.gne?id=photoId

Dans votre cas, ce serait:

https://www.flickr.com/photo.gne?id=2658147888

4
Alexandru Pupsa

Voici un code que j'ai écrit pour récupérer les métadonnées 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 pour contenir mes Clé API Flickr et tous mes appels ajax vers l'API RESTful.

La fonction getPhotoInfo prend comme paramètre l'ID photo , construit l'appel ajax approprié et transmet un objet FlickrPhoto contenant le métadonnées de photo à une 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 ensuite 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);
});

J'espère que ça aide.

3
chomba

Ci-dessous une solution sans utiliser flickr-apis, seules les commandes Linux standard (en fait je l'ai exécutée sur MS Windows avec Cygwin ):

  • Mettez votre liste d'URL dans la variable tmp
  • 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 exporte le fichier de cookies à l'aide d'une extension
  • Si vous accédez à des URL publiques, supprimez simplement le paramètre - load-cookies $ cookies
  • Le script télécharge dans le dossier local les photos dans leur format d'origine
  • Si vous voulez juste l'URL de l'image statique, supprimez la dernière commande | xargs wget --load-cookies $ 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/131469243@N02/"

tmp="https://www.flickr.com/photos/131469243@N02/29765108124/in/album-72157673986011342/
https://www.flickr.com/photos/131469243@N02/29765103724/in/album-72157673986011342/
https://www.flickr.com/photos/131469243@N02/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/131469243@N02/)\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";
0
robermann