init
This commit is contained in:
54
app/Http/Controllers/WeatherstackController.php
Normal file
54
app/Http/Controllers/WeatherstackController.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Http\Client\Response as ClientResponse;
|
||||
use App\Models\City;
|
||||
|
||||
class WeatherstackController extends Controller
|
||||
{
|
||||
|
||||
public static function requestByCity($city) {
|
||||
$access_key = config('app.weatherstack_api_key');
|
||||
$units = 'm'; /* m for Metric, s for Scientific, f for Fahrenheit */
|
||||
$url = 'http://api.weatherstack.com/current';
|
||||
|
||||
return Http::acceptJson()->get($url, [
|
||||
'access_key' => $access_key,
|
||||
'units' => $units,
|
||||
'query' => $city
|
||||
]);
|
||||
}
|
||||
|
||||
public function checkResponse($city, ClientResponse $response) {
|
||||
if ($response->successful()) {
|
||||
[$isValidResponse, $error] = $this->checkErrorMessage($city, $response);
|
||||
}
|
||||
elseif ($response->failed()) {
|
||||
$isValidResponse = false;
|
||||
$error = 'Request failed.';
|
||||
}
|
||||
|
||||
return [$isValidResponse, $error];
|
||||
}
|
||||
|
||||
public static function checkErrorMessage($city, ClientResponse $response) {
|
||||
$isValidResponse = true;
|
||||
$error = '';
|
||||
|
||||
if ($response->json('success') === false) {
|
||||
$isValidResponse = false;
|
||||
|
||||
($response->json('error.type') === 'usage_limit_reached') ? $error = 'The usage limit of your API key has been reached.'
|
||||
: $error = "No city named '{$city}' could be found.";
|
||||
}
|
||||
elseif (City::where('location_name', $response->json('location.name'))->exists()) {
|
||||
$isValidResponse = false;
|
||||
$error = "'{$response->json('location.name')}, {$response->json('location.country')}' has been already added.";
|
||||
}
|
||||
|
||||
return [$isValidResponse, $error];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user