Flickr API JSONP, подписанный с обратным вызовом

Возникли проблемы с 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);​

person technopeasant    schedule 29.04.2012    source источник


Ответы (1)


Я испытал нечто подобное с API Remember the Milk, который, как мне кажется, был основан на API Flickr.

Мне удалось сделать успешный вызов, переопределив значения по умолчанию jQuery для запроса JSONP.

jQuery по умолчанию добавляет в запрос параметры callback= и _=. 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, что вам может не понадобиться.

person sparklewhiskers    schedule 04.05.2012