Можно ли получить URL статического изображения с URL-адреса flickr с помощью вызова api или какого-либо script?
Например:
Flickr URL → http://www.flickr.com/photos/[email protected]/2658147888/in/set-72157606175084388/
URL статического изображения → http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpg
Как получить статический URL-адрес изображения с URL-адреса flickr?
Ответ 1
В вашем URL-адресе Flickr идентификатор фотографии - 2658147888. Вы используете flickr.photos.getSizes, чтобы получить различные размеры фотографии, и выберите URL-адрес, который вы хотите от этого, в зависимости от размера. Существует несколько способов доступа к API, поэтому, пожалуйста, укажите, хотите ли вы получить более подробную информацию о конкретном языке.
Ответ 2
С указанием extras=url_o
вы получите ссылку на исходное изображение:
https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=YOURAPIKEY&format=json&nojsoncallback=1&text=cats&extras=url_o
Для уменьшенных изображений вы используете следующие параметры: url_t, url_s, url_q, url_m, url_n, url_z, url_c, url_l
В качестве альтернативы вы можете создать URL как описано ниже:
http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}.jpg
or
http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg
Ответ 3
Не уверен, что вы можете получить его напрямую через один вызов API, но эта ссылка объясняет, как упорядочиваются URL-адреса для изображений: link
Ответ 4
Вот код, который я написал для получения метаданных из Flickr Photo на основе его ID:
Сначала я определил объект javascript FlickrPhoto
для хранения метаданных фотографии:
function FlickrPhoto(title, owner, flickrURL, imageURL) {
this.title = title;
this.owner = owner;
this.flickrURL = flickrURL;
this.imageURL = imageURL;
}
Затем я создал объект FlickrService
для хранения API-интерфейса Flickr и всех моих вызовов ajax API RESTful.
Функция getPhotoInfo
принимает идентификатор фотографии как параметр, создает соответствующий вызов ajax и передает объект FlickrPhoto
, содержащий метаданные фотографии, в функцию обратного вызова.
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);
}
}
Затем вы можете использовать услугу следующим образом:
var photoId = "11837138576";
var flickrService = new FlickrService();
flickrService.getPhotoInfo(photoId, function(photo) {
console.log(photo.imageURL);
console.log(photo.owner);
});
Надеюсь, что это поможет.
Ответ 5
Вы также можете получить доступ к исходному изображению с помощью photoId (номер перед первым подчеркиванием)
http://flickr.com/photo.gne?id=photoId
В вашем случае это будет:
Ответ 6
Ниже решения без использования flickr-apis используются только стандартные команды Linux (на самом деле я запускал его в MS Windows с Cygwin):
- Поместите свой список URL-адресов в переменную tmp
- Если вы загружаете личные фотографии, подобные мне, протокол будет https, и вам нужно будет передать файлы cookie аутентификации в wget. Я вхожу в систему с браузером (Chrome) и экспортировал файлы cookie с помощью расширения
- Если вы обращаетесь к общедоступным URL-адресам, просто удалите параметр --load-cookies $cookies
- script загружает в локальную папку фотографии в исходном формате
- Если вам нужен только URL статического изображения, удалите последнюю команду | xargs wget --load-cookies $cookies
Здесь script вы можете использовать его как начало для своих исследований:
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";