Autour de Laravel

Récupérer les données JSON d'une API Externe

Avatar de ciol07
ciol07

Bonjour, comment récupérer les données d'une api externe si l'on vous donne l'adresse de l'api exemple https://api.xxxxxxxxxxx.com/xxxxxxx/clients/

Besoin d'aide, merci.

Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

T'as un exemple ici si tu veux ==> https://dev.to/kingsconsult/how-to-consume-restful-apis-in-laravel-8-and-laravel-7-4gii Ne regarde que les step 2 et 4. T'as tout ce qu'il te faut. Un coup de Guzzle tout simple

Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

T'as un exemple ici si tu veux ==> https://dev.to/kingsconsult/how-to-consume-restful-apis-in-laravel-8-and-laravel-7-4gii Ne regarde que les step 2 et 4. T'as tout ce qu'il te faut. Un coup de Guzzle tout simple

Edit: je ne sais pas pourquoi la réponse s'est postée 2 fois...

Posté il y a 2 mois
Avatar de ciol07
ciol07

Hello ! merci pour vos réponse Sans appel à la vu il n'y pas d'erreur, mais l'orque je veux afficher la vu j'ai une erreur.


                        @foreach ($responseBody as $response)
                            
                            {{ $response->names }}
                            
                        @endforeach
                     

ErrorException Trying to get property 'names' of non-object (View: C:\laragon\www\tontine\resources\views\groups\members.blade.php)

voici le code de mon controller


public function members(Request $request){
        
        $group = Group::where('id', $request->id)->get();
        
        $members = Member::where('id', $request->id)->get();
        
        $client = new Client(); //GuzzleHttp\Client
        
        $url = "https://apis.xxxxxxxxxxxxxx.com/public-api/clients/";


        $response = $client->request('GET', $url, [
            'verify'  => false,
        ]);

        $responseBody = json_decode($response->getBody());

        //return view('projects.apiwithoutkey', compact('responseBody'));
        
        
        return view('groups.members', compact('responseBody'),[        
            'members' => $members,
            'group' => $group,
            'responseBody' => $responseBody,
        ]);
    }

Voici un exemple du contenus de k'adresse de l'api

clients	
0	
id:	7888
names:	"NOMMMMMMM"
1	
id:	3444
names:	"DGFDFFFFBBHGFBH"
2	
id:	55555
names:	"FDFFNBGHNGFNHNH"
3	
id:	3333
names:	"MPIIOI.K.K.K.IK.II"
Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Essaie de faire un

$responseBody = json_decode($response->getBody());
dd($responseBody);

Le dd() va te montrer le detail de $responseBody. Pour voir s'il ne faut pas faire un $response['names'];

Posté il y a 2 mois
Avatar de ciol07
ciol07

Hello ! Merci pour vos réponses Mon dd me donne ça :

array:1 [▼
  "clients" => array:37 [▼
    0 => array:2 [▼
      "id" => 3055
      "names" => "svsvsv vdssvs "
    ]
    1 => array:2 [▼
      "id" => 4640
      "names" => "dsdqscsd dbdvf sqdqds"
    ]
    2 => array:2 [▶]
    3 => array:2 [▶]
    4 => array:2 [▶]
    5 => array:2 [▶]
    6 => array:2 [▶]
    7 => array:2 [▶]
    8 => array:2 [▶]
    9 => array:2 [▶]
    10 => array:2 [▶]
    11 => array:2 [▶]
    12 => array:2 [▶]
    13 => array:2 [▶]
    14 => array:2 [▶]
    15 => array:2 [▶]
    16 => array:2 [▶]
    17 => array:2 [▶]
    18 => array:2 [▶]
    19 => array:2 [▶]
    20 => array:2 [▶]
    21 => array:2 [▶]
    22 => array:2 [▶]
    23 => array:2 [▶]
    24 => array:2 [▶]
    25 => array:2 [▶]
    26 => array:2 [▶]
    27 => array:2 [▶]
    28 => array:2 [▶]
    29 => array:2 [▶]
    30 => array:2 [▶]
    31 => array:2 [▶]
    32 => array:2 [▶]
    33 => array:2 [▶]
    34 => array:2 [▶]
    35 => array:2 [▶]
    36 => array:2 [▶]
  ]
]


Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Essaye {{ $response['names'] }} dans ta vue

Posté il y a 2 mois
Avatar de ciol07
ciol07

J'ai toujours cette erreur

ErrorException
Undefined index: names (View: C:\laragon\www\tontine\resources\views\groups\members.blade.php) 
Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Ah oui. Au temps pour moi. J'avais mal regardé ton dd().

En fait dans ton $responseBody il y a un seul array dans lequel tu as ta liste. Donc ce que tu veux envoyer ce n'est pas 'responseBody' => $responseBody, c'est plutôt 'responseBody' => $responseBody->clients, dans ton controller (ou 'responseBody' => $responseBody['clients'] à voir)

Posté il y a 2 mois
Avatar de ciol07
ciol07

Bonjour, ça marche. Merci infiniment.

Posté il y a 2 mois

Vous ne pouvez pas répondre à ce sujet.