2009-11-26 48 views
21

Có thể lấy URL hình ảnh tĩnh từ URL flickr qua cuộc gọi api hoặc một số tập lệnh không?
Đối với ví dụ:
URL Flickr ->http://www.flickr.com/photos/[email protected]/2658147888/in/set-72157606175084388/
hình ảnh URL tĩnh ->http://farm4.static.flickr.com/3221/2658147888_826edc8465.jpgCách nhận url hình ảnh tĩnh từ URL flickr?

+7

Vâng, thực sự cũ. Nhưng nếu bạn, như tôi, vẫn kết thúc ở đây sau khi googling, hãy kiểm tra liên kết này: http://www.flickr.com/services/api/misc.urls.html –

Trả lời

24

Trong URL Flickr, ID ảnh là 2658147888. Bạn sử dụng flickr.photos.getSizes để có các kích thước khác nhau của ảnh có sẵn và chọn url bạn muốn từ đó, tùy thuộc vào kích thước. Có một số cách để truy cập API, vì vậy vui lòng nêu rõ nếu bạn muốn biết thêm chi tiết về một ngôn ngữ cụ thể.

+0

Cảm ơn! Đó là chính xác những gì tôi đang tìm kiếm. –

+0

Cảm ơn, tôi cũng vậy! hoàn toàn không rõ ràng nếu có bất kỳ cuộc gọi flickr api nào sẽ cung cấp cho liên kết hình ảnh tĩnh thực sự. – cboettig

4

Không chắc chắn nếu bạn có thể lấy nó trực tiếp thông qua một cuộc gọi API duy nhất, nhưng liên kết này giải thích cách các url cho những hình ảnh được contructed : link

+0

Cảm ơn bạn đã liên kết. Tôi thích xây dựng liên kết bởi bản thân mình, bởi vì thực hiện một cuộc gọi API cho mỗi hình ảnh là làm chậm cho tôi. – Daniel

41

Với cách xác định extras=url_o bạn nhận được một liên kết đến hình ảnh ban đầu:

https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=YOURAPIKEY&format=json&nojsoncallback=1&text=cats&extras=url_o 

Đối với hình ảnh downscaled, bạn sử dụng các thông số sau: url_t, url_s, url_q, url_m, url_n, url_z, url_c, url_l

Ngoài ra, bạn có thể xây dựng các 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

Đây là câu trả lời hoàn hảo vì tôi đã sử dụng flickr.photos.search. Cảm ơn bạn! – TechnoTim

+0

Câu trả lời thực sự hoàn hảo hơn câu trả lời được chấp nhận. Đây sẽ là câu trả lời đúng. @ mb21 cảm ơn rất nhiều. – Mahesh

+0

Tôi đồng ý với @Mahesh, đây là câu trả lời đúng. –

3

Dưới đây là một số mã tôi đã viết để truy xuất siêu dữ liệu từ Ảnh Flickr dựa trên ID của nó:

đầu tiên tôi định nghĩa một đối tượng javascript FlickrPhoto để giữ siêu dữ liệu của ảnh:

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

sau đó tôi đã tạo ra một đối tượng FlickrService giữ Flickr API Key và tất cả các cuộc gọi ajax của tôi của tôi vào API RESTful.

Chức năng getPhotoInfo lấy Photo ID như tham số, xây dựng cuộc gọi ajax phù hợp và vượt qua một đối tượng FlickrPhoto chứa siêu dữ liệu ảnh vào callback chức năng.

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

Sau đó bạn có thể sử dụng các dịch vụ như sau:

var photoId = "11837138576"; 
var flickrService = new FlickrService(); 
flickrService.getPhotoInfo(photoId, function(photo) { 
    console.log(photo.imageURL); 
    console.log(photo.owner); 
}); 

Hy vọng nó giúp.

0

Dưới đây là một giải pháp mà không bằng cách sử dụng flickr-apis, chỉ các lệnh Linux chuẩn (thực ra tôi đã chạy nó trên MS Windows với Cygwin):

  • Đặt danh sách các URL trong tmp biến
  • Nếu bạn đang tải ảnh riêng tư như tôi, giao thức sẽ https và bạn sẽ cần phải vượt qua cookie xác thực để wget. Tôi đăng nhập vào với một trình duyệt (Chrome) và xuất khẩu các tập tin cookie sử dụng một extension
  • Nếu bạn truy cập URL công cộng, chỉ cần loại bỏ các tham số --load-cookie cookie $
  • Các tải script trong thư mục địa phương ảnh ở định dạng gốc
  • Nếu bạn chỉ muốn URL của hình ảnh tĩnh, hãy xóa lệnh cuối cùng | xargs wget --load-cookie $ cookie

Đây là kịch bản, bạn có thể sử dụng nó như một sự khởi đầu cho cuộc thám hiểm của bạn:

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