Как быстро загрузить данные из Nova Postha Api в свою базу данных (30 000 записей)? [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как быстро загрузить данные из Nova Postha Api в свою базу данных (30 000 записей)? [закрыто]

Сообщение Anonymous »

Код: Выделить всё

public function updateWarehouses()
{
$settlements = NovaPoshtaSettlement::all();
$timeout = 60;
$limit = 500;

foreach ($settlements as $settlement) {
$page = 1;
$hasMoreData = true;

while ($hasMoreData) {
$response = Http::timeout($timeout)->post('https://api.novaposhta.ua/v2.0/json/', [
'apiKey' => config('services.novaposhta.api_key'),
'modelName' => 'AddressGeneral',
'calledMethod' => 'getWarehouses',
'methodProperties' => [
'SettlementRef' => $settlement->ref,
'Page' => $page,
'Limit' => $limit,
],
]);

if ($response->successful()) {
$warehouses = $response->json()['data'];

if (count($warehouses) < $limit) {
$hasMoreData = false;
} else {
$page++;
}

foreach ($warehouses as $warehouse) {
NovaPoshtaWarehouse::updateOrCreate(
[
'ref' => $warehouse['Ref'],
],
[
'settlement_id' => $settlement->id,
'description' => $warehouse['Description'],
'short_address' => $warehouse['ShortAddress'],
'type_of_warehouse' => $warehouse['TypeOfWarehouse'],
'number' => $warehouse['Number'],
]
);
}
} else {
$hasMoreData = false;
\Log::error('Failed to update warehouses', ['response' => $response->body()]);
}
}
}
}
Если вам нужна документация, вот ссылка. https://developers.novaposhta.ua/view/m ... 5056b2dbe1. (Документация от НовойПочты нормально только на украинском языке. Нужно использовать google Translate.)
Из этого метода я выбираю все отделения, почтовые отделения, пункты выдачи и пишу себе в базу данных, потому что копия должна быть на линии клиента.
Вопрос вот в чем. Может кто знает, как ускорить запись этих данных в базу, ведь их 30 000?.
Я использую crontab, перед этим создаю команду UpdateNovaPoshtaWarehouseData и записываю ее в Kernel.php.
$schedule->command('novaposhta:warehouse-update-data')->daily();
И еще один вопрос у меня иногда выбивает ошибку. Ошибка cURL 28: тайм-аут операции истек через 10001 миллисекунду, получено 0 из 0 байтов. Как это можно исправить?
Спасибо всем.

Подробнее здесь: https://stackoverflow.com/questions/787 ... 0-000-reco
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»