Remplir un formulaire et recupérer la valeur générée sur une page web
Remplir un formulaire et recupérer la valeur générée sur une page web
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
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
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
Salut, j'ai commencé un bout de code (plugin script) qui me renvoie ça :
J'affine le code et le rendu demain et je posterai ça.
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.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
Génial ! Merci bcp
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
J'arrive à ce résultat (il faudra voir avec des spécialistes de la mise en page ou du code pour affiner ensuite).
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.
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.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
Pour commencer, voici le script.
Tu as 5 variables à renseigner au début (ça correspond aux 5 champs du formulaire sur la page web)
Voici le contenu de mon équipement, nommé "Scrap prévisions rendement" dans le plugin Script.
Je te note ci-dessous le code pour l'extraction des valeurs, tu pourras faire des copier/coller.
J'ai indiqué l'adresse locale où la page web est sauvegardée.
Bien entendu, je te laisse indiquer ta propre adresse IP.
Pour l'auto-actualisation (Cron), tu peux mettre : 0 4 * * *
Pas besoin de laisser cet équipement visible.
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);
?>
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)
Bien entendu, je te laisse indiquer ta propre adresse IP.
Code : Tout sélectionner
http://172.20.33.138/previsions_rendement.html
Pas besoin de laisser cet équipement visible.
Dernière édition par romanais le 15 mai 2019, 14:21, édité 2 fois.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
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. 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 : Ensuite, pour chaque commande, je désactive l'affiche du nom (de la commande). Avec ces étapes, tu dois avoir une tuile fonctionnelle sur ton Dashboard.
J'importe mon équipement créé précédemment, et je ne garde que les infos ci-dessous. 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 : Ensuite, pour chaque commande, je désactive l'affiche du nom (de la commande). Avec ces étapes, tu dois avoir une tuile fonctionnelle sur ton Dashboard.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
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. Tu décoches la case "Visible", tu sauvegardes et tu peux aller voir ta tuile.
Aller sur "Configuration avancée".
Puis sur la roue crantée correspondant à la commande Rafraîchir. Tu décoches la case "Visible", tu sauvegardes et tu peux aller voir ta tuile.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
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
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
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
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 ?
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 ?
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
Je viens de comparer avec des valeurs plus petites.
Dans le script, commente la ligne
En mettant // juste devant.
J'ai testé et c'est ok à présent avec 310 par exemple.
Dans le script, commente la ligne
Code : Tout sélectionner
$header[] = "Content-Length: 60";
J'ai testé et c'est ok à présent avec 310 par exemple.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
C'est ok maintenant, merci bcp pour ce boulotromanais a écrit : ↑15 mai 2019, 13:27Je viens de comparer avec des valeurs plus petites.
Dans le script, commente la ligneEn mettant // juste devant.Code : Tout sélectionner
$header[] = "Content-Length: 60";
J'ai testé et c'est ok à présent avec 310 par exemple.
Re: Remplir un formulaire et recupérer la valeur générée sur une page web
Ok super ! J'ai mis à jour le script complet pour éviter les erreurs à d'autres utilisateurs.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invités