Plus aucune information du plugin reçue à cause de données API recues incomplètes

Bonjour

Mon plugin meteo-france est en rade depuis minima le 8 avril. En gros, il ne récupère plus les données distantes.
Je ne suis pas persuadé que ce soit un problème directement de ce plugin, mais c’est le seul qui me pose problème.

En gros, voici ce que j’ai dans le log quand je sauvegarde un objet (Les XXX correspondaient bien à des valeurs correctes) :

[2023-04-21 15:27:35]DEBUG : Get https://api-adresse.data.gouv.fr/search/?q=XXXXXXXXX&postcode=XXXXX&limit=1
[2023-04-21 15:27:35]DEBUG : Result {"type":"FeatureCollection","version":"draft","features":[],"attribution":"BAN","licence":"ETALAB-2.0","query":"XXXXXX","filters":{"postcode":"XXXX"},"limit":1}
[2023-04-21 15:27:35]DEBUG : Insee
[2023-04-21 15:27:35]DEBUG : Get https://rpcache-aa.meteofrance.com/internet2018client/2.0/forecast?lat=&lon=&id=&instants=morning,afternoon,evening,night
[2023-04-21 15:27:35]DEBUG : Result {"error":true,"messages":{"position":"Invalid lat/lon parameter"}}

Donc j’ai un peu creusé dans le code, deux remarques :
A côté de [2023-04-21 15:27:35]DEBUG : Insee, il est normalement censé mettre une partie du json décodé, la il ne met tien, et pour cause, il ne reçoit pas un json complet. Si vous regardez la ligne de dessus, features est vide.
A partir de là ca part en vrille, il ne récupère pas la longitude/latitude et le code de la ville, donc sa seconde requête ne peut pas aboutir.

La où ça commence à bien me prendre la tête. Si je copie/colle l’url directement dans le navigateur, j’ai bien un beau json complet, qui contient notamment les données nécessaire dans features, ce même tableau qui aurait du être affiché à coté de Insee dans le log :

{"type":"FeatureCollection","version":"draft","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[X.XXX,XX.XXX]},"properties":{"label":"XXXXXX","score":0.926291818181818,"id":"XXX","type":"municipality","name":XXXX","postcode":"XXX","citycode":"XXXX"...}],"attribution":"BAN","licence":"ETALAB-2.0","query":"XXX","filters":{"postcode":"XXX"},"limit":1}

En cherchant un peu plus loin, cette partie du code utilise une classe du core « com_http ».
Je me suis dit que j’allais créer un fichier de test et appeler cette classe, même combat, je reçoit en fait ce json incomplet :

string(176) "{"type":"FeatureCollection","version":"draft","features":[],"attribution":"BAN","licence":"ETALAB-2.0","query":"XXX","filters":{"postcode":"XXX"},"limit":1}" 

Ici, le features est vide quand il est récupéré par la class.
La class com_http étant en fait essentiellement du curl, j’ai fait la même requète minimaliste et en variant les options, à chaque fois je reçois ce json dans rien dans features.

A tout hasard j’ai essayé en ssh de faire un « curl https://api-adresse.data.gouv.fr/search/… », et là je reçois bien un json complet…

A toutes fins utiles : Jeedom en 4.3.17, tous les plugins à jour.
Php 7.4.33 sur un Debian 11.6.
J’ai également fait un apt update/upgrade, on sait jamais ! Pas de changement.
Dans le doute, j’ai aussi vérifié si il y avait des modifications sur la lib php-curl entre un 7.3 de debian 10 et la 7.4, visiblement rien n’est censé cassé le fonctionnement.

Je ne sais plus bien vers quoi chercher, si quelqu’un aurait une idée ! Comme dit, pas sur que ça vienne du plugin, mais il y a bien quelque chose quelque-part qui coince.
Merci

Hello

Sous debian 11, avec le plugin en beta pas de souci.
Cherchez pas ce n’est pas mon adresse lol
Donc teste en beta :wink:

