pgrimaud / horaires-ratp-api

Webservice pour les horaires et trafic RATP en temps réel
https://api-ratp.pierre-grimaud.fr/v4
MIT License
269 stars 30 forks source link

Appels renvoient Internal Server Error 500 #112

Open oudoulj opened 1 year ago

oudoulj commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

Ç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 commented 1 year ago

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

Cqoicebordel commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

Hello, comment tu rĂ©cupĂšres l"ID de ton arrĂȘt ? y'a un lien pour faire le mapping? merci

anthony-acremann commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 😿