Move caching into Metar base class, clean up of caller in the widget
This commit is contained in:
@@ -2,12 +2,49 @@
|
|||||||
|
|
||||||
namespace App\Interfaces;
|
namespace App\Interfaces;
|
||||||
|
|
||||||
|
use Cache;
|
||||||
|
use Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for implementing retrieving METARs
|
||||||
|
* @package App\Interfaces
|
||||||
|
*/
|
||||||
abstract class Metar
|
abstract class Metar
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Implement the METAR- Return the string
|
* Implement retrieving the METAR- Return the string
|
||||||
|
* Needs to be protected, since this shouldn't be
|
||||||
|
* directly called. Call `get_metar($icao)` instead
|
||||||
* @param $icao
|
* @param $icao
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
abstract public function get($icao);
|
abstract protected function metar($icao): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $icao
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
//abstract protected function taf($icao): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download the METAR, wrap in caching
|
||||||
|
* @param $icao
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get_metar($icao): string
|
||||||
|
{
|
||||||
|
$cache = config('cache.keys.WEATHER_LOOKUP');
|
||||||
|
$key = $cache['key'].$icao;
|
||||||
|
|
||||||
|
$raw_metar = Cache::remember($key, $cache['time'], function () use ($icao) {
|
||||||
|
try {
|
||||||
|
return $this->metar($icao);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error('Error getting METAR: '. $e->getMessage(), $e->getTrace());
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return $raw_metar;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,19 +11,19 @@ use App\Support\Http;
|
|||||||
*/
|
*/
|
||||||
class AviationWeather extends Metar
|
class AviationWeather extends Metar
|
||||||
{
|
{
|
||||||
private const URL =
|
private const METAR_URL =
|
||||||
'https://www.aviationweather.gov/adds/dataserver_current/httpparam?'
|
'https://www.aviationweather.gov/adds/dataserver_current/httpparam?'
|
||||||
.'dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3'
|
.'dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3'
|
||||||
.'&mostRecent=true&fields=raw_text&stationString=';
|
.'&mostRecent=true&fields=raw_text&stationString=';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implement the METAR- Return the string
|
* Implement the METAR - Return the string
|
||||||
* @param $icao
|
* @param $icao
|
||||||
* @return mixed
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function get($icao)
|
protected function metar($icao): string
|
||||||
{
|
{
|
||||||
$url = static::URL.$icao;
|
$url = static::METAR_URL.$icao;
|
||||||
$res = Http::get($url, []);
|
$res = Http::get($url, []);
|
||||||
$xml = simplexml_load_string($res);
|
$xml = simplexml_load_string($res);
|
||||||
return $xml->data->METAR->raw_text;
|
return $xml->data->METAR->raw_text;
|
||||||
|
|||||||
@@ -51,18 +51,12 @@ class Weather extends Widget
|
|||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
// Cache the request so we don't need to repeatedly call out
|
/**
|
||||||
$cache = config('cache.keys.WEATHER_LOOKUP');
|
* @var \App\Interfaces\Metar
|
||||||
$key = $cache['key'].$this->config['icao'];
|
*/
|
||||||
|
$klass = config('phpvms.metar');
|
||||||
$raw_metar = Cache::remember($key, $cache['time'], function () {
|
$metar_class = new $klass;
|
||||||
/**
|
$raw_metar = $metar_class->get_metar($this->config['icao']);
|
||||||
* @var \App\Interfaces\Metar $klass
|
|
||||||
*/
|
|
||||||
$klass = config('phpvms.metar');
|
|
||||||
$metar_class = new $klass;
|
|
||||||
return $metar_class->get($this->config['icao']);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Run through this parser
|
// Run through this parser
|
||||||
$decoder = new MetarDecoder();
|
$decoder = new MetarDecoder();
|
||||||
|
|||||||
Reference in New Issue
Block a user