Récupération impossible des données de "toutsurmoneau.fr" (Suez) - Erreur : "PHPExcel_Worksheet::$_invalidCharacters"
Closed this issue · 7 comments
Description
Lors de la récupération des données sur le site "toutsurmoneau.fr", de Suez, la récupération génère l'erreur : "Erreur sur la fonction cron du plugin : Access to undeclared static property: PHPExcel_Worksheet::$_invalidCharacters".
Plusieurs signalements sur le forum de Jeedom :
- https://community.jeedom.com/t/phpexcel-worksheet-invalidcharacters/101552
- https://community.jeedom.com/t/probleme-de-recuperation-de-la-conso-deau/101840
- https://community.jeedom.com/t/erreur-importation-excel/27977
Etapes à reproduire (pour les bugs)
- Configurer les informations d'authentification et attendre la récupération des données.
Contexte:
La page d'authentification de "toutsurmoneau.fr" a évolué (cf. le code source d’une archive : http://web.archive.org/web/20230120072248/https://www.toutsurmoneau.fr/). Les champs « identifiants » et « mots de passe » ont évolué, ainsi que la partie "token".
Environnement:
- Version Jeedom: 4.3.15
- Platform: Debian (VM Proxmox)
- Version du Plugin: 2022-02-28
Tentative de solution
J'ai tenté de récupérer un token dans le code source qui apparait pour le captcha via regex (preg_match_all('/csrfToken.u0022.u003A.u0022(.*).u0022,.u0022targetUrl/', $html, $matches); $token = $matches[1][0];), mais cela ne fonctionne pas de mon côté : soit je ne prends pas les bonnes informations, soit ce token ne sert à rien (fausse route).
Solution trouvée par un utilisateur sur la communauté Jeedom :
Suez a modifié partiellement son site toutsurmoneau.
Le token est dorénavant présent dans windows.tsme_data sous le nom csrfToken.
En attendant une correction du plugin, j’ai ajouté ces quelques lignes de code (désolé pour la qualité du code) dans le fichier veolia_eau/core/class/veolia_eau_process.class.php après la ligne suivante :
$token = $html->find(‹ input[name= ›.$tokenFieldName.’]’, 0)->value;
N’oubliez pas de sauvegarder le fichier veolia_eau_process.class.php avant de le modifier.
Cette modification fonctionne sur mon jeedom depuis quelques jours quand le site toutsurmoneau est opérationnel.
// Ajout : Extraction token pour le nouveau site toutsurmoneau
if ($website == 4) {
preg_match("/csrfToken.*,/", $response, $matches);
$token = implode($matches);
$token = str_ireplace("\u002D","-",$token);
$token = str_ireplace("csrfToken\u0022\u003A\u0022","",$token);
$token = str_ireplace("\u0022,","",$token);
log::add('veolia_eau', 'debug', 'Token: '.$token);
}
// Fin Ajout toutsurmoneau
Ok je m'en occupe
Bonjour @darghorn,
Merci pour cette résolution :). Je n'aurais pas pensé convertir comme tu l'as fait certains blocs ;)
Par contre, dans la condition $website == 4, il faudrait inclure les sites suivants stp : 4, 7, 8, 10, 11, 12 et 13.
Il semble que le site "www.stephanoise-eaux.fr" (ID : 9) ait gardé l'ancienne version.
Merci.
P.-S. Le bloc suivant est toujours d'actualité ?
$datas = array( 'tsme_user_login[_username]='.urlencode($this->getConfiguration('login')), 'tsme_user_login[_password]='.urlencode($this->getConfiguration('password')) );
Car sur la nouvelle version, cela semble être "username" "password" uniquement.
J'ai ajouté les conditions pour les autres websites, par contre je n'ai pas le temps de voir les impacts si on supprime ce bloc désolé
Corrigé par #92 en BETA
Si tous va bien je passerai en stable d'ici 2semaines.
Vous pouvez communiquer sur le forum Jeedom ?
Merci
Merci pour ces changements. Effectivement, pas besoin de mettre à jour les champs input pour "username" et "password".
Bon boulot !