Bonjour a tous,
j’ai un petit problème « oui encore » avec mon script « headzy »
La requête curl que j’exécute depuis un scenario fonctionne et me renvoi bien la bonne information, mais je n’arrive pas a traiter son format de retour
ma requete :
$json = system("curl -X GET --header 'Accept: application/json' --header 'X-Gizwits-User-token:2984000000000000000000000018f0fc' --header 'X-Gizwits-Application-Id:c70a66ff039d41b4a220e198b0fcc8b3' 'https://euapi.gizwits.com/app/bindings';");
le retour est le suivant :
{« devices »: [{« protoc »: 0, « ws_port »: 8888, « port_s »: 8888, « is_disabled »: false, « gw_did »: « », « wifi_soft_version »: « 00000000 », « dev_alias »: « Extension », « remark »: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »}, {« protoc »: 0, « ws_port »: 8888, « port_s »: 8888, « is_disabled »: false, « gw_did »: « », « wifi_soft_version »: « 00000000 », « dev_alias »: « piece TV », « remark »: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »}, {« protoc »: 0, « ws_port »: 8888, « port_s »: 8888, « is_disabled »: false, « gw_did »: « », « wifi_soft_version »: « 00000000 », « dev_alias »: " Cuisine ", « remark »: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »}]}
j’ai essayé de reprendre ce qu’il a été fait dans le sujet suivant :
https://community.jeedom.com/t/probleme-de-script/23021/14
mais le seul moyen que j’ai trouvé c’est en passant par le scipt suivant :
$json = system("curl -X GET --header 'Accept: application/json' --header 'X-Gizwits-User-token:2984000000000000000000000018f0fc' --header 'X-Gizwits-Application-Id:c70a66ff039d41b4a220e198b0fcc8b3' 'https://euapi.gizwits.com/app/bindings';");
$json = preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '', $json);
if (!empty($json))
{
$findme = 'devices';
$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_devices = $obj['devices'];
$scenario->setLog('Infos_devices : ' . $Infos_devices);
$scenario->setData('Infos_devices', $Infos_devices);
foreach ($Infos_devices as $a )
{
$transformation_tableau = implode ($a, ';');
$scenario->setData("test_php".$b++, $transformation_tableau);
}
}
else
{
$scenario->setLog('Erreur json est : ' . $json_errors[json_last_error()]);
}
}
}
Ce script, me renvoi 3 variables, avec toutes les informations sur une même ligne séparé par un « ; » mais sans les titres:
test_php : 0;8888;8888;false;;00000000;Extension;range=0|isdelete=0|gid=0|groupname=|grouprange=0
test_php1 : 0;8888;8888;false;;00000000;piece TV;range=0|isdelete=0|gid=0|groupname=|grouprange=0
test_php2 : 0;8888;8888;false;;00000000; cuisine ;range=0|isdelete=0|gid=0|groupname=|grouprange=0
Ce que je voudrais c’est pouvoir traiter le retour avec une variable par informations, comme ceci:
protoc_1 : 0
ws_port_1 : 8888
port_s_1: 8888
is_disabled_1: false
gw_did_1: « »,
wifi_soft_version_1: « 00000000 »,
dev_alias_1: « Extension »,
remark_1: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »
protoc_2 : 0
ws_port_2 : 8888
port_s_2: 8888
is_disabled_2: false
gw_did_2: « »,
wifi_soft_version_2: « 00000000 »,
dev_alias_2: « piece TV »,
remark_2: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »
protoc_3 : 0
ws_port_3 : 8888
port_s_3: 8888
is_disabled_3: false
gw_did_3: « »,
wifi_soft_version_3: « 00000000 »,
dev_alias_3: " cuisine ",
remark_3: « range=0|isdelete=0|gid=0|groupname=|grouprange=0 »
y a t’il une solution?
merci d’avance pour votre aide
dkvince