Задать вопрос
Cheizer
@Cheizer

Как получать на PHP большой JSON массив из url по API?

Приветствую, подскажите пожалуйста, как работать с такими JSON массивами на 16928 записей на PHP?

В браузере то долго открывает, а на php если просто через CURL получать и в цикле foreach работать с ним выбирать то что нужно, сервер виснет просто, сервер VPS простой 1 CPU • 1 Гб RAM • 15 Гб NVMe.

Есть параметры фильтра page и limit

page
A results page number. Default value is 1.
limit
Number of items per page. Default value is 50. Max value is 100.

С ними уже можно меньше за одно обращение к API получить легче массив &page=10&limit=1, но все равно тяжеловато.

Подскажите пожалуйста, есть какая простая библиотека PHP для работы с такими массивами?
Как результат записываю в базу данных поля из массива. Вот пока не пойму как сделать, за один запрос все виснет, а если разбивать через page и limit, то замучаюсь запускать скрипт снова и снова что бы добавить такое большое количество записей в бд.
Как с этим работать грамотно?
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Adamos
@Adamos
Самое очевидное, что, скорее всего, было сделано неправильно - это запись в БД каждой строчки вместо формирования транзакции и записи всего этого добра чохом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Код:
<?php

$url = 'https://api.sputnik8.com/v1/products?api_key=9bc84ec26f47bf3005dc55434b4b796a&username=partners+tpo50@sputnik8.com';

$data = json_decode(file_get_contents($url), true);
var_dump(MemoryUsage());

function MemoryUsage(): string
{
    $size = memory_get_usage();

    $unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb'];
    return round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}


Результат:
devilbox@php-8.1.14 in /shared/httpd $ time php large-json.php 
/shared/httpd/large-json.php:6:
string(7) "31.7 mb"

real	0m6.331s
user	0m0.110s
sys	0m0.086s


Потребляет всего 32 мегабайта.
Проблема то в чём?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы