2024-08-08 14:21:30 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\View\Components;
|
|
|
|
|
|
|
|
use Closure;
|
2024-08-30 23:47:01 +00:00
|
|
|
use Exception;
|
2024-08-08 14:21:30 +00:00
|
|
|
use Illuminate\Contracts\View\View;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Illuminate\Support\Facades\Config;
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
use Illuminate\View\Component;
|
|
|
|
|
|
|
|
class Weather extends Component
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Create a new component instance.
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getWeatherData(): mixed {
|
|
|
|
// If it's already cached just return that
|
|
|
|
if (Cache::has('weather_data')) {
|
|
|
|
return Cache::get('weather_data');
|
|
|
|
}
|
|
|
|
|
2024-08-30 23:47:01 +00:00
|
|
|
try {
|
|
|
|
$response = Http::get('http://' . Config::get('services.weatherlink') . '/v1/current_conditions');
|
|
|
|
$data = $response->json();
|
|
|
|
$conditions = $data["data"]["conditions"];
|
|
|
|
Cache::put('weather_data', $conditions, now()->addSeconds(60));
|
|
|
|
return $conditions;
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2024-08-08 14:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the view / contents that represent the component.
|
|
|
|
*/
|
|
|
|
public function render(): View|Closure|string
|
|
|
|
{
|
|
|
|
return view('components.weather', [
|
|
|
|
'conditions' => $this->getWeatherData(),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
}
|