【问题标题】:Flickr API JSONP signed with callback使用回调签名的 Flickr API JSONP
【发布时间】:2012-05-09 17:04:29
【问题描述】:

在使用 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);​

【问题讨论】:

    标签: callback jsonp call flickr signed


    【解决方案1】:

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

    我已经成功地通过覆盖 jQuery 对 JSONP 请求的默认值进行调用。

    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,
    

    这将阻止 _= 添加到您的 URL(并使 api_sig 无效),但它可能会导致您可能不想要的 ajax-fetched-data 缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-18
      • 2015-12-20
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 2017-11-22
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多