Récupérer des données d'une page web

Désolé alors …

si quelqu’un veut aider …

peut être qu’en passant par le web et l’api, c’est plus facile ?

Apsystems EMA API operation manual.pdf (628,1 Ko)

La c’est plus du cambouis c’est des sable mouvants

il faut ouvrir une session login pass puis jouer avec des tokens …

ça me parait plus compliqué que d’explorer une page web …

ah … le dessin est pourtant bien stable !! lol

je vais donc partir sur la page web mais vu le temps dispo et mon temps de compréhension … le mieux est de reproduire l’exemple puis de transposer je suppose ?

1 « J'aime »

je cherche, je cherche, j’essaie depuis la console mais pas moyen d’isoler ce que je veux avec Beautifulsoup et find … même find_all(‹ td ›) ne me remonte pas tout.
En regardant la page, on dirait que tous les onduleurs ne sont pas traités de la même façon entre balises et class
en fait, je pense que le plus facile serait de rechercher dans la page mes numéros d’onduleur (que je connais et que je peux mettre « en dur ») puis les puissances qui leur sont affectées. lorsque je fais soupe.find_all("408000137815"), j’obtiens je ne sais pas ce que ca signifie …
je suis partis du post ci dessous

Salut bernard

essai plutot

soupe.find_all(class_ = "active")

puis la dedans affine avec le contenu des td

jusque là, ca va, c’est pour affiner où je me perd dans la synthaxe …
de plus, la class active ne remonte pas tous les onduleurs, il n’y a pas cet entête sur chacun …source.txt (10,8 Ko) s

Je vois ça dans le code html (c’est u paquet de M…) c’est pas claire leur histoire qui envois les infos par 2 …
Il faut creuser comme j’ai pas le truc sous la main difficile de t’aider plus !

bon, ben déjà je suis rassuré, le truc n’est pas clair …
quel truc sous la main ?

J’ai pas tes onduleur pour tester …

ah ok, bon ben faut que je trouve de l’aide pour arriver a extraire ces données de ce fichier…

Fait quelques tuto avec bs4 pour être plus a l’aise

j’ai essayé mais j’en suis toujours au basic de mon MO5, donc c’est long … et plutôt c…

en fait, je ne comprend rien, je ne fais que mimer et forcément ca ne marche pas

Chacun le ferai à sa sauce.
si je comprend biens tu as accès au donnée en clair depuis une page web ?

Si c’est le cas moi je le ferai avec un script bash

tu télécharge la page avec curl.wget et tu la parse à cout de grep / awk/ cut etc …

oui, accès en clair, c’un en local

désolé mais je ne sais pas de quoi tu parles pour la suite

j’ai recherché sur un autre forum (récupérer des données dans un html - Réseau/Web Python) et l’on m’a donné le code suivant qui marche en ssh :

import pandas as pd
pd.set_option('display.max_rows', 6)
pd.set_option('display.max_columns', 6)
pd.set_option('display.width', 120)
html_tables = pd.read_html("http://192.168.3.131/index.php/realtimedata")
df = html_tables[0]
df.T # transpose to align
print(df)

j’obtiens un espèce de tableau, tout y est mais il faudra trier :

lorsque je met tout ca dans un bloc code précédé de #! /usr/bin/env python3
j’obtiens en log
image

des idées pour l’erreur et pour récupérer les bonnes données uniquement ?

Salut @bornich

Tu ne peut pas écrire directement du python dans un bloc code
tu est nativement en php …
cependant une alternative existe :

Bon 14 juillet

génial !! je n’avais pas compris ce « léger » détail !! lol

reste a trier et mettre dans des variables ou l’inverse ?

avec le code suivant gentiment fourni sur l’autre forum, j’arrive a afficher les valeurs voulues dans le log. Comment les mettre dans des variables que je pourrais récupérer sous Jeedom ?

$script = 'monpython.py';        //Nom du fichier python
$chemin = '/var/www/html/python'; // Dossier à utiliser

if (1){ //metre à 1 la 1er fois, une fois que le fichier existe et n'est plus modifier mettre a 0
// Script python
$python = <<<'EOD'
#! /usr/bin/env python3
import pandas as pd
pd.set_option('display.max_rows', 6)
pd.set_option('display.max_columns', 6)
pd.set_option('display.width', 120)
html_tables = pd.read_html("http://192.168.3.131/index.php/realtimedata")
df = html_tables[0]
df.T # transpose to align
print(df.iat[0, 0])
print(df.iat[1, 0])
print(df.iat[2, 0])
print(df.iat[3, 0])
print(df.iat[4, 0])
print(df.iat[5, 0])
print(df.iat[0, 1])
print(df.iat[1, 1])
print(df.iat[2, 1])
print(df.iat[3, 1])
print(df.iat[4, 1])
print(df.iat[5, 1])
print(df.iat[0, 4])
print(df.iat[2, 4])
print(df.iat[4, 4])
print(df.iat[0, 5])
print(df.iat[2, 5])
print(df.iat[4, 5])
EOD;
mkdir($chemin); // creation du dossier
file_put_contents($chemin.'/'.$script, $python); // Ecriture du fichier
}

$reponse = shell_exec('python3 '.$chemin.'/'.$script);  // execution du script 
$scenario->setLog($reponse); // recuperation des paramètres de retour du script 

j’obtiens :

[2021-07-15 19:25:54][SCENARIO] Start : Scenario lance manuellement.
[2021-07-15 19:25:54][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-07-15 19:25:54][SCENARIO] Exécution d'un bloc code
[2021-07-15 19:25:57][SCENARIO] 408000137815-1
408000137815-2
408000139665-1
408000139665-2
408000140762-1
408000140762-2
42 W
42 W
42 W
42 W
41 W
42 W
19 °C
21 °C
22 °C
2021-07-15 19:22:19
2021-07-15 19:22:19
2021-07-15 19:22:19

[2021-07-15 19:25:57][SCENARIO] Fin correcte du scénario