Как получить статический URL-адрес изображения из URL-адреса flickr? - PullRequest
27 голосов
/ 26 ноября 2009

Можно ли получить статический URL-адрес изображения из URL-адреса flickr с помощью вызова API или какого-либо сценария?
Например:
Flickr URL -> http://www.flickr.com/photos/53067560@N00/2658147888/in/set-72157606175084388/
URL статического изображения -> http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpg

Ответы [ 6 ]

51 голосов
/ 28 мая 2014

С указанием 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
31 голосов
/ 26 ноября 2009

В вашем URL-адресе Flickr идентификатор фотографии - 2658147888. Вы используете flickr.photos.getSizes , чтобы получить различные размеры доступных фотографий, и выбираете нужный URL-адрес, в зависимости от размера. , Есть несколько способов получить доступ к API, поэтому укажите, хотите ли вы получить более подробную информацию для определенного языка.

5 голосов
/ 26 ноября 2009

Не уверен, что вы можете получить его напрямую через один вызов API, но эта ссылка объясняет, как создаются URL для изображений: ссылка

4 голосов
/ 16 сентября 2016

Вы также можете получить доступ к исходному изображению, используя photoId (номер перед первым подчеркиванием)

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

В вашем случае это будет:

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

3 голосов
/ 28 января 2015

Вот некоторый код, который я написал для извлечения метаданных из Flickr Photo на основе его идентификатора:

Сначала я определил объект 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, содержащий метаданные фотографии, в функцию callback .

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);
});

Надеюсь, это поможет.

0 голосов
/ 19 января 2017

Ниже решения без использования flickr-apis, только стандартные команды Linux (на самом деле я запускал его на MS Windows с Cygwin ):

  • Поместите свой список URL в переменную tmp
  • Если вы загружаете личные фотографии, подобные мне, протокол будет https , и вам нужно будет передать файлы cookie для аутентификации на wget . Я вхожу в браузер (Chrome) и экспортирую файл cookie, используя расширение
  • Если вы обращаетесь к общедоступным URL-адресам, просто удалите параметр - load-cookies $ cookies
  • Скрипт загружает в локальную папку фотографии в их оригинальном формате
  • Если вам нужен только URL статического изображения, удалите последнюю команду | xargs wget - load-cookies $ cookies

Здесь скрипт, вы можете использовать его как начало для ваших исследований:

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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...