Avant de poursuivre cette section, si vous ne l'avez pas déjà fait, vérifiez les systèmes de micromobilité compatibles pour lesquels vous créez le flux.
Dans les sections suivantes, chaque en-tête a le format suivant : Required|Optional|Conditionally required: Feed name (System supported)
. Les systèmes suivants sont compatibles:
- Système sur station d'accueil
- Système sans station
- Système sur station d'accueil
Pour une intégration réussie avec Google, fournissez uniquement les fichiers nécessaires au système décrit par votre flux et spécifiez les champs obligatoires inclus dans les sections concernées. Pour les champs obligatoires, reportez-vous à la description des champs. Vous pouvez également spécifier des champs facultatifs qui ajoutent des informations et offrent une meilleure expérience utilisateur.
En-tête requis pour les flux de micromobilité
Les flux de micromobilité sont des flux contenant des données structurées Micromobility, telles que définies dans cet article.
Tous les flux doivent toujours spécifier les champs inclus dans le tableau suivant au niveau supérieur de l'objet JSON, également appelés en-tête GBFS commun.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
last_updated |
Code temporel | Obligatoire | Un horodatage POSIX, qui spécifie le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC.
Définissez la date et l'heure de la dernière mise à jour des données du flux. |
ttl |
Entier non négatif | Obligatoire | Entier non négatif représentant le nombre de secondes restant avant la mise à jour du flux.
Si les données doivent être mises à jour à un taux constant, définissez cette valeur sur |
data |
JSON | Obligatoire | JSON contenant les champs de données du flux individuel. |
Par exemple, un flux free_bike_status.json
agrégé qui spécifie l'en-tête GBFS commun peut se présenter comme suit:
{
"ttl": 30,
"last_updated": 1576123774,
"data": {
"bikes": [ ... ] // GBFS free bike status objects.
}
}
Obligatoire: system_information.json (système ancré et sans station)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux fournit des informations sur l'opérateur système.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
system_id |
ID | Obligatoire | Identifiant unique du système de partage de véhicules. Cette valeur est destinée à rester identique pendant toute la durée de vie du système. Chaque système ou zone géographique dans lesquels les véhicules sont exploités DOIT disposer de son propre identifiant système. Les ID système DOIVENT être reconnus comme appartenant à un système particulier, et non à des chaînes aléatoires (par exemple, bcycle_austin ou biketown_pdx). |
name |
String | Obligatoire | Nom du système, présenté aux clients. |
rental_apps |
Objet | Obligatoire | Objet JSON contenant les informations sur l'application de location pour Android et iOS dans leurs champs respectifs. |
rental_apps.android |
Objet | Conditionally required |
Contient des informations sur les téléchargements et la découverte d'applications pour la plate-forme Android dans les champs store_uri et discovery_uri . Si le fournisseur du système possède une application de location Android, ce champ est obligatoire.
|
rental_apps.android.store_uri |
URI | Obligatoire | URI à partir duquel l'application Android à louer peut être téléchargée. Il s'agit généralement d'un URI vers une plate-forme de téléchargement d'applications telle que Google Play. Si l'URI pointe vers une plate-forme de téléchargement d'applications telle que Google Play, nous vous recommandons de suivre les bonnes pratiques d'Android afin que l'application de visualisation puisse directement ouvrir l'URI à l'application native de la plate-forme de téléchargement plutôt qu'à un site Web. |
rental_apps.android.discovery_uri |
URI | Obligatoire | URI au format your_custom_scheme://your/path/here .
L'URI peut être utilisé par PackageManager.queryIntentActivities() pour savoir si l'application de location Android est installée sur l'appareil.
|
rental_apps.ios |
Objet | Conditionally required | Contient des informations sur le téléchargement et la découverte d'applications pour la plate-forme iOS dans les champs store_uri et discovery_uri . Ce champ est obligatoire si le fournisseur du système possède une application de location iOS.
|
rental_apps.ios.store_uri |
URI | Obligatoire | URI à partir duquel l'application iOS de location peut être téléchargée. Il s'agit généralement d'un URI d'une plate-forme de téléchargement d'applications, comme l'App Store d'Apple. Si l'URI pointe vers une plate-forme de téléchargement d'applications telle que l'App Store d'Apple, nous vous recommandons de suivre les bonnes pratiques iOS afin que l'application de visualisation puisse directement ouvrir l'URI à l'application native de la plate-forme de téléchargement plutôt qu'à un site Web. |
rental_apps.ios.discovery_uri |
URI | Obligatoire | URI au format your_custom_scheme:// . L'URI peut être utilisé par UIApplication canOpenURL: pour savoir si l'application de location iOS est installée sur l'appareil.
|
Obligatoire: free_bike_status.json (Système sans console)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit les établissements et les attributs des véhicules autonomes disponibles. Pour des raisons de confidentialité, les véhicules faisant partie d'une location active ne doivent pas apparaître dans ce flux.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
bikes |
Array | Obligatoire | Tableau des vélos arrêtés actuellement disponibles, où chaque vélo est un objet. |
bikes[].bike_id |
ID | Obligatoire | Identifiant d'un vélo.
Pour protéger la confidentialité, l'ID peut être remplacé par une chaîne aléatoire après chaque trajet. |
bikes[].lat |
Latitude | Obligatoire | Latitude WGS 84 du vélo, en degrés décimaux. |
bikes[].lon |
Longitude | Obligatoire | Longitude WGS 84 du vélo, en degrés décimaux. |
bikes[].is_reserved |
Booléen | Obligatoire | Indique si le vélo est actuellement réservé, comme suit :
|
bikes[].is_disabled |
Booléen | Obligatoire | Indique si le vélo est actuellement désactivé ou cassé, comme suit :
|
bikes[].rental_uris |
Objet | Obligatoire | Objet JSON contenant des URI de location pour Android, iOS et le Web dans leurs champs respectifs. |
bikes[].rental_uris.android |
URI | Conditionally required | Un URI qui peut être transmis à une application Android avec un intent Android android.intent.action.VIEW pour accepter les liens profonds Android. Le rental_uris fourni doit être un lien vers l'application Android. Ainsi, l'application de visualisation n'a pas besoin de gérer manuellement la redirection de l'utilisateur vers la plate-forme de téléchargement d'applications si l'application du fournisseur n'est pas installée.
Cet URI doit être un lien profond spécifique à un vélo, et non une page de location générale incluant des informations sur plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir le vélo, même s'ils n'ont jamais ouvert l'application. Les URI ne sont pas nécessairement obligatoires pour inclure le Ce champ est obligatoire si le partenaire propose une application de location Android. Exemple de liens vers une application Android:
|
bikes[].rental_uris.ios |
URI | Conditionally required | URI qui peut être utilisé sur iOS pour lancer l'application de location du vélo.
Pour en savoir plus à ce sujet, consultez l'article d'Apple sur les schémas d'URL personnalisés iOS.
Le rental_uris fourni doit être un lien universel iOS. Ainsi, l'application de visualisation n'a pas besoin de gérer manuellement la redirection de l'utilisateur vers la plate-forme de téléchargement d'applications si l'application du fournisseur n'est pas installée.
Cet URI doit être un lien profond spécifique à un vélo, et non une page de location générale incluant des informations sur plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir le vélo, même s'ils n'ont jamais ouvert l'application. Les URI ne sont pas nécessairement obligatoires pour inclure l'identifiant "bike_id" du vélo, à condition que le partenaire dispose d'autres moyens d'identifier le vélo. Par exemple, l'application de location peut utiliser d'autres identifiants dans l'URI pour identifier le vélo de manière unique. Ce champ est obligatoire si le partenaire propose une application de location iOS. Exemple de liens universels iOS:
|
bikes[].rental_uris.web |
URL | Facultative | URL permettant à un navigateur Web d'afficher plus d'informations sur la location d'un véhicule dans ce véhicule. Cette URL doit être un lien profond spécifique au vélo en question, et non une page de location générale incluant des informations sur plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir le vélo, même s'ils n'ont jamais ouvert l'application. Les URL ne doivent pas nécessairement inclure le Si ce champ n'est pas défini, cela signifie que les liens profonds ne sont pas acceptés par le navigateur Web. Exemple de valeur :
|
bikes[].vehicle_type_id |
ID | Obligatoire | vehicle_type_id du véhicule, comme décrit dans la section vehicle_types.json .
|
bikes[].pricing_plan_id |
ID | Obligatoire | Identifiant du forfait appliqué lors de la location de ce type de véhicule, comme décrit dans la section system_pricing_plans.json .
|
bikes[].current_range_meters |
Flottant non négatif | Conditionally required | Si la définition vehicle_type correspondant au véhicule dispose d'un moteur, ce champ est obligatoire.
Distance la plus éloignée (en mètres) que le véhicule peut parcourir sans nécessiter de recharge ni de carburant, en fonction du niveau de charge ou du carburant actuel du véhicule. |
bikes[].last_reported |
Code temporel | Facultative | Défini sur la dernière fois que le véhicule a signalé son état au backend de l'opérateur. |
Voici un exemple pour free_bike_status.json
:
"bikes": [{
"bike_id": "xyz123",
"lat": 12.34,
"lon": 56.78,
"is_reserved": true,
"is_disabled": false,
"rental_uris":{
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.example.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890"
},
"vehicle_type_id": "scooter_electric",
"pricing_plan_id": "sydneyPlan1",
"current_range_meters": 4500,
"last_reported": 1434054678
},
{
"bike_id": "abc123",
"lat": 1.34,
"lon": 146.78,
"is_reserved": false,
"is_disabled": true,
"rental_uris":{
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.example.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890"
},
"vehicle_type_id": "bike_manual",
"pricing_plan_id": "sydneyPlan1",
"last_reported": 1434054241
}
]
Obligatoire: vehicle_types.json (système ancré et sans station)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit les détails des différents types de véhicules, comme indiqué dans la section free_bike_status.json
.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
vehicle_types |
Array | Obligatoire | Tableau d'objets, dans lequel chaque objet définit un type de véhicule distinct dans le catalogue du fournisseur. Il ne peut y avoir qu'un seul objet par type de véhicule. |
vehicle_types[].vehicle_type_id |
ID | Obligatoire | Identifiant unique pour un type de véhicule donné. |
vehicle_types[].form_factor |
Enum | Obligatoire | Énumération représentant le facteur de forme générale du véhicule à partir de la liste suivante de valeurs actuellement valides :
|
vehicle_types[].propulsion_type |
Enum | Obligatoire | Énumération représentant le type de propulsion principal du véhicule, à partir de la liste suivante de valeurs actuellement valides :
|
vehicle_types[].max_range_meters |
Flottant non négatif | Conditionally required | Si propulsion_type n'est pas défini sur human , le véhicule est équipé d'un moteur. Ce champ est donc obligatoire.
Définissez la distance maximale (en mètres) que le véhicule peut parcourir sans qu'il soit nécessaire de le recharger ou de le recharger, lorsqu'il est complètement alimenté ou complètement chargé. |
Voici un exemple pour vehicle_types.json
:
"vehicle_types": [
{
"vehicle_type_id": "bike_manual",
"form_factor": "bicycle",
"propulsion_type": "human"
},
{
"vehicle_type_id": "scooter_electric",
"form_factor": "scooter",
"propulsion_type": "electric",
"max_range_meters": 10000
}
]
Obligatoire: system_pricing_plans.json (système sans console)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit les forfaits pour les véhicules autonomes. Nous exigeons des fournisseurs qu'ils affichent les informations tarifaires pour les véhicules autonomes.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
plans |
Array | Obligatoire | Tableau d'objets dans lequel chaque objet définit un forfait donné. |
plans[].plan_id |
ID | Obligatoire | Chaîne représentant un identifiant unique pour le forfait proposé par le fournisseur. |
plans[].url |
URL | Facultative | URL qui redirige les utilisateurs finaux vers plus d'informations sur le forfait. |
plans[].currency |
String | Obligatoire | Norme ISO 4217 pour le forfait. |
plans[].price |
Flottant non négatif | Obligatoire |
Le forfait doit être défini comme un forfait sans note ou un tarif préférentiel:
|
plans[].per_km_pricing |
Array | Conditionally required |
Si le prix est fonction de la distance parcourue, exprimé en kilomètres, ce champ est obligatoire. Tableau d'objets dans lequel chaque objet définit un segment de distance donné. La valeur Pour déterminer le prix total d'un forfait donné, ajoutez la valeur Si ce champ n'est pas défini, il n'y a pas de prix variable basé sur la distance. Par conséquent, aucun n'est inclus dans le prix total. |
plans[].per_km_pricing[].start |
Entier non négatif | Obligatoire |
Nombre de kilomètres auxquels le tarif du segment commence à être facturé.
Ce champ est défini sur la valeur inclusive qui démarre la plage du segment. Ainsi, une fois le nombre de kilomètres écoulé, rate est facturé une fois.
|
plans[].per_km_pricing[].rate |
Nombre décimal | Obligatoire | Tarif facturé pour chaque interval , qui commence à la valeur start incluse du segment. Si ce champ est défini sur un nombre négatif, le voyageur reçoit une remise.
|
plans[].per_km_pricing[].interval |
Entier non négatif | Obligatoire |
Intervalle en kilomètres auquel la valeur
Si la valeur Si ce champ est défini sur |
plans[].per_km_pricing[].end |
Entier non négatif | Facultative |
Nombre de kilomètres auquel la valeur Si ce champ n'est pas défini ou est vide, le champ |
plans[].per_min_pricing |
Array | Conditionally required |
Si le prix est fonction du temps écoulé, il est affiché en minutes, ce champ est obligatoire. Tableau d'objets dans lequel chaque objet définit un segment de temps donné. La valeur Pour déterminer le prix total d'un forfait donné, ajoutez la valeur Si ce champ n'est pas défini, aucun prix variable basé sur le temps n'est inclus dans le prix total. |
plans[].per_min_pricing[].start |
Nombre décimal | Obligatoire |
Nombre de minutes auxquelles le tarif du segment commence à être facturé.
Ce champ est défini sur la valeur inclusive qui démarre la plage du segment. Ainsi, une fois le nombre défini de minutes écoulé, l'abonnement rate est facturé une fois.
|
plans[].per_min_pricing[].rate |
Nombre décimal | Obligatoire | Tarif facturé pour chaque interval . Le tarif commence à l'start inclus du segment. Si ce champ est défini sur un nombre négatif, le voyageur reçoit une remise.
|
plans[].per_min_pricing[].interval |
Entier non négatif | Obligatoire |
Intervalle en minutes auquel le Le Si la valeur Si ce champ est défini sur |
plans[].per_min_pricing[].end |
Entier non négatif | Facultative |
Durée, en minutes, à laquelle le Si ce champ n'est pas défini ou est vide, le champ |
Exemples pour system_pricing_plans.json
Cette section fournit des exemples de code system_pricing_plans.json
informatifs. Des détails et des résultats pertinents sont également fournis pour chaque exemple.
Exemple 1 pour system_pricing_plans.json
L'exemple de code de forfait suivant indique les frais en fonction du temps de trajet pour les intervalles suivants:
- [0,1] : 2 €
- Si le trajet dure moins d'une minute, l'utilisateur paie 2 USD.
- Exemple: trajet de 59 s
- [1,2): 3 USD
- Si le trajet est plus long ou égal à une minute, mais moins de deux minutes, l'utilisateur paie 2 $+ 1 $= 3 $.
- Exemples: trajet d'une minute ; trajet d'une minute de 45 secondes
- x minutes où x est supérieur ou égal à 2 :
3 € + ((2 € + 1 €) * (x - 2 + 1)
USD
- Si le trajet dure moins de deux minutes ou est égal à deux minutes, l'utilisateur paie 3 $pour la partie du trajet moins de deux minutes et (1 $ [poursuite de la première entrée de la liste
per_min_pricing
] + 2 $ [deuxième entrée de la listeper_min_pricing
]) pour chaque minute après et toutes les deux minutes. - Exemples :
- Tarif de 2 min pour 3 $+ (2 $ + 1 $) = 6 $
- Trajet de 3 minutes : 2 min, coût : 3 $+ (2 $ + 1 $) = 6 $
- Tarif de 3 min pour 3 $+ ((2 $ + 1 $) * 2) = 9 $
- Coût du trajet de 10 minutes : + 3 € ((2 € + 1 €) x 9) = 30 €
- Si le trajet dure moins de deux minutes ou est égal à deux minutes, l'utilisateur paie 3 $pour la partie du trajet moins de deux minutes et (1 $ [poursuite de la première entrée de la liste
{
"plans": {
"plan_id": "plan1",
"currency": "USD",
"price": 2,
"per_min_pricing": [
{
"interval": 1,
"rate": 1,
"start": 1
},
{
"interval": 1,
"rate": 2,
"start": 2
}
],
}
}
Exemple 2 pour system_pricing_plans.json
Dans cet exemple, nous présentons un exemple de code pour un forfait dont le tarif est calculé à la fois en minutes et en kilomètres:
- Plus précisément, l'utilisateur final est facturé 0,25 CAD par km et 0,50 CAD par minute.
- Ces deux taux se produisent simultanément et ne dépendent pas l'un de l'autre.
- Par conséquent, un trajet d'un kilomètre de 10 minutes coûte 9 CAD. Les coûts sont répartis comme suit :
- 3 $, prix de base
- 0,25 € * 2, facturé une fois au début du trajet et une fois au niveau du repère de 1 km.
- 0,5 € x 11, facturé une fois au début de chaque minute. Les frais commencent à 0 seconde, le dernier intervalle étant facturé à 10 minutes.
{
"plans": {
"plan_id": "plan2",
"currency": "CAD",
"price": 3,
"per_km_pricing": [{
"start": 0,
"rate": 0.25,
"interval": 1
}],
"per_min_pricing": [{
"start": 0,
"rate": 0.50,
"interval": 1
}]
}
}
Obligatoire sous certaines conditions: geofencing_zones.json (système ancré et sans station)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit les données de géorepérage des véhicules autonomes. Les données de géorepérage incluent les limites géographiques indiquant où les véhicules sont autorisés à commencer et à terminer la course, ainsi que la vitesse à laquelle les véhicules peuvent circuler. Il s'agit soit de la vitesse maximale du véhicule, soit de la limitation de vitesse de la route sur laquelle le véhicule est situé, selon la valeur la plus basse. Les conducteurs doivent respecter les lois et règlements locaux.
Nous utilisons ces données afin que, lorsqu'un utilisateur recherche un itinéraire donné, si la fin du trajet ne se trouve pas dans les zones de géorepérage spécifiques, le résultat Micrimobility soit filtré. Si les zones de géorepérage ne sont pas fournies, Google traite ce service comme s'il n'était soumis à aucune limite.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
geofencing_zones |
Objet | Obligatoire | Un objet FeatureCollection , comme décrit dans la RFC 7946 de l'IETF, est un objet doté d'un champ nommé features . La valeur de features est un tableau JSON.
Chaque élément du tableau JSON est un objet Feature .
Chaque zone délimitée, ainsi que ses règles et attributs associés, ainsi que les définitions de |
geofencing_zones.type |
String | Obligatoire | Définissez la valeur sur FeatureCollection , comme décrit dans la RFC 7946 de l'IETF. |
geofencing_zones.features |
Array | Obligatoire | Un tableau JSON, où chaque élément du tableau JSON est un objet Feature . |
geofencing_zones.features[].type |
String | Obligatoire | Définissez la valeur sur Feature , comme décrit dans la RFC 7946 de l'IETF. |
geofencing_zones.features[].geometry |
Multipolygone GeoJSON | Obligatoire | Multipolygon GeoJSON qui indique où les courses ne peuvent pas commencer, se terminer et se terminer, en plus d'autres limites. La disposition des points dans le sens des aiguilles d'une montre définit la zone entourée par le polygone, tandis qu'un ordre inverse des aiguilles d'une montre définit la zone en dehors du polygone. Pour plus d'informations à ce sujet, reportez-vous à la règle de droite. |
geofencing_zones.features[].properties |
Objet | Obligatoire | Objet qui définit les remises et les limites applicables aux déplacements. |
geofencing_zones.features[].properties.rules |
Array | Facultative | Tableau d'objets, dans lequel chaque objet définit une seule règle. En cas de chevauchement, de conflit ou d'autres conflits d'une manière ou d'une autre, la règle définie dans l'ordre du fichier JSON est prioritaire. |
geofencing_zones.features[].properties.rules[].vehicle_type_id |
Array | Facultative | Tableau des ID de types de véhicules, où chaque élément correspond à un vehicle_type_id , pour lesquels des restrictions doivent être appliquées.
Si aucun vehicle_type_id n'est spécifié, les restrictions s'appliquent à tous les types de véhicules. |
geofencing_zones.features[].properties.rules[].ride_allowed |
Booléen | Obligatoire | Si la sortie du vélo"détachée"peut commencer et se terminer dans la zone, comme suit :
|
Voici un exemple pour geofencing_zones.json
:
"geofencing_zones":{
"type":"FeatureCollection",
"features":[{
"type":"Feature",
"properties":{
"rules":[{
"vehicle_type_id":"scooter",
"ride_allowed": false
}]
},
"geometry":{
"type":"MultiPolygon",
"coordinates":[[[
[-122.66780376434326, 45.49896266763551],
[-122.66810417175292, 45.49824825558575],
[-122.66830801963805, 45.49632305799116],
[-122.66780376434326, 45.49896266763551]
]]]
}
}]
}
Obligatoire: station_information.json (système ancré)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit les informations générales sur les stations de vélos en libre-service.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
stations |
Array | Obligatoire | Tableau d'objets dans lequel chaque objet définit une et une seule station. |
stations[].station_id |
String | Obligatoire | Identifiant de la station. |
stations[].name |
String | Obligatoire |
Nom public de la station dans la langue locale de la ville où elle se trouve. L'élément name doit respecter les attributs utilisés sur les panneaux de la station, le cas échéant. Il doit également refléter l'emplacement de la station à l'aide d'un croisement ou d'un point de repère local.
N'utilisez pas d'abréviations telles que "St." pour "Street" sauf si elles sont explicitement utilisées dans les panneaux de signalisation. name doit également respecter les conventions locales d'utilisation des majuscules et des noms des lieux, et non tout en majuscules.
|
stations[].lat |
Latitude | Obligatoire | Latitude WGS 84 de la station, en degrés décimaux. |
stations[].lon |
Longitude | Obligatoire | Longitude WGS 84 de la station, en degrés décimaux. |
stations[].capacity |
Entier non négatif | Facultative | Entier non négatif représentant le nombre total de points d'ancrage installés à la station, à la fois disponibles et indisponibles. |
stations[].rental_uris |
Objet | Obligatoire |
Objet JSON contenant des URI de location pour Android, iOS et le Web dans leurs champs respectifs. Si ces URI sont spécifiés, ils remplacent les liens profonds par défaut définis lors de l'intégration du fournisseur. |
stations[].rental_uris.android |
URI | Conditionally required |
Un URI qui peut être transmis à une application Android avec un intent Android Cet URI doit être un lien profond spécifique à la station individuelle, et non une page de location générale incluant des informations pour plusieurs stations. Le lien profond doit rediriger l'utilisateur directement vers la station sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir la station, même s'ils n'ont jamais ouvert l'application. Les URI ne sont pas nécessairement obligatoires pour inclure l'identifiant Ce champ est obligatoire si le partenaire propose une application de location Android. Exemple de liens vers une application Android:
|
stations[].rental_uris.ios |
URI | Conditionally required |
URI qui peut être utilisé sur iOS pour lancer l'application de location pour la station.
Pour en savoir plus à ce sujet, consultez l'article d'Apple sur les schémas d'URL personnalisés iOS.
Le Cet URI doit être un lien profond spécifique à la station individuelle, et non une page de location générale incluant des informations pour plusieurs stations. Le lien profond doit rediriger l'utilisateur directement vers la station sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir la station, même s'ils n'ont jamais ouvert l'application. Les URI ne doivent pas nécessairement inclure le Ce champ est obligatoire si le partenaire propose une application de location iOS. Exemple de liens universels iOS:
|
stations[].rental_uris.web |
URL | Facultative | URL permettant à un navigateur Web d'afficher plus d'informations sur la location d'un véhicule à cette station. Cette URL doit correspondre à un lien profond propre à la station. Il ne doit pas s'agir d'une page de location générale incluant des informations pour plusieurs stations. Le lien profond doit rediriger l'utilisateur directement vers la station sans invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir la station même s'ils n'ont jamais ouvert l'application. Les URL ne doivent pas nécessairement inclure le Si ce champ n'est pas défini, les liens profonds ne sont pas acceptés par le navigateur Web. Exemple de valeur :
|
Voici un exemple pour station_information.json
:
"stations": [
{
"station_id": "597",
"name": "Silverthorne Road, Battersea",
"lat": 51.472865,
"lon": -0.148059,
"capacity": 10,
"rental_uris": {
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.exampleexample.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890&platform=web"
}
},
]
Obligatoire: station_status.json (système ancré)
Reportez-vous à la spécification GBFS si nécessaire.
Ce flux définit l'état actuel des stations de vélos en libre-service.
Field name | Type | Obligatoire/Facultatif | Description |
---|---|---|---|
stations |
Array | Obligatoire | Tableau d'objets, dans lequel chaque objet définit une seule station. |
stations[].station_id |
String | Obligatoire | Identifiant de la station. |
stations[].num_bikes_available |
Entier non négatif | Obligatoire |
Entier non négatif représentant le nombre de vélos fonctionnels disponibles physiquement à la station et pouvant être loués. Pour déterminer si la station loue actuellement des vélos, vous devez inspecter le champ |
stations[].vehicle_types_available |
Array | Facultative |
Tableau d'objets qui définit le nombre total de véhicules, classés par type de véhicule dans une station. Chaque objet modélise le nombre total de véhicules pour le type de véhicule associé. Le nombre total de véhicules pour chacun de ces objets doit être égal à la valeur spécifiée dans le champ |
stations[].vehicle_types_available[].vehicle_type_id |
ID | Obligatoire |
|
stations[].vehicle_types_available[].count |
Entier non négatif | Obligatoire |
Nombre total de véhicules disponibles pour le |
stations[].num_docks_available |
Entier non négatif | Conditionally required |
Ce champ est obligatoire, sauf si la station dispose d'une capacité d'accueil illimitée. Par exemple, les stations virtuelles disposent d'une capacité d'accueil illimitée et le champ n'est pas obligatoire. Entier non négatif qui représente le nombre total de stations fonctionnelles qui se trouvent physiquement à la station et sont en mesure d'accepter les retours de véhicules. Pour déterminer si la station accepte actuellement les retours à vélo, vous devez inspecter le champ |
stations[].is_installed |
Booléen | Obligatoire |
Booléen indiquant si la station se trouve actuellement dans la rue et qu'elle est installée. Si la station est installée dans la rue, définissez la valeur sur Si la station n'est pas installée dans la rue, définissez la valeur sur |
stations[].is_renting |
Booléen | Obligatoire |
Booléen indiquant si la station loue actuellement des vélos. Si la station loue actuellement des vélos, définissez-la sur Si la station ne loue pas de vélos, sélectionnez |
stations[].is_returning |
Booléen | Obligatoire |
Booléen indiquant si la station accepte actuellement les retours de vélo. Si la station accepte actuellement les retours à vélo, définissez la valeur sur Si la station n'accepte pas les retours de vélo, définissez-la sur |
Voici un exemple de propriété station_status.json
:
"stations": [
{
"station_id": "2",
"num_bikes_available": 6,
"vehicle_types_available": [
{
"vehicle_type_id" : "scooter_electric",
"count" : 2
},
{
"vehicle_type_id" : "bike_manual",
"count" : 4
}
],
"num_docks_available": 30,
"is_installed": true,
"is_renting": true,
"is_returning": true,
"last_reported": 1576119631
},
]