Как вывести список отделений новой почты на сайте используя API новой почты?

Не для кого не секрет, что Новая Почта лидер логистических улслуг в Украине. Это обусловленно несколькими факторами: охват населенных пунктов (на моммент написания данного посто количество отделений насчитывакт почти 6000), скорость доставки и api. С последним я познакомлю вас подробнее. Скажу сразу, это не официальная инструция "как использовать api новой почты" а лишь рабочий пример для ознакомления.
API новой почти насчитывает более 30 различных методов, с которыми мы можем работать. Детальнее о методах новой почты на этой страице.
Задача следующая - вывести список всех отделений с адресами на страницу оформления заказ. Пробежав по всем методам было решено использовать AddressGeneral > getWarehouses
, данный метод выводит массив всех отделений.
Для нас более удобный способ работы с новой почтой это json, xml и js как-то не очень дружат.
Напишем тестовый POST запрос на сервер новой почты, чтобы понять, какие данные приходят в ответ и как с ними работать дальше.
var data = {
"modelName": "AddressGeneral",
"calledMethod": "getWarehouses",
"methodProperties": {
"Language": "UA"
},
"apiKey": "[_your_api_key_]" // Ваш api ключ
};
$.ajax({
url: 'https://api.novaposhta.ua/v2.0/json/',
type: 'POST',
dataType: 'JSON',
data: JSON.stringify(data),
success: function(response) {
console.log(response['data']);
});
});
В примере выше, мы вывели список всех отделений. Данных очень много и нужно как-то обыграть этот момент. Например: делать запрос несколько раз в месяц а все результаты хранить в бд.
$('#shipping-method input').change(function(){
if($(this).val() == 'cs.cs_1'){
var data = {
"modelName": "AddressGeneral",
"calledMethod": "getWarehouses",
"methodProperties": {
"Language": "UA"
},
"apiKey": "[_your_api_key_]"
};
$.ajax({
url: 'https://api.novaposhta.ua/v2.0/json/',
type: 'POST',
dataType: 'JSON',
data: JSON.stringify(data),
success: function(response) {
var addresses = response['data'];
// console.log(response['data']);
$.each(addresses, function( key, value ) {
var app = '';
$('select[name=\"newpost\"]').append(app);
});
$('.js-example-basic-single').select2();
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
$('.newpostmethod').slideDown(200);
}else{
$('.newpostmethod').slideUp(200);
}
});