Recupérer données d'une page html, non balisée

Bonjour, je croyais trouver facilement un exemple dans le forum pour ce pb simple, mais sans succès. Aussi je reviens vers vous.
La requête http que me renvoie un équipement (boitier arrosage)
image , HTML, format ?

Je voudrais récupérer la ligne rs : état de chacun des relais et les attribuer à des virtuels.
Je n’ai pas trouvé d’exemple identique, et pas trouvé la requête qui va bien (restera ensuite le pg du parsing de mes virtuels…)
Merci par avance

Bonjour.

Avec un navigateur web, option de développement.

Il faut tenter de sélectionner ce retour et cliquez droit : copy xpath

1 « J'aime »

Merci Fabrice, j’ai pas trouvé sur firefox, mais voilà le résultat avec explorer.
/html/body/text()[6]


La requête ne renvoie rien.

Explorer ? Remplacez le par Egde !

C’est pas ce path là, je fait cela de mémoire, testez avec un autre.

Oui c’est bien edge (que je n’utilise pas d’habitude…)Je vois 2 copy xpath, simple ou complet. Le résultat est identique.

Vous pouvez copier le code dans un bloc code ici (et pas dans une image).

Bonjour,

Sur Edge je ne sais pas mais sur Chrome c’est plutôt Copy selector qu’il faut utiliser pour parser du HTML avec le #plugin-script.

Bonsoir,

C’est certainement pareil, la souche est la même pour les deux navigateurs. J’ai répondu de mémoire.

Merci.

1 « J'aime »

Bonjour.

Il y a un très bon exemple ici :

Merci, mais j’ai tenté de répliquer bêtement, NOK. Mon format est html, pas json.

en script c’est toujours un peu « aléatoire », je te propose de déclencher un scénario pour récupérer la valeur. voilà un exemple fonctionnel de ce que tu veux faire, il te reste à remplacer le html par une lecture de page web. pour ça tu peux te reporter à l’exemple donné plus haut qui marche bien pour la pluviométrie.

$string = "<html><body>Etherrain device status<br>un<br>ac:<br>os:rd<br>cs:ok<br>rs:0000001<br>rn:0<br></body></html>";
$pattern = "/rs:(.*?)<br>/";
if (preg_match($pattern, $string, $matches) ==1) {
  	$s = substr( $matches[0], 3, strlen($matches[0])-3);
	$scenario->setLog( $s ); 
    // voilà ta valeur qu'il reste à écrire comme ci-dessous
    // cmd::byString('#[objet][equipement][info]#')>event($s);
 
} else $scenario->setLog("rs non trouvé");

1 « J'aime »
 $url= "http://192.168.5.7/direct.cgi?lu=xxx&lp=xxx&xd=-:-:-:-:-:-:-:-";
  $string = file_get_contents($url, FALSE, NULL, 167, 8);
	
//EV1
	$s=substr($string,0,1);
	cmd::byString("#[Arrosage][Terr Puit][Status]#")->event($s);
  
//EV2
	$s=substr($string,1,1);
	cmd::byString("#[Arrosage][Verger][Status]#")->event($s);

//EV3
	$s=substr($string,2,1);
	cmd::byString("#[Arrosage][Haie RuePiscine][Status]#")->event($s);

//EV4
	$s=substr($string,3,1);
	cmd::byString("#[Arrosage][Butte Verg-Pisc][Status]#")->event($s);
//EV5
	$s=substr($string,4,1);
	cmd::byString("#[Arrosage][EV5-pisc][Status]#")->event($s);
//EV6
	$s=substr($string,5,1);
	cmd::byString("#[Arrosage][EV6-pisc][Status]#")->event($s);
//EV7
	$s=substr($string,6,1);
	cmd::byString("#[Arrosage][EV7-pisc][Status]#")->event($s);

@neurall , merci pour ton idée. J’ai tenté et n’ai pas réussi jusqu’ici. Mais tu m’a mis sur une autre piste. J’ai replongé dans la théorie de quelques commandes php et après tâtonnement… j’ai posté mon scénario ci dessus. Comme la réponse HTTP est de format figé, cette solution est opérationnel. Si le format variait selon la réponse, il y aurait pb. Ca fonctionne, ouf!J’ai maintenant un vrai retour effectif du status de chaque electrovanne. Merci à vous tous pour votre aide

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.