2012-04-29 22 views
1

Flickr APIに問題があります。簡単に言えば、うまく動作する署名入りの呼び出しがありますが、コールバックを追加する必要があります。文字列に&callback=?を追加すると、APIが返されます。jsonFlickrApi({"stat":"fail", "code":96, "message":"Invalid signature"})Flickr API JSONPがコールバックで署名されています

どのように最善のアプローチをとるべきかわかりません。それは私的な写真をつかんでいるので、呼び出しに署名する必要があります。問題を回避するためにコールバック関数を構造化する方法はありますか?私は、formatパラメータの後ろにコールバックを置いていて、文字列の最後で試してみました。どちらも同じエラーを返します。私はそれを間違っていますか?

ありがとうございました!

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

私はFlickrのAPIに基づいていたと思われ、ミルクのAPIを覚えておいてくださいと似たような経験しました。

私は、JSONPリクエストのjQueryのデフォルトをオーバーライドすることによって、成功した呼び出しを行うことができました。

jQueryは、デフォルトで要求にcallback=_=パラメータを追加します。 Flickrはあなたの要求の署名を計算するときにこれらのパラメータを含みます。計算したapi_sigと一致しないため、要求は失敗します。

callback=は、コールバック関数への応答を関連付けるために使用され、あなたがあなたの署名の計算に含めることはできませんので、jQueryのによって生成されますが、デフォルトの動作をオーバー乗ると

を含むことによって、それを自分で指定することができます $.ajax呼び出しのパラメータとして
jsonp: false, 
jsonpCallback: 'my_callback_name', 

'my_callback_name'は、ajax呼び出しを含むページの負荷ごとに一意である必要があります。 api_sigを計算するときは、パラメータにcallback='my_callback_name'を含める必要があります。

_=は、各リクエストを一意にするために、jQueryによってURLに追加されたタイムスタンプです.pap_sigを計算する時点では、このことを再度知ることはできません。あなたのURLに追加されている。これは、_=を停止します、それは

cache: true, 

を追加することによって追加されるのを防ぐ(およびapi_sigを無効に)それはあなたが望んでいないことがあり、AJAX-フェッチされたデータのキャッシングにつながることができます。

関連する問題