Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Remplir un formulaire et recupérer la valeur générée sur une page web

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
Répondre
HadesDT
Timide
Messages : 204
Inscription : 29 janv. 2018, 08:00

Remplir un formulaire et recupérer la valeur générée sur une page web

Message par HadesDT » 14 mai 2019, 11:37

Bonjour,

je ne sais pas du tout comment utiliser le plugin script pour remplir le formulaire à l'adresse : http://www.meteoservices.be/fr/be/home/ ... aires.html

J'aimerais que Jeedom le remplisse avec les 5 champs adéquat et "appuie" sur "calculez" cela génére une table avec les prévisions de la journée ainsi que du lendemain.

Une idée de comment faire ? Merci :)

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 14 mai 2019, 21:00

Salut, j'ai commencé un bout de code (plugin script) qui me renvoie ça :
script.png
script.png (7.29 Kio) Consulté 1963 fois
On renseigne les valeurs souhaitées dans le script et c''est tout.
J'affine le code et le rendu demain et je posterai ça.
script2.png
script2.png (41.67 Kio) Consulté 1963 fois
Merci à toute l'équipe pour le taf

Mon matériel

HadesDT
Timide
Messages : 204
Inscription : 29 janv. 2018, 08:00

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par HadesDT » 14 mai 2019, 22:23

Génial ! Merci bcp

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 10:37

