API Open Data Temps réel de la RATP

Télécharger l’application apex de démo depuis Github.

Pour utiliser l’API API Open Data Temps réel  de la RATP depuis Oracle Apex, c’est à dire depuis une database Oracle, on peut utiliser la méthode suivante:

Appel  d’un service

Liste des stations pour une ligne donnée (RER A dans l’example ci-dessous)

declare
 l_envelope CLOB;
BEGIN

-- Build a SOAP document appropriate for the web service.
 l_envelope := '
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsiv="http://wsiv.ratp.fr" xmlns:xsd="http://wsiv.ratp.fr/xsd">
 <soap:Header/>
   <soap:Body>
     <wsiv:getStations> 
      <wsiv:station>
        <xsd:line>
          <xsd:id>RA</xsd:id>
        </xsd:line>
       </wsiv:station>
     </wsiv:getStations>
   </soap:Body>
</soap:Envelope>
';

apex_web_service.make_request(
 p_url => 'http://opendata-tr.ratp.fr/wsiv/services/Wsiv',
 p_collection_name => 'RATP',
 p_version => '1.2',
 p_envelope => l_envelope );

end;

Le document XML est enregistré dans la colonne nommée XMLTYPE001 d’une collection APEX par la procédure apex_web_service.make_request.

Parsing du résultat

Le résultat est enregistré dans une collection dont le nom, arbitrairement donné, est : ‘RATP’.

Observer que l’on précise des namespaces dans l’appel à la fonction XMLTABLE:

SELECT xt.name Station
FROM apex_collections x,
 XMLTABLE(
     XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS "soapenv",
                    'http://wsiv.ratp.fr' AS "ns2", 
                    default 'http://wsiv.ratp.fr/xsd' 
     ),
     '/soapenv:Envelope/soapenv:Body/ns2:getStationsResponse/ns2:return/stations' PASSING x.xmltype001
     COLUMNS 
        name VARCHAR2(100) PATH 'name/text()'
 ) xt
where collection_name = 'RATP'
order by station

Conclusion

Une fois que les données sont disponibles sous forme de table, il est très simple d’utiliser n’importe quel composant d’Apex pour restituer les informations.


Requete pour obtenir les prochains passages

SELECT xt.codem code, to_date(xt.stationsDates,'YYYYMMDDHH24MI') passage, to_date(xt.stationsDates,'YYYYMMDDHH24MI') delai, xt.direction direction 
FROM apex_collections x,
 XMLTABLE(
 XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS "soapenv",
 'http://wsiv.ratp.fr' AS "ns2",
 default 'http://wsiv.ratp.fr/xsd'
 ),
 '/soapenv:Envelope/soapenv:Body/ns2:getMissionsNextResponse/ns2:return/missions' PASSING x.xmltype001
 COLUMNS 
 stationsDates VARCHAR2(100) PATH 'stationsDates/text()',
 codem VARCHAR2(100) PATH 'code/text()',
 direction VARCHAR2(100) PATH 'direction/sens/text()'
 ) xt
where COLLECTION_NAME='RATPH'
order by passage ASC

Code PLSQL pour obtenir les prochains passages

declare
 l_envelope CLOB;
BEGIN

-- Build a SOAP document appropriate for the web service.
 l_envelope := '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsiv="http://wsiv.ratp.fr" xmlns:xsd="http://wsiv.ratp.fr/xsd">
 <soap:Header/>
 <soap:Body>
 <wsiv:getMissionsNext>
 <wsiv:station>
 <xsd:id>' || :P6_STATIONID ||'</xsd:id>
 <xsd:line>
 <xsd:id>' || :P4_LIGNE ||'</xsd:id>
 </xsd:line>
 <xsd:name></xsd:name>
 </wsiv:station>
 <wsiv:direction> 
 <xsd:sens>*</xsd:sens>
 </wsiv:direction>
 </wsiv:getMissionsNext>
 </soap:Body>
</soap:Envelope>
';apex_web_service.make_request(
 p_url => 'http://opendata-tr.ratp.fr/wsiv/services/Wsiv',
 p_collection_name => 'RATPH',
 p_version => '1.2',
 p_envelope => l_envelope );
end;