chunk(100, function ($airports) { foreach ($airports as $airport) { $zoneName = null; $attempts = 0; while ($zoneName === null && $attempts < 3) { $response = Http::withoutVerifying() ->withOptions(['allow_redirects' => false]) ->get('http://vip.timezonedb.com/v2.1/get-time-zone', [ 'key' => config('app.timezone_api_key'), 'format' => 'json', 'by' => 'position', 'lat' => $airport->latitude_deg, 'lng' => $airport->longitude_deg, ]); $zoneName = $response->json('zoneName'); $attempts++; if ($zoneName === null) { $this->warn("✗ {$airport->name} — attempt {$attempts} failed: " . $response->body()); sleep(5); } } if ($zoneName) { $airport->update(['timezone' => $zoneName]); $this->info("✓ {$airport->name} — {$zoneName}"); } else { $this->warn("✗ {$airport->name} — giving up after {$attempts} attempts"); } } }); $this->info('Done!'); } }