1

Flickr API に問題がある。簡単に言えば、正常に動作する署名付き呼び出しを取得しましたが、それにコールバックを追加する必要があります。文字列に追加&callback=?すると、API が返されますjsonFlickrApi({"stat":"fail", "code":96, "message":"Invalid signature"})

そのため、どのようにアプローチするのが最善かわかりません。プライベートな写真を取得しているため、通話に署名する必要があります。問題を回避するためにコールバック関数を構築する方法はありますか? 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);​
4

1 に答える 1

1

Flickr API に基づいていると思われる、Remember the Milk API で同様のことを経験しました。

JSONPリクエストのjQueryのデフォルトをオーバーライドすることで、呼び出しを成功させることができました。

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

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

jsonp: false,
jsonpCallback: 'my_callback_name',

$.ajax呼び出しのパラメーターとして。

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

_=は、各リクエストを一意にするために jQuery によって URL に追加されるタイムスタンプですが、これもまた、api_sig を計算する時点ではわかりません。追加することで追加されないようにすることができます

cache: true,

これにより、URL への追加が停止_=されます (および無効化されますapi_sig) が、ajax-fetched-data のキャッシュにつながる可能性があります。これは望ましくない場合があります。

于 2012-05-04T06:20:45.480 に答える