Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Appels renvoient Internal Server Error 500 #112

Open
oudoulj opened this issue Oct 7, 2022 · 16 comments
Open

Appels renvoient Internal Server Error 500 #112

oudoulj opened this issue Oct 7, 2022 · 16 comments

Comments

@oudoulj
Copy link

oudoulj commented Oct 7, 2022

Depuis ce matin (au moins), tous les appels renvoient des 500 Internal Server Error.

Exemples :
https://api-ratp.pierre-grimaud.fr/v4/destinations/metros/4
https://api-ratp.pierre-grimaud.fr/v4/lines
https://api-ratp.pierre-grimaud.fr/v4/schedules/buses/120/bry-sur-marne/R

Quelque chose a changé ou est temporairement down ? 😕

{
    "result": {
        "code": 500,
        "message": "Internal Server Error"
    },
    "_metadata": {
        "call": "GET /schedules/buses/120/bry-sur-marne/R",
        "date": "2022-10-07T08:39:01+02:00",
        "version": 4
    }
}

Le dashboard montre :

image

@Dev1323
Copy link

Dev1323 commented Oct 7, 2022

l'API utilisé par le projet n'existe plus.
Les datas ont migré sur : https://prim.iledefrance-mobilites.fr/fr

Il faut changer les call API... reste à savoir si @pgrimaud souhaite le faire ou non.

@oudoulj
Copy link
Author

oudoulj commented Oct 7, 2022

l'API utilisé par le projet n'existe plus. Les datas ont migré sur : https://prim.iledefrance-mobilites.fr/fr

Il faut changer les call API... reste à savoir si @pgrimaud souhaite le faire ou non.

Merci.
J'ai créé un compte sur https://prim.iledefrance-mobilites.fr/fr puis généré un token mais il va me falloir creuser sur comment mettre en place un call dans Home Assistant 😓

@Cqoicebordel
Copy link

Je viens de regarder, et O.M.G.

Je n'ai jamais vu une API si mal documentée, produisant difficilement des informations, et sortant un JSON si pourri.
Example : J'essaye d'avoir les prochains passage de métro à la station Parmentier. Je regarde dans la doc et on peut pas donner le nom de la station, mais uniquement son ID. Ok, c'est un peu chiant, et y'a pas de service permettant de trouver l'ID qui va bien, mais allons chercher dans le GTFS. Une ID possible est "IDFM:7705".
Sauf que non. Il faut l'ID STIF et pas IDFM. C'est quoi la différence ? Aucune idée. Surtout que l'exemple dans la doc générale utilise l'ID IDFM.
On va chercher dans les jeux de données. Attention, parce que y'a trois jeux de données "Arrêts" tous avec des identifiants différents.
Bon je trouve l'ID dans un des tableaux, "22019". Je suppose donc qu'il faut mettre "STIF:22019". Non. Il faut mettre "STIF:StopPoint:Q:22019:". Pourquoi ? Personne ne sait. Au passage notez les deux points à la fin, sinon ça fonctionne pas.

Ok, cette fois, on a un JSON sur le truc de test du site. Je regarde vite fait, et… pas de temps d'attentes. Je regarde de plus prêt, et je vois des DepartureStatus": "onTime". En fait, ils mettent les dates et heures complètes d'arrivée et de départ de la station. En UTC, sinon c'est pas drôle. Mais bon, ça, ça va. Mais ce qui est encore plus drôle, c'est que les horaires d'arrivée et de départ sont les même, à la milliseconde près.
Notons aussi des trucs rigolo, comme

"StopPointName": [
    {
        "value": "Parmentier"
    }
]

au lieu d'un simple "StopPointName": "Parmentier" (et y'en a plein des comme ça dans le JSON). Et surtout, que la ligne de métro en question n'est pas cité par son nom dans le json, il n'y a que son ID "STIF:Line::C01373:", très pratique pour identifier simplement les choses. Surtout que, évidemment, dans le tableau qu'il faut aller voir pour trouver les IDs STIF, ni la ligne, ni le sens de la marche ne sont indiqués. Pour les arrêts avec plusieurs lignes, il faut donc faire au pif, prendre l'ID de la ligne et aller vérifier dans un autre tableau pour être sûr qu'on regarde le bon JSON.
Sans compter, évidemment qu'on peut pas faire une requête pour avoir les deux sens de marche en même temps, ce serait trop simple.

Bref. Je prie vraiment pour que @pgrimaud mette à jour son API, parce que c'est la seule décente à disposition.
Si y'a les devs de l'API de IDFM qui passent par ici, je vous en veux pas. Je sais que vous avez dû suivre les ordres venant de 40 personnes différentes disant toutes quelque chose de différent. J'en veux à votre hiérarchie. Et pas qu'un peu.

@oudoulj
Copy link
Author

