2018-04-03 11:35:25 +08:00
|
|
|
<?php
|
|
|
|
|
2019-07-16 03:44:31 +08:00
|
|
|
namespace App\Contracts;
|
2018-04-03 11:35:25 +08:00
|
|
|
|
2019-08-09 00:50:32 +08:00
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
2018-04-03 11:44:31 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Base class for implementing retrieving METARs
|
|
|
|
*/
|
2018-04-03 11:35:25 +08:00
|
|
|
abstract class Metar
|
|
|
|
{
|
|
|
|
/**
|
2019-08-09 02:52:34 +08:00
|
|
|
* Implement retrieving the METAR - return the METAR string. Needs to be protected,
|
|
|
|
* since this shouldn't be directly called. Call `get_metar($icao)` instead
|
2018-08-27 00:40:04 +08:00
|
|
|
*
|
2018-04-03 11:35:25 +08:00
|
|
|
* @param $icao
|
2018-08-27 00:40:04 +08:00
|
|
|
*
|
2018-04-03 11:35:25 +08:00
|
|
|
* @return mixed
|
|
|
|
*/
|
2018-04-03 11:44:31 +08:00
|
|
|
abstract protected function metar($icao): string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Download the METAR, wrap in caching
|
2018-08-27 00:40:04 +08:00
|
|
|
*
|
2018-04-03 11:44:31 +08:00
|
|
|
* @param $icao
|
2018-08-27 00:40:04 +08:00
|
|
|
*
|
2018-04-03 11:44:31 +08:00
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get_metar($icao): string
|
|
|
|
{
|
|
|
|
$cache = config('cache.keys.WEATHER_LOOKUP');
|
|
|
|
$key = $cache['key'].$icao;
|
|
|
|
|
2019-08-09 02:52:34 +08:00
|
|
|
if (Cache::has($key)) {
|
|
|
|
$raw_metar = Cache::get($key);
|
|
|
|
if ($raw_metar !== '') {
|
|
|
|
return $raw_metar;
|
2018-04-03 11:44:31 +08:00
|
|
|
}
|
2019-08-09 02:52:34 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
$raw_metar = $this->metar($icao);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
Log::error('Error getting METAR: '.$e->getMessage(), $e->getTrace());
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($raw_metar !== '') {
|
|
|
|
Cache::put($key, $raw_metar, $cache['time']);
|
|
|
|
}
|
2018-04-03 11:44:31 +08:00
|
|
|
|
|
|
|
return $raw_metar;
|
|
|
|
}
|
2018-04-03 11:35:25 +08:00
|
|
|
}
|