J'arrive à ce résultat (il faudra voir avec des spécialistes de la mise en page ou du code pour affiner ensuite).
previsions.png
previsions.png (11.37 Kio) Consulté 1934 fois
Le principe :
Je crée un équipement dans le plugin Script.
A l'intérieur, j'ai une première commande contenant le script à base de PHP (que je collerai après).
Ce script envoie des variables POST à la page web, puis enregistre la page complète en local.
il faudra juste indiquer tes propres valeurs dans le script (c'est commenté, tu verras vite ce que tu dois modifier).
J'ai également créé 4 commandes récupérant les valeurs souhaitées (2 dates + 2 valeurs).

On planifie une auto-actualisation de cet équipement Script tous les jours à 4h par exemple.
A ce niveau, on a un équipement fonctionnel, et on peut déjà utiliser les commandes (pour s'envoyer une notif par mail/télégram, avec les prévisions du jour par exemple).

Pour le rendu visuel (Dashboard), j'ai créé un équipement dans le plugin "Virtuel".
J'y ai importé l'équipement Script, affiné quelques réglages pour la mise en page (tableau, dont je découvre le fonctionnement), et ça a donné le résultat ci-dessus.
Ce virtuel sera mis à jour automatiquement à chaque fois que l'équipement Script sera rafraîchi, ou en cliquant sur le bouton "Mettre à jour".

Dans l'idéal j'aurais aimé pouvoir tout gérer depuis mon script, et afficher directement les bonnes valeurs, mais je ne suis pas à l'aise avec JS/Jquery.

Si le site de prévisions venait à changer la structure de sa page, il est bien entendu que ceci ne marcherait plus.

Je vais donc préparer un pas à pas dans les messages suivants. Le temps de faire quelques captures.
Merci à toute l'équipe pour le taf

Mon matériel

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 11:14

Pour commencer, voici le script.
Tu as 5 variables à renseigner au début (ça correspond aux 5 champs du formulaire sur la page web)

Code : Tout sélectionner

<?php
// ************* DEBUT DES VARIABLES "MODIFIABLES"
$Zipcode = '1200'; //code postal Belgique
$PanelWP = '20000'; //Capacité maximale des panneaux
$NoOfPanels = '20'; //Nombre de panneaux
$Slope = '5'; //Degré d'inclinaison
$Azimuth = '270'; //Azimut
// ************* FIN DES VARIABLES

// ************* NE PAS MODIFIER CI-DESSOUS
$login_url = 'www.meteoservices.be/fr/be/home/meteo/panneaux-solaires.html'; //url de la page d'accueil
$source= 'www.meteoservices.be/fr/be/home/meteo/panneaux-solaires.html'; //page à récupérer
$panneaux_html = '/var/www/html/previsions_rendement.html'; //page créée

//initialisation curl
$ch = curl_init();

//en-têtes http
$header[0] = "Host: www.meteoservices.be";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
$header[] = "Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7"; 
$header[] = "Accept-Charset: utf-8";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: no-cache";
//$header[] = "Content-Length: 60";
$header[] = "Cache-control: max-age=0";
$header[] = "Origin: http://www.meteoservices.be";
$header[] = "Upgrade-Insecure-Requests: 1";
$header[] = "Content-Type: application/x-www-form-urlencoded";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Referer: http://www.meteoservices.be/fr/be/home/meteo/panneaux-solaires.html";
$header[] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36";

//pour afficher le contenu de la page, sinon illisible car compressée
curl_setopt($ch,CURLOPT_ENCODING , "");

//défini l'url de connexion/identification
curl_setopt($ch, CURLOPT_URL, $login_url);
//active HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'Zipcode='.$Zipcode.'&PanelWP='.$PanelWP.'&NoOfPanels='.$NoOfPanels.'&Slope='.$Slope.'&Azimuth='.$Azimuth);

//défini les en-têtes http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

// Définition de la méthode d'authentification du serveur
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 

//gestion du cookie
//curl_setopt( $curl, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, "/var/www/html/cookie_previsions_rendement.txt"); //Le fichier dans lequel les cookies seront enregistrés

//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//exécute la requête - login
$store = curl_exec($ch);

//juste pour tester - affiche directement le résultat dans la fenêtre
//echo $store;

curl_setopt($ch, CURLOPT_COOKIEFILE, "/var/www/html/cookie_previsions_rendement.txt"); //Le fichier cookie à charger
curl_setopt($ch, CURLOPT_URL, $source);//la page à récupérer
//execute la requête
$content = curl_exec($ch);

curl_close($ch); // on ferme la session curl

//enregistre le contenu de la page dans un fichier html
file_put_contents($panneaux_html, $store);

//change les droits sur le fichier - écriture
chmod($panneaux_html,0777);

?>
Voici le contenu de mon équipement, nommé "Scrap prévisions rendement" dans le plugin Script.
script.png
script.png (312.57 Kio) Consulté 1926 fois
Je te note ci-dessous le code pour l'extraction des valeurs, tu pourras faire des copier/coller.

Code : Tout sélectionner

div.tx-mgpvinstallation-pi1 table:first td:eq(1)
div.tx-mgpvinstallation-pi1 table:first td:eq(2)
div.tx-mgpvinstallation-pi1 table:first td:eq(3)
div.tx-mgpvinstallation-pi1 table:first td:eq(4)
J'ai indiqué l'adresse locale où la page web est sauvegardée.
Bien entendu, je te laisse indiquer ta propre adresse IP.

Code : Tout sélectionner

http://172.20.33.138/previsions_rendement.html
Pour l'auto-actualisation (Cron), tu peux mettre : 0 4 * * *
Pas besoin de laisser cet équipement visible.
Dernière édition par romanais le 15 mai 2019, 14:21, édité 2 fois.
Merci à toute l'équipe pour le taf

Mon matériel

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 11:15

Je passe à présent à la création de mon virtuel "Prévisions rendement panneaux".

J'importe mon équipement créé précédemment, et je ne garde que les infos ci-dessous.
virtuel.png
virtuel.png (311.38 Kio) Consulté 1916 fois
Il ne reste plus que la mise en page à finaliser.
Je clique sur "Configuration avancée".
Puis sur l'onglet "Disposition".
Et je configure comme ci-dessous :
tableau.png
tableau.png (53.16 Kio) Consulté 1916 fois
Ensuite, pour chaque commande, je désactive l'affiche du nom (de la commande).
nom.png
nom.png (18.13 Kio) Consulté 1916 fois
Avec ces étapes, tu dois avoir une tuile fonctionnelle sur ton Dashboard.
Merci à toute l'équipe pour le taf

Mon matériel

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 11:26

Une dernière étape visuelle, masquer la roue crantée sur la tuile.
Aller sur "Configuration avancée".
Puis sur la roue crantée correspondant à la commande Rafraîchir.
commandes.png
commandes.png (16.4 Kio) Consulté 1916 fois
Tu décoches la case "Visible", tu sauvegardes et tu peux aller voir ta tuile.
tuile.png
tuile.png (10.97 Kio) Consulté 1916 fois
Merci à toute l'équipe pour le taf

Mon matériel

HadesDT
Timide
Messages : 204
Inscription : 29 janv. 2018, 08:00

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par HadesDT » 15 mai 2019, 11:54

Hello, Merci c'est au top !

Edit : J'ai ceci dans la page web générée par le script, et le cookie_previsions_rendement.txt ne se génére pas :(

Edit 2 : Si je met comme valeur 310 à PanelWp cela ne marche pas, c'est assez bizarre
Untitled.png
Untitled.png (25.66 Kio) Consulté 1902 fois

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 13:17

Et tes valeurs fonctionne sur la page réelle ?
Déjà c'est un souci que le cookie ne se génère pas.
Tu as quoi comme système ?
Pourquoi tu as le port 8088 renseigné sur ton adresse locale Jeedom ?
Merci à toute l'équipe pour le taf

Mon matériel

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 13:27

Je viens de comparer avec des valeurs plus petites.
Dans le script, commente la ligne

Code : Tout sélectionner

$header[] = "Content-Length: 60";
En mettant // juste devant.

J'ai testé et c'est ok à présent avec 310 par exemple.
Merci à toute l'équipe pour le taf

Mon matériel

HadesDT
Timide
Messages : 204
Inscription : 29 janv. 2018, 08:00

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par HadesDT » 15 mai 2019, 14:27

romanais a écrit :
15 mai 2019, 13:27
Je viens de comparer avec des valeurs plus petites.
Dans le script, commente la ligne

Code : Tout sélectionner

$header[] = "Content-Length: 60";
En mettant // juste devant.

J'ai testé et c'est ok à présent avec 310 par exemple.
C'est ok maintenant, merci bcp pour ce boulot :)

romanais
Actif
Messages : 1999
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: Remplir un formulaire et recupérer la valeur générée sur une page web

Message par romanais » 15 mai 2019, 14:48

Ok super ! J'ai mis à jour le script complet pour éviter les erreurs à d'autres utilisateurs.
Merci à toute l'équipe pour le taf

Mon matériel

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités