add Meteo part
This commit is contained in:
45
app/Http/Controllers/WeatherController.php
Normal file
45
app/Http/Controllers/WeatherController.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class WeatherController extends Controller
|
||||
{
|
||||
public function index(Request $request): JsonResponse
|
||||
{
|
||||
abort_if($request->user()->locations->count() === 0, 404, 'Coordonnées non renseignées dans le profile.');
|
||||
|
||||
$location = $request->user()->locations->first();
|
||||
$idCity = 6427013;
|
||||
$apiKey = config('weather.open_weather_map_api_key');
|
||||
|
||||
try {
|
||||
$response = Cache::remember('weather-'.$location->id, 5 * 60, function () use ($location, $apiKey) {
|
||||
// $url = 'https://api.openweathermap.org/data/2.5/forecast?id='.$idCity.'&appid='.$apiKey.$params;
|
||||
$params = '&units=metric&lang=fr';
|
||||
$url = 'https://api.openweathermap.org/data/2.5/forecast?lat='.$location->latitude.'&lon='.$location->longitude.'&appid='.$apiKey.$params;
|
||||
$client = new Client();
|
||||
$promise = $client->requestAsync('GET', $url);
|
||||
$response = $promise->wait();
|
||||
|
||||
return json_decode($response->getBody()->getContents());
|
||||
});
|
||||
|
||||
return response()->json($response);
|
||||
} catch (Exception $e) {
|
||||
Log::alert('unable to fetch data', [
|
||||
'ip' => $request->ip(),
|
||||
'code' => $e->getCode(),
|
||||
'message' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return response()->json('unable to fetch data', 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user