34

是否可以通过 api 调用或某些脚本从 flickr URL 获取静态图像 URL?
例如:
Flickr URL -> http://www.flickr.com/photos/53067560@N00/2658147888/in/set-72157606175084388/
静态图片 URL -> http://farm4.static.flickr.com/3221/ 2658147888_826edc8465.jpg

4

6 回答 6

59

通过指定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
于 2014-05-28T12:04:01.543 回答
34

在您的 Flickr URL 中,照片 ID 是 2658147888。您使用flickr.photos.getSizes来获取可用照片的各种尺寸,然后根据尺寸从中选择您想要的 url。有多种访问 API 的方法,因此请指定您是否需要特定语言的更多详细信息。

于 2009-11-26T12:36:17.020 回答
6

您还可以使用 photoId(第一个下划线前的数字)访问原始图像

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

在您的情况下,它将是:

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

于 2016-09-16T12:54:52.813 回答
5

不确定您是否可以通过单个 API 调用直接获取它,但此链接解释了图像的 url 是如何构造的:link

于 2009-11-26T12:11:41.703 回答
3

这是我编写的一些代码,用于根据其 ID 从 Flickr 照片中检索元数据:

我首先定义了一个 javascript 对象FlickrPhoto来保存照片的元数据:

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

然后我创建了一个FlickrService对象来保存我的Flickr API 密钥和我对 RESTful API 的所有 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);
});

希望能帮助到你。

于 2015-01-28T19:10:18.153 回答
0

下面是一个不使用 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";
于 2017-01-19T20:17:06.190 回答