Una volta che disponi di un feed Realtime valido (anche se non contiene dati), puoi specificare il metodo che utilizzerai per inviare i dati a Google.
Puoi fornire dati di trasporto pubblico in tempo reale in due modi:
- Recupero, che consente a Google di recuperare i dati da una posizione sul web.
- Push, che consente di caricare i dati tramite richiesta POST HTTP.
Per i dati degli avvisi di servizio, se non puoi fornire questi avvisi utilizzando i metodi push o di recupero, puoi creare manualmente gli avvisi di servizio tramite l'Editor avvisi di servizio.
Pubblicare avvisi di servizio
Se non puoi fornire gli avvisi di servizio utilizzando i metodi push o di recupero, puoi crearli manualmente tramite l'Editor avvisi di servizio.
Recupero
Puoi ospitare ciascuno dei tuoi feed Realtime nella relativa posizione sul web, mentre Google richiama (o "recupera") i dati da queste posizioni ogni 30 secondi.
Per consentire il recupero dei dati da parte di Google in modo sicuro, puoi utilizzare una delle seguenti opzioni di autenticazione:
- Autenticazione di base (nome utente e password)
- Intestazioni specifiche da aggiungere alla richiesta
Push
Puoi trasferire attivamente i tuoi dati a Google tramite l'invio push. Con l'invio push, puoi configurare i caricamenti automatici dei tuoi dati GTFS Realtime tramite richiesta POST HTTP, utilizzando l'autenticazione OAuth2.0 per garantire la sicurezza del tuo feed di dati Realtime.
Per fornire agli utenti le informazioni sul trasporto pubblico più precise e aggiornate possibili, ti consigliamo di inviare spesso aggiornamenti dei dati in tempo reale. Idealmente, sarebbe opportuno eseguire il push dei dati di aggiornamento della corsa e relativi alla posizione del veicolo ogni 30 secondi e dei dati di avviso del servizio da ogni 30 secondi a ogni due minuti.
- Un Account Google registrato nella Dashboard Partner di Google Transit
- Un unico Account Google che può aprire Google Cloud
- Il file del feed in tempo reale da inviare alla Dashboard Partner di Google Transit
- A sinistra, nella scheda "API e servizi", fai clic su Credenziali.
- In alto, fai clic su Crea credenziali Account di servizio.
- Inserisci un nome nel campo "Nome account di servizio".
- Fai clic su Crea e continua Fine.
- Nella console Google Cloud, fai clic su Menu IAM e amministrazione.
- A sinistra, fai clic su Account di servizio Aggiungi chiave.
- Nella sezione "Tipo di chiave", seleziona JSON.
- Fai clic su Crea.
- Per aggiungere l'account di servizio come utente alla Dashboard Partner di Google Transit, fai clic su Apri finestra di dialogo di invito in alto a destra nella pagina.
- Nella finestra di dialogo, inserisci l'indirizzo email dell'account di servizio.
- Nell'angolo in alto a destra, fai clic sul pulsante Apri finestra di dialogo di invito, poi inserisci l'indirizzo email del tuo account di servizio.
- Per consentire il push di nuovi feed in tempo reale, assicurati che il tuo account di servizio disponga dell'autorizzazione "Accesso" (impostazione predefinita).
- Fai clic su Invita.
Per ulteriori informazioni sull'aggiunta di utenti, consulta l'articolo Accedere alla Dashboard Partner di Google Transit.
https://www.googleapis.com/auth/partnerdash.upload
. La richiesta contiene un modulo HTML (Tipo di contenuti: multipart/form-data) con 2 campi:
- real_feed_id: l'ID del feed in tempo reale che stai caricando
- file: i contenuti del file GTFS-RT caricato
#!/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())