Bonjour,
Je me suis inspiré des échanges de ce sujet Traiter le retour d’un script curl - Plugins / Programmation - Communauté Jeedom pour tenter de récupérer des informations en provenance d’un retour de script curl, mais je sèche un peu sur le traitement de mon json.
Voici le script que j’ai écris
$json = system("curl -X 'GET' \
'https://api.amc.husqvarna.dev/v1/mowers' \
-H 'accept: application/vnd.api+json' \
-H 'X-Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Authorization-Provider: husqvarna'");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);
if (!empty($json))
{
$findme = 'data';
$pos = strpos($json, $findme);
if ($pos === false)
{
$scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoi : ' .$json);
}
else
{
$obj = json_decode($json, TRUE);
if (json_last_error() === JSON_ERROR_NONE)
{
$Infos_data = $obj['data'];
$scenario->setLog('type : ' . $Infos_data);
$scenario->setData('id', $Infos_data);
$data = $obj['data']; //a partir d'ici data me renvoi un [object object]
foreach ($Infos_data as $a)
{
$scenario->setData("type".$b, $a['type']);
$scenario->setData("id".$b, $a['id']);
b;
}
}
}
}
else
{
$scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
}
Jusque là j’obtiens deux variables, que je pourrais exploiter dans des virtuels au besoin, distinctes pour les valeurs ‹ id › et ‹ type ›, ça fonctionne.
J’essaie maintenant d’aller un peu plus loin pour parser mon json en tentant d’extraire les valeurs ‹ name ›, ‹ model ›, ‹ serialNumber › dans le json ci-contre
J’ai fait un essai avec le script suivant (aucune erreur à l’exécution du scénario) mais les valeurs (variables) restent vides. Il doit manquer quelque chose…
$json = system("curl -X 'GET' \
'https://api.amc.husqvarna.dev/v1/mowers' \
-H 'accept: application/vnd.api+json' \
-H 'X-Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-H 'Authorization-Provider: husqvarna'");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);
if (!empty($json))
{
$findme = 'data';
$pos = strpos($json, $findme);
if ($pos === false)
{
$scenario->setLog('Erreur de retour de la fonction CURL, la fonction renvoi : ' .$json);
}
else
{
$obj = json_decode($json, TRUE);
if (json_last_error() === JSON_ERROR_NONE)
{
$Infos_system = $obj['data'];
$scenario->setLog('name : ' . $Infos_system);
$scenario->setData('name', $Infos_system);
$Infos_system = $obj['data'];
$scenario->setLog('model : ' . $Infos_system);
$scenario->setData('model', $Infos_system);
$system = $obj['attributes']['system'];
//$obj['attributes']['system']; //a partir d'ici data me renvoi un [object object]
foreach ($Infos_system as $a)
{
$scenario->setData("name".$b, $a['name']);
$scenario->setData("model".$b, $a['model']);
b;
}
}
}
}
else
{
$scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
}
Est-ce que quelqu’un peut me donner un conseil ou un tuyau (je ne suis pas développeur).
Merci la communauté.
Joël