## Ressources Stations et Parkings ### Stations Les stations sont représentées de la façon suivante : ```json { "number": 123, "contractName" : "Lyon", "name": "nom station", "address": "adresse indicative", "position": { "latitude": 45.774204, "longitude": 4.867512 }, "banking": true, "bonus": false, "status": "OPEN", "lastUpdate": "2019-04-08T12:23:34Z", "connected": true, "overflow": true, "shape": null, "totalStands": { "availabilities": { "bikes": 15, "stands": 7, "mechanicalBikes": 10, "electricalBikes": 5, "electricalInternalBatteryBikes": 0, "electricalRemovableBatteryBikes": 5 }, "capacity": 40 }, "mainStands": { "availabilities": { "bikes": 15, "stands": 7, "mechanicalBikes": 10, "electricalBikes": 5, "electricalInternalBatteryBikes": 0, "electricalRemovableBatteryBikes": 5 }, "capacity": 40 }, "overflowStands": null } ``` On peut distinguer 2 parties, les données statiques et les données dynamiques. #### Données statiques * `number` le numéro de la station. Attention, ce n'est pas un id, ce numéro n'est unique qu'au sein d'un contrat * `contractName` le nom du contrat de cette station * `name` le nom de la station * `address` adresse indicative de la station, les données étant brutes, parfois il s'agit plus d'un commentaire que d'une adresse. * `position` les coordonnées au format WGS84 * `banking` indique la présence d'un terminal de paiement * `bonus` indique s'il s'agit d'une station bonus * `overflow` indique si la station accepte le repose de vélos en overflow * `shape` non utilisé pour l'instant #### Données dynamiques * `status` indique l'état de la station, peut être `CLOSED` ou `OPEN` * `connected` indique si la station est connectée au système central * `totalStands` indique la capacité totale de la station * `mainStands` indique la capacité physique de la station * `overflowStands` indique la capacité overflow de la station * `availabilities` indique le nombre de place disponibles et le nombre de vélos accrochés par types de vélos * `lastUpdate` timestamp indiquant le moment de la dernière mise à jour ### Contrats Pour chaque agglomération cliente de JCDecaux, un contrat est associé. ```json { "name" : "Lyon", "commercial_name" : "Vélo'v", "country_code" : "FR", "cities" : [ "Lyon", "Villeurbanne", ... ] } ``` * `name` le nom du contrat (son identifiant) * `commercial_name` le nom commercial donné à ce contrat * `country_code` le code (ISO 3166) du pays * `cities` la liste des villes associées au contrat ### Parkings Les parkings sont représentées de la façon suivante : ```json { "contractName": "nantes", "name": "GARE DE PONT ROUSSEAU NORD", "number": 89, "status": "OPEN", "position": { "latitude": 47.1920011, "longitude": -1.5490259 }, "accessType": "FREE_ACCESS", "lockerType": "SINGLE", "hasSurveillance": false, "isFree": true, "address": "Rue de la Gare", "zipCode": "44400", "city": "Rezé", "isOffStreet": true, "hasElectricSupport": false, "hasPhysicalReception": false } ``` Toutes ces données sont statiques : * `contractName` le nom du contrat de ce parking * `name` le nom du parking * `number` le numéro identitifant du parking * `status` son statut ouvert ou fermé * `position` les coordonnées au format WGS84 * `accessType` `FREE_ACCESS` ou `SECURED` indique si l'accès est libre ou sécurisé * `lockerType` `SINGLE` ou `COLLECTIVE` indique si il s'agit d'un parking collectif ou simple * `hasSurveillance` indique si le parking est surveillé * `isFree` indique si il sagit d'un parking gratuit * `address` l'adresse indicative du parking * `zipCode`: le code postal * `city`: la ville * `isOffStreet`: indique si il se trouve en ouvrage ou pas * `hasElectricSupport`: indique si le parking est équipé d'un système de recharge pour VAE * `hasPhysicalReception`: indique si le parking dispose d'un service de reception de la clientèle ## Description de l'API REST Chaque réponse de l'API est propre au type de requête et s'efforce de suivre au mieux le pattern REST. Si le serveur rencontre une erreur lors du traitement de votre requête, vous recevrez une réponse du type : `HTTP/1.1 500 Internal Server Error`. N'oubliez pas d'ajouter votre clé d'API aux requêtes présentées ci-dessous ([voir l'explication](#/opendata?page=getstarted)). ### Consulter la liste des contrats Requête : ``` GET https://api.jcdecaux.com/vls/v3/contracts HTTP/1.1 Accept: application/json ``` Réponse : ``` HTTP/1.1 200 OK Content-Type: application/json [contract_json,contract_json,...] ``` ### Récupérer les infos d'une station Requête : ``` GET https://api.jcdecaux.com/vls/v3/stations/{station_number}?contract={contract_name} HTTP/1.1 Accept: application/json ``` Réponse lorsque la station existe : ``` HTTP/1.1 200 OK Content-Type: application/json station_json ``` Réponse lorsqu'elle n'existe pas : ``` HTTP/1.1 404 Not Found ``` ### Récupérer la liste des stations Requête : ``` GET https://api.jcdecaux.com/vls/v3/stations HTTP/1.1 Accept: application/json ``` Réponse : ``` HTTP/1.1 200 OK Content-Type: application/json [station_json, station_json, ...] ``` ### Récupérer la liste des stations d'un contrat Requête : ``` GET https://api.jcdecaux.com/vls/v3/stations?contract={contract_name} HTTP/1.1 Accept: application/json ``` Réponse lorsque le contrat existe : ``` HTTP/1.1 200 OK Content-Type: application/json [station_json, station_json, ...] ``` Réponse lorsque le contrat n'existe pas : ``` HTTP/1.1 400 Bad Request ``` ### Récupérer la liste des parkings d'un contrat Requête : ``` GET https://api.jcdecaux.com/parking/v1/contracts/{contract_name}/parks HTTP/1.1 Accept: application/json ``` Réponse lorsque le contrat existe : ``` HTTP/1.1 200 OK Content-Type: application/json [park_json, park_json, ...] ``` Réponse lorsque le contrat n'existe pas ou ne dispose pas de l'api parkings : ``` HTTP/1.1 400 Bad Request ``` ### Récupérer les infos d'un parking Requête : ``` GET https://api.jcdecaux.com/parking/v1/contracts/{contract_name}/parks/{park_number} HTTP/1.1 Accept: application/json ``` Réponse lorsque le parking existe : ``` HTTP/1.1 200 OK Content-Type: application/json park_json ``` Réponse lorsque le parking n'existe pas : ``` HTTP/1.1 404 Not Found ```