Hello

Je viens de tester, plugin en beta, meme combat malheureusement

Ben comme tu le vois, j’ai fait le test et je n’ai pas ce souci…

Je dois pas avoir de bol alors !
Blague a part, je viens de tester avec l’adresse du travail et ça fonctionne.
La différence entre le deux, celle du travail n’a pas d’accent dans le nom de la ville, celle où l’habite a un accent.

Ben tu tiens peut etre un truc !
essaye en virant l’accent

Bonjour,

Le plugin n’aime pas les accents.

Ce n’est pas la requête qui semble poser problème. C’est le json de retour de api-adresse qui est tronqué pour la ville où j’ai un accent.
Dans le doute j’ai créé aussi un objet geotrav avec uniquement les coordonnées GPS, c’est le même résultat.
Comme j’ai de la chance, les autres villages autour ont aussi tous des accents, donc pour la pluie dans l’heure, je peux même pas gruger.

Mais comme dit, j’ai quand même un doute que ça vienne du plugin, étant donné qu’un bête curl de quelques lignes pour tester donne la même erreur sur le serveur où est installé jeedom.
La class com_http n’a visiblement pas été modifiée depuis longtemps, je pense qu’il doit y avoir quelque part d’autre une config qui a changée volontairement ou non sur mon install.

Bonjour,

Ce n’est pas suffisant et même inutile. Dans la fonction getInsee(), il faut uniquement la ville et le code postal. C’est getInsee() qui initialise les latitude et longitude.

Pour corriger, il faut pouvoir reproduire. Fournissez le nom d’un village qui ne fonctionne pas.
En MP si pb confidentialité.

1 « J'aime »

Bonjour
Ne sachant plus où chercher, j’avais testé ces 3 possibilités :

  • Utilisation de la config jeedom (totalement complété)
  • Utilisation de geotrav avec une adresse renseignée manuellement
  • Utilisation de geotrav avec une adresse en coordonnées GPS.
    Les 3 ont donné la même erreur avec le json et le village qui ne fonctionne pas.

