2012-04-29 64 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的獲取數據,你可能不希望緩存。