2009-11-26 196 views
21

是否可以通過api調用或某些腳本從flickr URL獲取靜態圖像URL?
對於如:
Flickr的URL - >http://www.flickr.com/photos/[email protected]/2658147888/in/set-72157606175084388/
靜態圖像URL - >http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpg如何從flickr網址獲取靜態圖片網址?

+7

是的,真的老了。但是,如果你和我一樣,仍然會在這裏結束後,谷歌搜索,看看這個鏈接:http://www.flickr.com/services/api/misc.urls.html – 2012-09-27 23:39:37

回答

24

在您的Flickr網址中,照片ID爲2658147888.您可以使用flickr.photos.getSizes來獲取各種尺寸的照片,並根據尺寸選擇所需的網址。有幾種訪問API的方法,請指定是否需要特定語言的更多詳細信息。

+0

謝謝!這正是我所期待的。 – 2009-11-26 13:06:06

+0

謝謝,我也是!一點也不明顯,如果任何flickr api調用會給出真正的靜態圖像鏈接。 – cboettig 2012-03-02 00:49:05

4

不知道如果你可以直接得到它通過一個單一的API調用,但這個鏈接介紹瞭如何對圖片的網址池莉構建:link

+0

感謝您的鏈接。我更喜歡自己構建鏈接,因爲爲每個圖像調用API會讓我放慢速度。 – Daniel 2014-01-24 11:19:21

41

有了指定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 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 
+5

這是一個完美的答案,因爲我已經使用flickr.photos.search。謝謝! – TechnoTim 2015-02-06 02:59:40

+0

真的完美答案比接受的答案。這應該是正確的答案。 @ mb21非常感謝。 – Mahesh 2015-02-26 04:52:17

+0

我同意@Mahesh,這應該是正確的答案。 – 2015-05-02 21:22:11

3

下面是我編寫的一些代碼,用於從Flickr照片中檢索元數據:ID:

我首先定義一個JavaScript對象FlickrPhoto來保存照片的元數據:

function FlickrPhoto(title, owner, flickrURL, imageURL) { 
    this.title = title; 
    this.owner = owner; 
    this.flickrURL = flickrURL; 
    this.imageURL = imageURL; 
} 

然後我創建了一個FlickrService對象來保存對REST風格的API我Flickr API Key和我所有的Ajax調用。

getPhotoInfo函數採用照片ID作爲參數,構造相應的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); 
}); 

希望它能幫助。

0

下面一個解決方案,而使用的Flickr的API,只有標準的Linux命令(其實我Cygwin運行它在MS Windows):

  • 把你的網址列表中TMP變量
  • 如果您正在下載的私人照片和我一樣,該協議將是HTTPS和你需要的身份驗證Cookie傳遞給wget的。我登錄了瀏覽器(Chrome),並使用extension
  • 如果訪問公開網址,只是刪除了參數--load餅乾餅乾$
  • 在本地文件夾中的腳本下載導出的餅乾文件在他們原始格式
  • 照片如果你想靜態圖像的只是URL,刪除最後一個命令| xargs的wget的--load餅乾餅乾$

這裏的腳本,你可以使用它作爲一個開始你的探險:

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";