2012-04-29 62 views
1

Flickr API存在问题。简而言之,我有一个可以正常工作的签名调用,但我需要为它添加一个回调。将&callback=?添加到字符串导致API返回jsonFlickrApi({"stat":"fail", "code":96, "message":"Invalid signature"})Flickr API JSONP使用回调签名

所以我不知道如何最好地接近它。该电话需要签名,因为它抓取私人照片。有没有一种方法来构建我的回调函数以避免该问题?我一直把格式参数后的回调,并尝试在字符串的末尾。两者都返回相同的错误。我错了吗?

感谢您的帮助!

的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);​ 

回答

1

我经历过与记住牛奶API,我认为是基于Flickr的API类似的东西。

我设法通过为JSONP请求重载jQuery的默认值来成功完成调用。

jQuery默认为请求添加callback=_=参数。在计算您的请求的签名时,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, 

加入这将停止_=被添加到您的网址(和无效的api_sig),但它可能导致Ajax的获取数据,你可能不希望缓存。