Avant de passer à 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 est au format suivant : Required|Optional|Conditionally required: Feed name (System supported)
. Les systèmes suivants sont compatibles :
- Système ancré
- Système sans station d'accueil
- Système avec ou sans station d'accueil
Pour réussir l'intégration à Google, ne fournissez que 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 sous certaines conditions, consultez la description du champ pour obtenir des conseils. Vous pouvez également spécifier des champs facultatifs qui ajoutent des informations et améliorent l'expérience utilisateur.
En-tête requis pour les flux Micromobility
Les flux de micromobilité sont des flux qui contiennent des données structurées de micromobilité avec ou sans station, 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, qui sont collectivement appelés en-tête GBFS commun.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
last_updated |
Horodatage | Obligatoire | Code temporel POSIX, qui spécifie un nombre de secondes 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 restantes avant la mise à jour du flux.
Si les données doivent être mises à jour à un rythme constant, définissez cette valeur sur |
data |
JSON | Obligatoire | JSON contenant les champs de données pour le 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 avec et sans borne)
Si nécessaire, consultez la spécification GBFS.
Ce flux fournit des informations sur l'opérateur du système.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
system_id |
ID | Obligatoire | Identifiant global unique du système de partage de véhicules. Cette valeur est censée rester la même pendant toute la durée de vie du système. Chaque système ou zone géographique distincts dans lesquels les véhicules sont exploités DOIVENT avoir leur propre system_id. Les ID de système DOIVENT être reconnaissables comme appartenant à un système particulier plutôt qu'à des chaînes aléatoires (par exemple, bcycle_austin ou biketown_pdx). |
name |
Chaîne | Obligatoire | Nom du système, visible par les clients. |
rental_apps |
Objet | Obligatoire | Objet JSON contenant les informations de l'application de location pour Android et iOS dans leurs champs respectifs. |
rental_apps.android |
Objet | Obligatoire sous certaines conditions |
Contient des informations sur le téléchargement et la découverte d'applications de location pour la plate-forme Android dans les champs store_uri et discovery_uri . Ce champ est obligatoire si le fournisseur du système dispose d'une application de location Android.
: ce champ est facultatif dans la version 2.2, mais il est obligatoire pour l'implémentation avec Google.
|
rental_apps.android.store_uri |
URI | Obligatoire | URI depuis lequel l'application Android de location 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 un app store tel que Google Play, nous vous recommandons de suivre les bonnes pratiques Android afin que l'application de visionnage puisse ouvrir directement l'URI vers l'application native de l'app store au lieu d'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 déterminer si l'application Android de location est installée sur l'appareil.
|
rental_apps.ios |
Objet | Obligatoire sous certaines conditions | Contient des informations sur le téléchargement et la découverte d'applications de location pour la plate-forme iOS dans les champs store_uri et discovery_uri . Ce champ est obligatoire si le fournisseur du système dispose d'une application de location iOS.
: ce champ est facultatif dans la version 2.2, mais il est obligatoire pour l'implémentation avec Google.
|
rental_apps.ios.store_uri |
URI | Obligatoire | URI depuis lequel l'application iOS de location 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 l'App Store d'Apple. Si l'URI pointe vers un app store tel que l'App Store d'Apple, nous vous recommandons de suivre les bonnes pratiques d'iOS afin que l'application de visionnage puisse ouvrir directement l'URI vers l'application native de l'app store au lieu d'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 déterminer si l'application iOS de location est installée sur l'appareil.
|
Obligatoire : free_bike_status.json (système sans station)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit les emplacements et les attributs des véhicules autonomes disponibles. Pour des raisons de confidentialité, les véhicules faisant l'objet d'une location active ne doivent pas figurer dans ce flux.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
bikes |
Tableau | Obligatoire | Tableau des vélos actuellement disponibles et arrêtés, 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 les URI de location pour Android, iOS et le Web dans leurs champs respectifs. |
bikes[].rental_uris.android |
URI | Obligatoire sous certaines conditions | URI pouvant être transmis à une application Android avec un intent Android android.intent.action.VIEW pour prendre en charge les
liens profonds Android. Le rental_uris fourni doit être un
lien d'application Android afin que l'application de visionnage n'ait pas à gérer manuellement la redirection de l'utilisateur vers l'App Store si l'application du fournisseur n'est pas installée.
Cet URI doit être un lien profond spécifique au vélo, et non une page de location générale qui inclut des informations pour plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo, sans aucune 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. Il n'est pas forcément nécessaire que les URI incluent le Ce champ est obligatoire si le partenaire dispose d'une application de location Android. Exemple de lien vers une application Android :
|
bikes[].rental_uris.ios |
URI | Obligatoire sous certaines conditions | URI pouvant être utilisé sur iOS pour lancer l'application de location du vélo.
Pour en savoir plus, consultez l'article d'Apple sur les
schémas d'URL personnalisés iOS.
Le rental_uris fourni doit être un
lien universel iOS afin que l'application de visionnage n'ait pas à gérer manuellement la redirection de l'utilisateur vers l'App Store si l'application du fournisseur n'est pas installée.
Cet URI doit être un lien profond spécifique au vélo, et non une page de location générale qui inclut des informations pour plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo, sans aucune 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. Il n'est pas forcément nécessaire que les URI incluent le bike_id du vélo, à condition que le partenaire dispose d'autres moyens d'identifier le vélo concerné. 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 dispose d'une application de location iOS. Exemple de lien universel iOS :
|
bikes[].rental_uris.web |
URL | Facultatif | URL qu'un navigateur Web peut utiliser pour afficher plus d'informations sur la location d'un véhicule à cet emplacement. Cette URL doit être un lien profond spécifique au vélo individuel, et non une page de location générale qui inclut des informations pour plusieurs vélos. Le lien profond doit rediriger l'utilisateur directement vers le vélo, sans aucune 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 sont pas nécessairement tenues d'inclure Si ce champ n'est pas défini, cela signifie que les liens profonds ne sont pas compatibles avec le navigateur Web. Exemple de valeur :
|
bikes[].vehicle_type_id |
ID | Obligatoire | Le 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é lorsque ce type de véhicule est loué, comme décrit dans la section system_pricing_plans.json .
|
bikes[].current_range_meters |
Flottant non négatif | Obligatoire sous certaines conditions | Ce champ est obligatoire si la définition vehicle_type correspondant au véhicule comporte un moteur.
Définissez la distance maximale en mètres que le véhicule peut parcourir sans avoir besoin d'être rechargé ou ravitaillé, en fonction de son niveau de charge ou de carburant actuel. |
bikes[].last_reported |
Horodatage | Facultatif | Défini sur la dernière heure à laquelle le véhicule a communiqué 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 avec et sans station)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit les détails des différents types de véhicules, comme indiqué dans la section free_bike_status.json
.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
vehicle_types |
Tableau | Obligatoire | Tableau d'objets, où chaque objet définit un type de véhicule distinct dans le catalogue du fournisseur. Il ne peut y avoir qu'un seul objet pour un type de véhicule donné. |
vehicle_types[].vehicle_type_id |
ID | Obligatoire | Identifiant unique d'un type de véhicule donné. |
vehicle_types[].form_factor |
Énumération | Obligatoire | Énumération qui représente le facteur de forme général du véhicule, à partir de la liste suivante de valeurs actuellement valides :
|
vehicle_types[].propulsion_type |
Énumération | Obligatoire | Énumération qui représente 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 | Obligatoire sous certaines conditions | 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 avoir besoin d'être rechargé ou ravitaillé, lorsqu'il est entièrement ravitaillé ou rechargé. |
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 station)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit les forfaits pour les véhicules autonomes. Nous exigeons des fournisseurs qu'ils affichent des informations sur les prix des véhicules autonomes.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
plans |
Tableau | Obligatoire | Tableau d'objets où 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 | Facultatif | URL qui redirige les utilisateurs finaux vers plus d'informations sur le forfait. |
plans[].currency |
Chaîne | Obligatoire | Norme ISO 4217 pour l'abonnement. |
plans[].price |
Flottant non négatif | Obligatoire |
Le forfait doit être défini comme un forfait non tarifé ou un forfait tarifé :
|
plans[].per_km_pricing |
Tableau | Obligatoire sous certaines conditions |
Ce champ est obligatoire si le prix dépend de la distance parcourue (en kilomètres). Tableau d'objets où chaque objet définit un segment divisé par une distance donnée. La valeur Pour déterminer le prix total du forfait donné, ajoutez la valeur Si ce champ n'est pas défini, il n'y a pas de prix variables en fonction de 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 à partir duquel le tarif du segment commence à être facturé.
Ce champ est défini sur la valeur inclusive qui marque le début de la plage du segment. Ainsi, une fois le nombre de kilomètres parcourus, le rate est facturé une seule fois.
|
plans[].per_km_pricing[].rate |
Float | Obligatoire | Taux facturé pour chaque interval , qui commence à la start inclusive du segment. Si ce champ est défini sur un nombre négatif, le voyageur bénéficie d'une remise.
|
plans[].per_km_pricing[].interval |
Entier non négatif | Obligatoire |
Intervalle en kilomètres auquel le
Si la valeur Si ce champ est défini sur |
plans[].per_km_pricing[].end |
Entier non négatif | Facultatif |
Nombre de kilomètres à partir duquel le Si ce champ n'est pas défini ou est vide, le |
plans[].per_min_pricing |
Tableau | Obligatoire sous certaines conditions |
Ce champ est obligatoire si le prix dépend du temps écoulé (en minutes). Tableau d'objets où chaque objet définit un segment divisé par période. La valeur Pour déterminer le prix total du forfait donné, ajoutez la valeur Si ce champ n'est pas défini, il n'y a pas de prix variables en fonction du temps. Par conséquent, aucun n'est inclus dans le prix total. |
plans[].per_min_pricing[].start |
Float | Obligatoire |
Nombre de minutes à partir duquel le tarif du segment commence à être facturé.
Ce champ est défini sur la valeur inclusive qui marque le début de la plage du segment. Ainsi, une fois le nombre de minutes défini écoulé, le rate est facturé une fois.
|
plans[].per_min_pricing[].rate |
Float | Obligatoire | Taux facturé pour chaque interval . Le taux commence à l'start inclusif du segment. Si ce champ est défini sur un nombre négatif, le voyageur bénéficie d'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 | Facultatif |
Nombre de minutes au-delà duquel le Si ce champ n'est pas défini ou est vide, le |
Exemples pour system_pricing_plans.json
Cette section fournit des exemples de code system_pricing_plans.json
informatifs. Les détails et les résultats pertinents de chaque exemple sont également fournis.
Exemple 1 pour system_pricing_plans.json
L'exemple de code de forfait suivant indique les frais en fonction de la durée du trajet pour les intervalles suivants :
- [0,1) : 2 USD
- Si le trajet dure moins d'une minute, l'utilisateur paie 2 USD.
- Exemple : trajet de 59 secondes
- [1,2) : 3 USD
- Si le trajet dure une minute ou plus, mais moins de deux minutes, l'utilisateur paie 2 $+ 1 $= 3 $.
- Exemples : trajet de 1 min ; trajet de 1 min 45 s
- x = nombre de minutes où x est supérieur ou égal à 2 :
3 $ + ((2 $ + 1 $) * (x - 2 + 1))
USD
- Si le trajet dure au moins deux minutes, l'utilisateur paie 3 $pour la partie du trajet inférieure à deux minutes, puis 1 $ (en continuant à partir de la première entrée de la liste
per_min_pricing
) + 2 $ (la deuxième entrée de la listeper_min_pricing
) pour chaque minute supplémentaire à partir de deux minutes incluses. - Exemples :
- Un trajet de deux minutes coûte 3 $+ (2 $ + 1 $) = 6 $.
- Un trajet de 2 min 30 s coûte 3 $+ (2 $ + 1 $) = 6 $
- Course de 3 minutes : 3 $+ ((2 $ + 1 $) x 2) = 9 $
- Un trajet de 10 minutes coûte 3 $+ ((2 $ + 1 $) * 9) = 30 $.
- Si le trajet dure au moins deux minutes, l'utilisateur paie 3 $pour la partie du trajet inférieure à deux minutes, puis 1 $ (en continuant à partir 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 facturé à la fois en minutes et en kilomètres :
- Plus précisément, l'utilisateur final est facturé 0,25 CAD par kilomètre 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 qui dure 10 minutes coûte 9 CAD. Voici le détail du coût :
- 3 $, prix de base
- 0,25 $ * 2, facturé une fois au début du trajet et une fois au kilomètre 1.
- 0,5 $ * 11, facturé une fois au début de chaque minute. La facturation commence à 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 avec et sans station)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit les données de géorepérage pour les véhicules autonomes. Les données de géorepérage incluent les limites géographiques qui spécifient où les véhicules sont autorisés à commencer et à terminer le trajet, ainsi que la vitesse à laquelle ils peuvent rouler. Cette vitesse correspond à la vitesse maximale du véhicule ou à la limitation de vitesse de la route sur laquelle il circule, selon la valeur la plus basse. Les conducteurs doivent respecter les lois et ordonnances locales.
Nous utilisons ces données pour filtrer les résultats de micromobilité lorsqu'un utilisateur recherche un itinéraire donné et que la fin du trajet se situe en dehors des géorepères spécifiques. Si aucune zone géographique n'est fournie, Google considère que le service n'est soumis à aucune restriction de zone.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
geofencing_zones |
Objet | Obligatoire | Un objet FeatureCollection tel que décrit par la
norme IETF RFC 7946 est un objet qui comporte un champ nommé features . La valeur de features est un tableau JSON.
Chaque élément du tableau JSON est un objet Feature .
Chaque zone géorepérée, ses règles et attributs associés, ainsi que les définitions des |
geofencing_zones.type |
Chaîne | Obligatoire | Définissez la valeur sur FeatureCollection , comme décrit dans la
norme IETF RFC 7946. |
geofencing_zones.features |
Tableau | Obligatoire | Tableau JSON, où chaque élément du tableau JSON est un objet Feature . |
geofencing_zones.features[].type |
Chaîne | Obligatoire | Définissez la valeur sur Feature , comme décrit dans la
norme IETF RFC 7946. |
geofencing_zones.features[].geometry |
Multipolygone GeoJSON | Obligatoire | Multipolygone GeoJSON qui décrit les zones où les trajets ne peuvent pas commencer, se terminer ou passer, ainsi que d'autres limites. Une disposition des points dans le sens des aiguilles d'une montre définit la zone délimitée par le polygone, tandis qu'un ordre inverse définit la zone extérieure au polygone. Pour en savoir plus, consultez la règle de la main droite. |
geofencing_zones.features[].properties |
Objet | Obligatoire | Objet qui définit les indemnités de voyage et les limites. |
geofencing_zones.features[].properties.rules |
Tableau | Facultatif | Tableau d'objets, où chaque objet définit une seule règle. Si au moins deux règles se chevauchent, entrent en conflit ou sont incompatibles d'une manière ou d'une autre, la règle définie en premier dans l'ordre du fichier JSON prévaut. |
geofencing_zones.features[].properties.rules[].vehicle_type_id |
Tableau | Facultatif | Tableau d'ID de types de véhicules, où chaque élément est un vehicle_type_id auquel des restrictions doivent être appliquées.
Si aucune valeur vehicle_type_id n'est spécifiée, les restrictions s'appliquent à tous les types de véhicules. |
geofencing_zones.features[].properties.rules[].ride_allowed |
Booléen | Obligatoire | Indique si la course à vélo en libre-service 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 avec bornes)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit les informations générales sur les stations de vélos en libre-service.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
stations |
Tableau | Obligatoire | Tableau d'objets où chaque objet définit une seule et unique station. |
stations[].station_id |
Chaîne | Obligatoire | Identifiant de la station. |
stations[].name |
Chaîne | Obligatoire |
Nom public de la gare dans la langue locale de la ville où elle se trouve. Le champ name doit correspondre à ce qui est indiqué sur les panneaux de signalisation de la gare, le cas échéant, ou refléter l'emplacement de la gare en utilisant une rue transversale ou 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 la signalisation. Le name doit être en casse mixte, conformément aux conventions locales d'utilisation des majuscules et des minuscules pour les noms de lieux, et non 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 | Facultatif | Entier non négatif représentant le nombre total de bornes d'accueil installées à la station, disponibles et indisponibles. |
stations[].rental_uris |
Objet | Obligatoire |
Objet JSON contenant les 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 qui ont été définis lors de l'intégration du fournisseur. |
stations[].rental_uris.android |
URI | Obligatoire sous certaines conditions |
URI pouvant ê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 qui inclut des informations pour plusieurs stations. Le lien profond doit rediriger directement l'utilisateur vers la station, sans aucune invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir la station même s'ils n'ont jamais ouvert l'application. Il n'est pas forcément nécessaire que les URI incluent le Ce champ est obligatoire si le partenaire dispose d'une application de location Android. Exemple de lien vers une application Android :
|
stations[].rental_uris.ios |
URI | Obligatoire sous certaines conditions |
URI pouvant être utilisé sur iOS pour lancer l'application de location pour la station.
Pour en savoir plus, 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 qui inclut des informations pour plusieurs stations. Le lien profond doit rediriger directement l'utilisateur vers la station, sans aucune 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 tenus d'inclure Ce champ est obligatoire si le partenaire dispose d'une application de location iOS. Exemple de lien universel iOS :
|
stations[].rental_uris.web |
URL | Facultatif | URL qu'un navigateur Web peut utiliser pour afficher plus d'informations sur la location d'un véhicule à cette station. Cette URL doit être un lien profond spécifique à la station, et non une page de location générale qui inclut des informations pour plusieurs stations. Le lien profond doit rediriger l'utilisateur directement vers la station, sans aucune invite, page interstitielle ni connexion. Assurez-vous que les utilisateurs peuvent voir la station même s'ils n'ont jamais ouvert l'application. Il n'est pas nécessaire que les URL incluent Si ce champ n'est pas défini, cela signifie que les liens profonds ne sont pas compatibles avec 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 avec borne)
Si nécessaire, consultez la spécification GBFS.
Ce flux définit l'état actuel des stations de vélos en libre-service publiques.
Nom du champ | Type | Exigence | Description |
---|---|---|---|
stations |
Tableau | Obligatoire | Tableau d'objets, où chaque objet définit une seule et unique station. |
stations[].station_id |
Chaîne | 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 physiquement présents à la station et pouvant être proposés à la location. Pour déterminer si la station loue actuellement des vélos, vous devez inspecter le champ |
stations[].vehicle_types_available |
Tableau | Facultatif |
Tableau d'objets qui définit le nombre total de véhicules, classés par type de véhicule disponible 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 de chacun de ces objets doit correspondre à la valeur spécifiée dans le champ |
stations[].vehicle_types_available[].vehicle_type_id |
ID | Obligatoire |
Le |
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 | Obligatoire sous certaines conditions |
Ce champ est obligatoire, sauf si la station dispose d'une capacité d'accueil illimitée. Par exemple, les stations virtuelles ont une capacité d'accueil illimitée et le champ n'est pas obligatoire. Entier non négatif représentant le nombre total de bornes fonctionnelles physiquement disponibles à la station et pouvant accepter le retour de véhicules. Pour déterminer si la station accepte actuellement les retours de vélos, vous devez inspecter le champ |
stations[].is_installed |
Booléen | Obligatoire |
Valeur booléenne indiquant si la station est actuellement dans la rue et installée. Si la station est installée dans la rue, définissez la valeur sur Si la borne n'est pas installée dans la rue, définissez la valeur sur |
stations[].is_renting |
Booléen | Obligatoire |
Valeur booléenne indiquant si la station loue actuellement des vélos. Si la station loue actuellement des vélos, définissez la valeur sur Si la station ne propose pas de vélos à la location, définissez la valeur sur |
stations[].is_returning |
Booléen | Obligatoire |
Valeur booléenne indiquant si la station accepte actuellement les retours de vélos. Si la station accepte actuellement les retours de vélos, définissez la valeur sur Si la station n'accepte pas actuellement les retours de vélos, définissez la valeur sur |
Voici un exemple de 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
},
]