[Symfony] Utilisation de l'API ipstack
Publié le 04/01/2020 • Mis à jour le 04/01/2020
Dans ce bout de code, nous allons voir comment récupérer des informations de l'API ipstack. Pour ce faire, nous utiliserons le composant Symfony HttpCient. Si vous voulez avoir la sortie formattée agréablement, vous pouvez consulter la page outil "Quelle est mon IP ?".
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpFoundation\Request;
use function Symfony\Component\String\u;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet65Trait
{
public function snippet65(Request $request): void
{
$ip = u($request->getClientIp())->trim();
if ($ip->isEmpty()) {
echo 'No ip found.';
return;
}
$routeParams = $request->attributes->get('_route_params');
$endPoint = 'https://api.ipstack.com/'.$ip->toString().'?'.http_build_query([
'access_key' => $this->getParameter('ipstack_api_key'),
'language' => $routeParams['_locale'],
]);
try {
$response = HttpClient::create()->request('GET', $endPoint)->getContent();
} catch (ClientExceptionInterface | RedirectionExceptionInterface | ServerExceptionInterface | TransportExceptionInterface $e) {
echo 'Error when accessing the Ipstack service.';
return;
}
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR)); // That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Snippet aléatoire