Вывести данные полученные посредством API, в браузер, и записать в БД

80
22 января 2022, 01:50

Пример массива:

[0] => Array
    (
        [id] => zxcv
        [next_page_id] => abcd
        [suggestions] => Array
            (
                [0] => Array
                    (
                        [data] => data
                    )
                [1] => Array
                    (
                        [data] => data2
                    )
            )
    )

Предположим что на первой странице выводится 100 записей, а следующие можно получить передав аргумент next_page_id, мне нужно показать пользователю количество записей из первой страницы, но при этом записать в БД все данные со всех страниц, получается нужно делать много запросов, и это занимает очень много времени... Есть ли возможность сделать вывод в браузер, при этом параллельно записывать в БД?

Я пока-что вижу только один вариант, это писать id текущего запроса в тег, или переменную js, затем делать ajax запрос... Возможно есть решение получше? Заранее спасибо. Основная задача, при первом запросе берем из API, выводим пользователю и пишем в БД, при последующих запросах если запись есть в БД, выводим если нет обращаемся к API.

Answer 1

Схема следующая:

  1. идет запрос в БД и если эта информация есть в БД возвращаете ее пользователю
  2. если ее нет в БД считываете первую страницу из АПИ, записываете ее в БД и отдаете пользователю
  3. запускаете отдельный поток для последующих страниц

Функция(взята из открытых источников) которая "запускает" отдельный поток. Здесь $url это url вашего скрипта работающего в фоне. Функция не ждет завершения скрипта

function exec_script($url, $params = array())
{
    $parts = parse_url($url);
    if( isset($params['PHPSESSID']) ) unset($params['PHPSESSID']);
    $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80);
    if ($fp == FALSE )
    {
        return false;
    }
    $data = http_build_query($params, '', '&');
    fwrite($fp, "POST " . (!empty($parts['path']) ? $parts['path'] : '/') . " HTTP/1.1\r\n");
    fwrite($fp, "Host: " . $parts['host'] . "\r\n");
    fwrite($fp, "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0\r\n".
                                "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
                                "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\r\n".
                                "Accept-Encoding: gzip, deflate\r\n");
    fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
    fwrite($fp, "Content-Length: " . strlen($data) . "\r\n");
    fwrite($fp, "Connection: Close\r\n\r\n");
    fwrite($fp, $data);
    fclose($fp);
    return true;
}

Нужно будет решить что делать если пользователь сразу запросил 9 страницу к примеру...

READ ALSO
Вычислить градус поворота View элемента

Вычислить градус поворота View элемента

На заднем фоне View элемент напоминающий треугольникСиним показан элемент который нужно развернуть вдоль гипотенузы

91
вывод double без округления

вывод double без округления

Это приложение - простой калькулятор, мне нужно при делении задать TextView результат, и так чтобы это было без округления, в моём случае округление...

191