oudoulj commented Oct 9, 2022

Alors, j'ai lu le tutorial de PRIM et j'ai tenté un appel dans Postman pour déjà m'assurer de l'url et des headers.
Malheureusement je n'arrive pas à obtenir autre chose qu'une 404 😞
Je ne sais pas notamment si, dans les headers, je dois passer
apikey : [MY-API-KEY]
ou
authorization : [MY-API-KEY]
comme sur la doc Home Assistant.

prim_postman01

Du coup, moi aussi, j'espère que @pgrimaud pourra faire l'update pour nous simplifier la vie ! 😁

@Cqoicebordel
Copy link

Essaye en utilisant https://prim.iledefrance-mobilites.fr/fr/donnees-dynamiques/idfm-ivtr-requete_unitaire?type=k&apiId=idfm-ivtr-requete_unitaire avec l'"Assistant requêtage", c'est beaucoup plus simple
image

Et il semble indiquer qu'il faut utiliser apiKey (en tout cas, c'est ce qu'il fait en regardant dans l'onglet réseau des devtools).

@oudoulj
Copy link
Author

oudoulj commented Oct 9, 2022

Merci, je viens de tester pour mon Bus 120 en cliquant Try out puis en copiant STIF:StopPoint:Q:9541: dans le champ MonitoringRef puis Execute, ça renvoie bien
"ExpectedDepartureTime": "2022-10-09T22:10:54.000Z", (UTC)

J'ai pu récupérer le code 9541 depuis l'url obtenue en remplissant les champs 1 par 1 sur cette page.

Parallèlement j'ai trouvé cette intégration
https://github.com/lesensei/idfm-card
J'ai presque réussi à l'installer (via HACS ok) mais pas la carte finale telle que montrée en screenshot en haut de page.
Le mieux que j'ai obtenu est l'intégration elle-même avec 5 sensors mais la carte est introuvable 🤷 (malgré installation manuelle du fichier de ressources + restart de HA)

sensei01

sensei02

sensei03

type: entities
entities:
  - sensor.idfm_bry_sur_marne_rer_bry_sur_marne_nogent_sur_marne_rer_0
  - sensor.idfm_bry_sur_marne_rer_bry_sur_marne_nogent_sur_marne_rer_1
  - sensor.idfm_bry_sur_marne_rer_bry_sur_marne_nogent_sur_marne_rer_2
  - sensor.idfm_bry_sur_marne_rer_bry_sur_marne_nogent_sur_marne_rer_3
title: 120 / RATP - Bry-sur-Marne RER - Bry-sur-Marne -> NOGENT-SUR-MARNE RER

@vjau
Copy link

vjau commented Oct 11, 2022

J'ai un peu joué avec l'api ratp au mois de septembre, et le plus "drôle" c'est que le format des réponses n'est pas stable...

@ooii
Copy link

ooii commented Oct 11, 2022

Ça ne m'étonne pas du tout de la part de la RATP/STIF/IDFM de nous pourrir la vie comme ça. En 2005, j'avais fait un widget OS X pour afficher les temps de passage. À l'époque, pas d'API dispo pour récupérer les infos, je parsais les pages web à la main, en utilisant les balises HTML des couleurs. Et, je le sais d'une source interne, l'équipe changeait les codes couleur ou rajoutait des balises similaires pour casser mon widget.

@pgrimaud
Copy link
Owner

Je vais essayer de voir comment corriger tout ça, la semaine prochaine. 👌

@Cqoicebordel
Copy link

Cqoicebordel commented Oct 12, 2022

