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?
Répondre
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.
Merci! C'est exactement ce que je cherchais. –
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
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
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.
Vous pouvez également accéder à l'image originale en utilisant le PHOTOID (numéro avant le premier trait de soulignement)
http://flickr.com/photo.gne?id=photoId
Dans votre cas, il serait:
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";
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 –