50 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\View\Components;
 | 
						|
 | 
						|
use Closure;
 | 
						|
use Exception;
 | 
						|
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');
 | 
						|
        }
 | 
						|
 | 
						|
        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;
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the view / contents that represent the component.
 | 
						|
     */
 | 
						|
    public function render(): View|Closure|string
 | 
						|
    {
 | 
						|
        return view('components.weather', [
 | 
						|
            'conditions' => $this->getWeatherData(),
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
}
 |