En vrai, je pense qu'utiliser l'API utilisée par IDFM Mobilité sur ses pages (https://me-deplacer.iledefrance-mobilites.fr/fiches-horaires/metro/line%3AIDFM%3AC01373/horaires?date=2022-10-12T14%3A27&stopId=stop_area%3AIDFM%3A71801) serait mille fois plus pratique.
Genre, un curl https://api-iv.iledefrance-mobilites.fr/lines/v2/line:IDFM:C01373/stops/stop_area:IDFM:71801/realTime pour la station Parmentier renvoie un JSON simple, utilisable, avec toutes les infos nécessaires. Y'a même pas besoin de clé API, c'est dire…

@oudoulj
Copy link
Author

oudoulj commented Oct 14, 2022

En vrai, je pense qu'utiliser l'API utilisée par IDFM Mobilité sur ses pages (https://me-deplacer.iledefrance-mobilites.fr/fiches-horaires/metro/line%3AIDFM%3AC01373/horaires?date=2022-10-12T14%3A27&stopId=stop_area%3AIDFM%3A71801) serait mille fois plus pratique. Genre, un curl https://api-iv.iledefrance-mobilites.fr/lines/v2/line:IDFM:C01373/stops/stop_area:IDFM:71801/realTime pour la station Parmentier renvoie un JSON simple, utilisable, avec toutes les infos nécessaires. Y'a même pas besoin de clé API, c'est dire…

Ah oui, énorme !
Je viens de renseigner les infos pour ma ligne de bus sur
https://me-deplacer.iledefrance-mobilites.fr/fiches-horaires/bus/line%3AIDFM%3AC01149/horaires?date=2022-10-14T21%3A41&direction=-1&line=line%3AIDFM%3AC01149%7C%7C120%7CBus%7C&point=stop_area%3AIDFM%3A73166%7CStopArea%7CBry-sur-Marne%7C94360%7CBry-sur-Marne%7C613912.491510892%7C2427377.848770513%7C94015&stopAreaId=stop_area%3AIDFM%3A73166&stopId=stop_point%3AIDFM%3A9541&transporter
puis j'ai choppé le call dans l'onglet Network des dev tools
https://api-iv.iledefrance-mobilites.fr/lines/v2/line:IDFM:C01149/stops/stop_area:IDFM:73166/realTime
Plus qu'à parser le json pour extraire les 2 time qui m'intéressent 😄

@Dev1323
Copy link

Dev1323 commented Oct 24, 2022

Hello, comment tu récupères l"ID de ton arrêt ? y'a un lien pour faire le mapping? merci

@anthony-acremann
Copy link

anthony-acremann commented Oct 24, 2022

Hello, comment tu récupères l"ID de ton arrêt ? y'a un lien pour faire le mapping? merci

Hello,
j'ai suivi ce qu'a indiqué Jérôme juste au-dessus, et ça a été OK pour moi. Merci à lui d'ailleurs.
Tu peux donc te servir du portail IDF mobilités > Me déplacer > Horaires,
cliquer sur Bus, remplir les infos (tu es obligé de renseigner un arrêt, mais tu pourras changer après) et cliquer sur Rechercher.
A partir de là, tu cliques sur la direction qui t'intéresse sur la ligne de Bus qui a été trouvée, puis tu utilises la section "Consulter les horaires à un arrêt" pour avoir les horaires en temps réel, à chaque fois que tu sélectionnes un arrêt et que tu cliques sur Rechercher, un coup de dev tools pour voir les requêtes et c'est l'URL qui finit par realtime qui contient les prochains passages. De ce que je comprends, l'arrêt sélectionné se retrouve dans l'URL (stop_area:XXXX).
Si tu veux les IDs de tous les arrêts, faut itérer... ou alors j'imagine qu'ils ont un dataset accessible pour chaque ligne avec les IDs des arrêts.

@Cqoicebordel
Copy link

Cqoicebordel commented Oct 24, 2022

Sinon, y'a la liste des arrêts avec leurs différents ID dans https://prim.iledefrance-mobilites.fr/fr/donnees-statiques/emplacement-des-gares-idf-data-generalisee
(onglet tableau, rechercher la station, et utiliser le id_ref_lda. La colonne idrligc contient l'identifiant de la ligne de transport)

Ca c'est pour le réseau ferré. Pour les bus, faut soit suivre la méthode d'Anthony juste au dessus, soit télécharger les données (que j'arrive pas à retrouver). La dernière fois que j'avais creusé, y'avait plusieurs fichiers dans un zip, qui contenait toutes les infos. Le nom du truc était du genre BTRF, mais j'arrive pas à retrouver (et j'ai pas trop le temps juste là).
Bref, comme toujours, c'est la merde.

EDIT : J'ai retrouvé, il s'agissait de GTFS. Vous pouvez trouver le fichier là : https://data.iledefrance-mobilites.fr/explore/dataset/offre-horaires-tc-gtfs-idfm/table/
Et après, faut explorer, et vous pourrez, éventuellement, trouver votre bonheur.

@oudoulj
Copy link
Author

oudoulj commented Nov 8, 2022

J'utilise avec succès les sensors de l'intégration idfm-card que j'ai mentionnée plus haut mais j'aurais bien aimé réussir à extraire aussi ces horaires directement depuis l'url de ile de france mobilités

Ma question sur la communauté HA n'attire pas les foules 😿
https://community.home-assistant.io/t/syntax-for-value-template-in-rest-sensor-from-json-returned-by-api/476140

@oudoulj
Copy link
Author

oudoulj commented Dec 18, 2022

Quelque chose a changé il y a qq jours (semaine du 12 déc ?) sur le retour du call API que j'utilise pour récupérer les prochains stops (voir ci-dessus msg en octobre).
https://api-iv.iledefrance-mobilites.fr/lines/v2/line:IDFM:C01149/stops/stop_area:IDFM:73166/realTime
renvoie errorMessage : "NO_REALTIME_SCHEDULES_FOUND"
ce qui rend l'intégration idfm inutilisable 😿

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants