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
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.
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
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
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:
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.
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 ):
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";