Cependant après avoir vu que la ville sans accent fonctionne, j’ai cherché dans ce sens et je viens de modifier le plugin pour qu’il redevienne fonctionnel pour mon village accentué.
Je viens de faire un PR pour le plugin ( Update meteofrance.class.php by WorldOfGZ · Pull Request #12 · lunarok/jeedom_meteofrance · GitHub )

Je pense que ça a déja été vu car juste après l’URL de la requête il y a une transformation sans accent pour l’array :

$array['ville'] = self::lowerAccent($array['ville']);

Mais on l’utilise d’abord dans la requête avec l’accent.

De mon coté, je pense que début avril j’ai du changer la ville dans jeedom en remettant l’accent, mais je n’en ai aucun souvenir puisque ça marchait avant.

C’est quelle lettre accentuée qui crée le problème ?

C’est un é
Mais la en retirant l’accent de l’URL pour récupérer les coordonnées c’est nickel.

Avec une ville près de chez moi, je ne reproduis pas:

0000|[2023-04-21 21:26:15]DEBUG : Get https://api-adresse.data.gouv.fr/search/?q=Maxéville&postcode=54320&limit=1
0001|[2023-04-21 21:26:15]DEBUG : Result {"type":"FeatureCollection","version":"draft","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.165992,48.713149]},"properties":{"label":"Rue Courbet 54320 Maxéville","score":0.29171363636363634,"id":"54357_0060","name":"Rue Courbet","postcode":"54320","citycode":"54357","x":932877.79,"y":6850559.5,"city":"Maxéville","context":"54, Meurthe-et-Moselle, Grand Est","type":"street","importance":0.58385,"street":"Rue Courbet"}}],"attribution":"BAN","licence":"ETALAB-2.0","query":"Maxéville","filters":{"postcode":"54320"},"limit":1}
0002|[2023-04-21 21:26:15]DEBUG : Insee Array (     [label] => Rue Courbet 54320 Maxéville     [score] => 0.29171363636364     [id] => 54357_0060     [name] => Rue Courbet     [postcode] => 54320     [citycode] => 54357     [x] => 932877.79     [y] => 6850559.5     [city] => Maxéville     [context] => 54, Meurthe-et-Moselle, Grand Est     [type] => street     [importance] => 0.58385     [street] => Rue Courbet )

Effectivement je n’ai pas le soucis pour Maxéville, pas loin non plus !

On va rester sur une autre commune proche qui est similaire à la mienne et qui ne passe pas.
J’ai fait 2 enregistrements, le plugin en Beta, et en rajoutant ce que j’ai mis dans le PR :

[PLUGIN EN BETA]
[2023-04-21 21:52:56][DEBUG] : Get https://api-adresse.data.gouv.fr/search/?q=Erbéviller-sur-Amezule&postcode=54280&limit=1
[2023-04-21 21:52:56][DEBUG] : Result {"type":"FeatureCollection","version":"draft","features":[],"attribution":"BAN","licence":"ETALAB-2.0","query":"Erbéviller-sur-Amezule","filters":{"postcode":"54280"},"limit":1}
[2023-04-21 21:52:56][DEBUG] : Insee 
[2023-04-21 21:52:56][DEBUG] : Get https://rpcache-aa.meteofrance.com/internet2018client/2.0/forecast?lat=&lon=&id=&instants=morning,afternoon,evening,night
[2023-04-21 21:52:56][DEBUG] : Result {"error":true,"messages":{"position":"Invalid lat/lon parameter"}}
[PLUGIN EN BETA + MODIFICATION SUR L'URL a la ligne 127]
[2023-04-21 21:53:36][DEBUG] : Get https://api-adresse.data.gouv.fr/search/?q=erbeviller-sur-amezule&postcode=54280&limit=1
[2023-04-21 21:53:36][DEBUG] : Result {"type":"FeatureCollection","version":"draft","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.385359,48.728612]},"properties":{"label":"Erbéviller-sur-Amezule","score":0.9235990909090909,"id":"54180","type":"municipality","name":"Erbéviller-sur-Amezule","postcode":"54280","citycode":"54180","x":948930.3,"y":6852946.48,"population":70,"city":"Erbéviller-sur-Amezule","context":"54, Meurthe-et-Moselle, Grand Est","importance":0.15959,"municipality":"Erbéviller-sur-Amezule"}}],"attribution":"BAN","licence":"ETALAB-2.0","query":"erbeviller-sur-amezule","filters":{"postcode":"54280"},"limit":1}
[2023-04-21 21:53:36][DEBUG] : Insee Array (     [label] => Erbéviller-sur-Amezule     [score] => 0.92359909090909     [id] => 54180     [type] => municipality     [name] => Erbéviller-sur-Amezule     [postcode] => 54280     [citycode] => 54180     [x] => 948930.3     [y] => 6852946.48     [population] => 70     [city] => Erbéviller-sur-Amezule     [context] => 54, Meurthe-et-Moselle, Grand Est     [importance] => 0.15959     [municipality] => Erbéviller-sur-Amezule ) 
[2023-04-21 21:53:36][DEBUG] : Get https://rpcache-aa.meteofrance.com/internet2018client/2.0/forecast?lat=48.728612&lon=6.385359&id=&instants=morning,afternoon,evening,night
[2023-04-21 21:53:36][DEBUG] : Result {"update_time":"2023-04-21T19:30:00.000Z","type":"Feature","geometry":{"type":"Point","coordinates":[6.384431,48.729302]},"properties":{"altitude":264,"name":"Erbéviller-sur-Amezule","country":"FR - France","french_department":"54","rain_product_available":1,"timezone":"Europe/Paris","insee":"541800","bulletin_cote":0,"daily_forecast":[{"time":"2023-04-21T00:00:00.000Z","T_min":0,"T_max":16.6,"T_sea":null,"relative_humidity_min":55,"relative_humidity_max":100,"total_precipitation_24h":3.3,"uv_index":5,"daily_weather_icon":"p3j","daily_weather_description":"Très nuageux","sunrise_time":"2023-04-2..."mf_search_form":{"config_base_urls":{"metropole":"meteofrance.com","reunion":"meteofrance.com","guadeloupe":"meteofrance.com","martinique":"meteofrance.com","nc":"meteofrance.com","pf":"meteofrance.com","mayotte":"meteofrance.com"}},"mf_tools_common":{"alias":"\/previsions-meteo-france\/erbeviller-sur-amezule\/54280","config":{"base_url":"meteofrance.com\/internet2018client\/2.0","site":"rpcache-aa","domain":"https:\/\/rpcache-aa.meteofrance.com"}},"user":{"uid":0,"permissionsHash":"a21cdda8af21be56d8d134f063ccf6a3c1c2a1e5ee86276b0347f50c2d85bacb"}}

Est ce la combinaison de l’accent et du tiret, avec le str_replace dans la requète ?

1 « J'aime »

Avec la requête, https://api-adresse.data.gouv.fr/search/?q=Erbéviller-sur-Amezule&postcode=54280&limit=1
Il y a dans la réponse: "query":"Erbéviller-sur-Amezule" qui explique pourquoi il n’y a pas de résultat.
Il faut utiliser urlencode() pour le nom de la ville.

Ça donne dans le code du plugin:

$url = 'https://api-adresse.data.gouv.fr/search/?q=' . str_replace(' ', '-', urlencode($array['ville'])) . '&postcode=' . $array['zip'] . '&limit=1';

Et dans le log:

0000|[2023-04-21 22:37:36]DEBUG : Get https://api-adresse.data.gouv.fr/search/?q=Erb%C3%A9viller-sur-Amezule&postcode=54280&limit=1
0001|[2023-04-21 22:37:36]DEBUG : Result {"type":"FeatureCollection","version":"draft","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[6.385359,48.728612]},"properties":{"label":"Erbéviller-sur-Amezule","score":0.9235990909090909,"id":"54180","type":"municipality","name":"Erbéviller-sur-Amezule","postcode":"54280","citycode":"54180","x":948930.3,"y":6852946.48,"population":70,"city":"Erbéviller-sur-Amezule","context":"54, Meurthe-et-Moselle, Grand Est","importance":0.15959,"municipality":"Erbéviller-sur-Amezule"}}],"attribution":"BAN","licence":"ETALAB-2.0","query":"Erbéviller-sur-Amezule","filters":{"postcode":"54280"},"limit":1}
0002|[2023-04-21 22:37:36]DEBUG : Insee Array (     [label] => Erbéviller-sur-Amezule     [score] => 0.92359909090909    

C’est ce que fait le test en ligne de l’API adresse: API Adresse | adresse.data.gouv.fr


L’API fonctionne avec des espaces ou des tirets dans le nom. Le str_replace( ' ' ,'-',...) devrait pouvoir être supprimé.

1 « J'aime »

Merci du retour.
Au vu du score identique l’api a l’air également de ne pas tenir compte si il y a un accent ou pas. Plutôt bien fait leur système !

Du coup ça va être modifié sur la stable ?

Bonjour,
je viens de voir que vous aviez clôturer fermé votre PR.
Je vais en faire un avec urlencode().
Ca sera intégré en beta et s’il y a des retours positifs, ca sera intégré en stable.
A vous de tester la beta quand dispo et de faire le retour.

Décocher Solution à ce fil pour qu’il reste ouvert et permette le suivi.

Bonjour
Oui je l’ai clôturé car je trouve que c’est plus pertinent avec urlencode

Je prendrais le PR de jpty du coup. Jamais eu le soucis alors que ma ville a é aussi

Bonjour

Si ça vous va, je ferais aussi un PR dans la semaine pour avoir un message explicite si il y a un features vide pour x ou y raisons.