[Symfony] Utilisation de l'API ipstack

Publié le 04/01/2020 • Mis à jour le 04/01/2020


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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 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 = $request->getClientIp();
        if (empty($ip)) {
            echo 'No ip found.';

            return;
        }

        $routeParams = $request->attributes->get('_route_params');
        $endPoint = 'https://api.ipstack.com/'.$ip.'?'.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