1

Flickr API 有问题。简而言之,我有一个运行良好的签名呼叫,但我需要为其添加一个回调。添加&callback=?到字符串会导致 API 返回jsonFlickrApi({"stat":"fail", "code":96, "message":"Invalid signature"})

所以我不确定如何最好地处理它。通话需要签名,因为它正在抓取私人照片。有没有办法构造我的回调函数来避免这个问题?我一直将回调放在格式参数之后,并尝试在字符串的末尾。两者都返回相同的错误。我放错地方了吗?

谢谢你的帮助!

jsFiddle:http://jsfiddle.net/danielredwood/RzkzY/14/

function imgBuilder(data){
    $.each(data.photos.photo,function(i,rPhoto){
        var base   = 'http://farm' + rPhoto.farm + '.static.flickr.com/' + rPhoto.server + '/' + rPhoto.id + '_' + rPhoto.secret,
            thumb  = base + '_m.jpg',
            medium = base + '.jpg',
            large  = base + '_b.jpg',
            imageM = '<a class="fancybox" rel="group" ' + 'title="' + rPhoto.title + '" href="'+ medium +'"><img src="' + thumb + '" alt="' + rPhoto.title + '"/></a>',
            imageL = '<a class="fancybox" rel="group" ' + 'title="' + rPhoto.title + '" href="'+ large +'"><img src="' + thumb + '" alt="' + rPhoto.title + '"/></a>';

        $(imageM).appendTo("#test");
    });
}

/* Need to add callback to the string?? */ 
$.getJSON("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=e3571d0891d2ad7f6b2b44611b8126ee&user_id=26545877%40N04&tags=terminal+5&per_page=25&format=json&auth_token=72157629563488548-bdcd1a2ad2f288df&api_sig=944625b8e72de2b3b9200a892263e1b1", imgBuilder);​
4

1 回答 1

1

我在使用 Remember the Milk API 时遇到过类似的情况,我认为它是基于 Flickr API 的。

通过覆盖 jQuery 对 JSONP 请求的默认设置,我成功地进行了调用。

jQuery默认为请求添加一个callback=and参数。_=Flickr 将在计算您的请求签名时包含这些参数。它与您计算的不匹配api_sig,因此请求失败。

callback=用于将响应与您的回调函数相关联,由 jQuery 生成,因此您不能将其包含在签名计算中,但您可以覆盖默认行为并通过包含自行指定

jsonp: false,
jsonpCallback: 'my_callback_name',

作为$.ajax调用的参数。

我假设'my_callback_name'对于包含 ajax 调用的页面的每次加载都应该是唯一的。计算 api_sig时应包含callback='my_callback_name'在参数中。

_=是由 jQuery 添加到 URL 以使每个请求唯一的时间戳,在计算 api_sig 时您也无法知道。您可以通过添加来防止它被添加

cache: true,

这将停止_=添加到您的 URL(并使api_sig.

于 2012-05-04T06:20:45.480 回答