[RESOLU] Débutant API afficher données JSON dans PHP

Petit nouveau ! | 3 Messages

19 nov. 2024, 12:24

Bonjour à toutes et à tous,

Novice en beaucoup de choses, je cherche à afficher via une page php certaines des données issues d'une API qui les met à disposition sous la forme d'un json.

Après avoir réussi à franchir un premier obstacle (puisque les requêtes à l'api devaient apparemment passer par curl ...) puis un deuxième obstacle (pour une raison que j'ignore, un caractère "1" semblait s'ajouter à la fin de la réponse obtenue ...), je butte sur un 3ème obstacle :( .

Âmes sensibles s'abstenir 8-| ... voici le morceau de code qui me semblait pouvoir permettre d'afficher un élément précis dans l'arborescence des données ainsi récupérées ...
$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "LURLDELAPI");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept : application/json","client-name: MONNOM","client-secret: MONSECRET", "Bearer MONSECRET"));

//$response = json_decode(curl_exec($curl), true);
//$response = json_decode(substr(curl_exec($curl), 0, -1), true);
$correct = substr(curl_exec($curl), 0, -1);

var_dump($correct);

$donnees = json_decode($correct, false);

echo $donnees->data[0]->id;
//echo $donnees;
... mais dont le résultat est bien décevant puisque toutes mes tentatives (après m'être inspiré aussi des réponses apportées dans un autre post de ce forum) affichent invariablement la même chose :
{
    "status": 200,
    "count": 50,
    "data": [
      {
        "id": 1125899906842626,
        "ohme_id": 2,
        "email": "test2[at]example[dot]com",
        "firstname": "Maggie",
        "lastname": "Paul",
        "civility": "Madame",
        "birthdate": "1970-08-24T00:00:00+01:00",
        "address": {
          "street_prefix_1": null,
          "street_prefix_2": null,
          "street": "5, avenue de Lagarde",
          "street_2": null,
          "city": "Joly-les-Bains",
          "state": null,
          "post_code": "17457",
          "country": "France",
          "country_code": "FR"
        },
        "phone": "0601020304",
        "structures": ["MonAsso"],
        "structure_ohme_ids": [1],
        "structure_position_names": ["Président"],
        "tags": ["Mon étiquette"],
        "groups": ["Groupe 1", "Groupe 2"],
        "emailing_lists": [
          {
            "name": "Abonnés Newsletter",
            "app_name": "Brevo",
            "external_id": "123"
          }
        ],
        "secondary_emails": [],
        "attachments": [{
          "id": 1125899906842625,
          "name": "MonFichier.pdf"
        }],
        "segment_ids": [1, 2],
        "created_at": "2019-11-04T11:25:04+01:00",
        "updated_at": "2019-11-04T11:25:04+01:00"
      },
      {
        "id": 1125899906842625,
        "ohme_id": 1,
        "email": "test[at]example[dot]com",
        "firstname": "Léon",
        "lastname": "Gauthier",
        "civility": "Monsieur",
        "birthdate": "1982-07-03T00:00:00+01:00",
        "address": {
          "street_prefix_1": "Appt. 2",
          "street_prefix_2": "Entrée C",
          "street": "66, avenue de Vidal",
          "street_2": "3e droite",
          "city": "Carlierdan",
          "state": null,
          "post_code": "57277",
          "country": "France",
          "country_code": "FR"
        },
        "phone": "0601020304",
        "structures": [],
        "structure_ohme_ids": [],
        "structure_position_names": [],
        "tags": ["Mon étiquette"],
        "groups": [],
        "emailing_lists": [],
        "secondary_emails": ["testing[at]example[dot]com"],
        "attachments": [],
        "segment_ids": [],
        "created_at": "2019-11-04T11:25:03+01:00",
        "updated_at": "2019-11-04T11:25:03+01:00"
      },
      ...
    ]
  }
Qu'en pensez-vous ? Qu'est-ce que je n'ai sans doute pas compris ? Quelle(s) erreur(s) flagrantes je commets ?

Merci beaucoup pour votre aide, quelle qu'elle soit.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 nov. 2024, 13:44

A priori je ne vois pas d'erreurs flagrantes, mais difficile juste en lisant le code.

Pour débuguer, un point important : n'utilise pas echo mais toujours var_dump()

Du coup remplace
echo $donnees->data[0]->id;
par
var_dump($donnees->data[0]->id);
Si ça ne renvoie rien ou une erreur, tu peux remonter d'objet en objet pour voir à quel niveau ça dysfonctionne
var_dump($donnees->data[0]);
var_dump($donnees->data);
var_dump($donnees);
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

20 nov. 2024, 16:20

Merci @rthur !

Résolu* : comme je ne savais pas que curl_exec affiche par défaut le résultat sauf si on lui demande explicitement (via CURLOPT_RETURNTRANSFER) de ne pas le faire ... cela explique à la fois cette étrange impression que j'avais que la page affichait invariablement la même chose, quoique je fasse ... sauf une fois ou deux où j'essayais de plus en plus n'importe quoi ... et où j'avais remarqué une fois que la dernière ligne du résultat affiché se terminait par "}]}1" au lieu de "}]}" ... que j'avais donc cherché à neutraliser par ce substr(curl_exec($curl), 0, -1); alors que je n'aurais jamais du l'ajouter (puisque cela correspondait sans doute au resultat d'un echo sur un bool(true) ou un Int(1) issu d'une autre ligne de mon propre code), tout capotant sans doute encore plus à partir de là !

*en ajoutant dans les premières lignes
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
et en supprimant l'inutile
$correct = substr(curl_exec($curl), 0, -1);

Petit nouveau ! | 3 Messages

20 nov. 2024, 16:22

PS : je passe donc à présent à l'étape suivante qui consiste à me familiariser avec le fonctionnement de boucles comme foreach pour afficher ce dont j'ai besoin 8)