Une fois que vous disposez d'un flux en temps réel valide (même s'il ne contient aucune donnée), vous pouvez spécifier la méthode à utiliser pour envoyer des données à Google.
Vous pouvez fournir des données de transports en commun en temps réel de deux manières:
- La méthode fetch permet à Google de récupérer vos données à partir d'un emplacement sur le Web
- La méthode push vous permet d'importer vos données via HTTP POST.
Pour les données d'alerte de service, si vous ne pouvez pas fournir d'alertes de service via les méthodes fetch ou push, vous pouvez créer manuellement des alertes de service à l'aide de l'éditeur des alertes de service.
Publier les alertes de service
Si vous ne parvenez pas à fournir d'alertes de service à l'aide des méthodes "fetch" ou "push", vous pouvez créer manuellement des alertes de service à l'aide de l'éditeur des alertes de service.
Méthode fetch
Vous pouvez héberger chacun de vos flux en temps réel à un emplacement spécifique du Web. Google y récupère (ou "extrait") alors ces données toutes les 30 secondes.
Pour autoriser Google à effectuer cette opération de manière sécurisée, vous pouvez utiliser l'une des options d'authentification suivantes :
- Authentification de base (nom d'utilisateur et mot de passe)
- En-têtes spécifiques à ajouter dans la requête
Push
Vous pouvez transmettre vous-même les données à Google à l'aide de la méthode "push". Vous configurez alors des importations automatiques de vos données GTFS en temps réel via HTTP POST, en utilisant l'authentification OAuth2.0 pour assurer la sécurité de votre flux de données en temps réel.
Pour fournir aux utilisateurs les informations les plus récentes et les plus précises possible sur les transports en commun, nous vous recommandons d'envoyer fréquemment des mises à jour de données en temps réel. Idéalement, vous devriez transmettre les données de modification de trajets et de position des véhicules toutes les 30 secondes, et les alertes de service toutes les 30 secondes à deux minutes.
- Un compte Google enregistré dans le tableau de bord des partenaires Google Transports en commun
- Un compte Google pouvant ouvrir Google Cloud
- Le fichier de flux en temps réel que vous souhaitez envoyer au tableau de bord des partenaires Google Transports en commun
- Sur la gauche, dans l'onglet "API et services", cliquez sur Identifiants.
- En haut, cliquez sur Créer des identifiants Compte de service.
- Dans le champ "Nom du compte de service", saisissez un nom.
- Cliquez sur Créer et continuer OK.
- Dans la console Google Cloud, cliquez sur Menu IAM et administration.
- Sur la gauche, cliquez sur Comptes de service Ajouter une clé.
- Sous "Type de clé", sélectionnez JSON.
- Cliquez sur Créer.
- Pour ajouter le compte de service en tant qu'utilisateur au tableau de bord des partenaires Google Transports en commun, cliquez sur Ouvrir la boîte de dialogue d'invitation en haut à droite de la page.
- Dans la boîte de dialogue, saisissez l'adresse e-mail du compte de service.
- En haut à droite, cliquez sur le bouton Ouvrir la boîte de dialogue d'invitation , puis saisissez l'adresse e-mail de votre compte de service.
- Pour autoriser la transmission de nouveaux flux en temps réel, assurez-vous que votre compte de service dispose de l'autorisation Accès (par défaut).
- Cliquez sur Invite (Inviter).
Pour savoir comment ajouter des utilisateurs, consultez Accéder au tableau de bord des partenaires Google Transports en commun.
https://www.googleapis.com/auth/partnerdash.upload
. La requête contient un formulaire HTML (Content-Type: multipart/form-data) comportant deux champs :
- realtime_feed_id : ID du flux en temps réel importé
- file : contenu du fichier GTFS-RT importé
#!/usr/bin/env python3
import requests
from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
SCOPES = ["https://www.googleapis.com/auth/partnerdash.upload"]
SERVICE_ACCOUNT_FILE = 'service-account-key.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
form = {'realtime_feed_id': '[REALTIME_FEED_NAME]'}
files = {'file': open("feed_version.pb", 'rb')}
req = requests.Request( 'POST', 'https://partnerdash.google.com/push-upload',data=form, files=files).prepare()
authed_session = AuthorizedSession(credentials)
resp = authed_session.request(url="https://partnerdash.google.com/push-upload",method="POST",
data=req.body,
headers={
'Content-Length': req.headers["Content-Length"],
'Content-Type': req.headers["Content-Type"]})
print(resp.headers)
print(resp.reason)
print(resp.raise_for_status())