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;