Amazon Product Advertising API: работа Cron по обновлению цен на товары без AJAX - PullRequest
0 голосов
/ 19 марта 2020

У меня есть партнерский веб-сайт, который работает на собственной базе c 'CMS', которую я создал несколько лет go. Когда я отображаю цены продуктов на своем веб-сайте, я создал сценарий PHP для обновления цен на все продукты в моей базе данных, используя API рекламы продуктов Amazon, который просматривает каждый код ASIN и определяет, есть ли разница в цене с product в моей БД и обновляет его при необходимости.

Раньше я делал это просто PHP, но заметил, что время соединения часто истекает из-за большого количества товаров, просматриваемых за один вызов. Поэтому недавно я создал рабочее решение с AJAX, которое выполняет отдельный вызов для каждого идентификатора. Вкратце: у меня есть страница со скрытым числовым полем с идентификатором продукта - я делаю первый (product # 1) AJAX вызов - если он возвращает заголовок успеха, идентификатор увеличивается и вызов повторяется для ID # 2 и т. Д.

Это прекрасно работает, но мне все еще нужно go перейти на страницу и нажать кнопку, чтобы начать первый AJAX вызов. Поэтому я хочу сделать это с помощью задания cron.

Проблема в : как предотвратить истечение времени ожидания соединения, когда мне нужно l oop до 300+ продуктов с помощью API? Есть ли способ проверить один продукт, подождать, пока он вернет успешный ответ, затем проверить продукт № 2 и так далее? Я знаю, что не могу использовать AJAX вызовы в заданиях cron.

Это (упрощенный) код AJAX, который я использую:

$('body').on('click', '#check_prices', function (e){
    e.preventDefault();
    var max = $('#max').val();
    var id = parseInt($('#id').val());

        var formData = new FormData($(this).closest('form')[0]);
        $.ajax({ type: 'POST', url: url, cache: false, contentType: false, processData: false, data: formData })
        .done(function(response) {
            $('#results').append("<p style='color:green'>"+response+"</div>");
            $('#id').val(id+1);
            if(id <= max) {
                setTimeout( function() { $('#check_prices').trigger('click'); }, 1500);   
            } else {
                $('#results').append("<p style='color:green'>All "+max+" products updated!</div>");
            }
        })
        .fail(function(data) {
            if (data.responseText !== '') {
                $('#results').append("<p style='color:red'>"+data.responseText+"</div>" );
            } else {
                $.notify("Something went wrong, please try again.","warning");
            }
        });
});

Сценарий PHP является простой скрипт, который я нашел в интернете и настроил под свои нужды. Для проверки каждого продукта используется функция getAmazonPrice("com", $asin).

Любая помощь будет принята с благодарностью!

...