Una vez que tengas un feed en tiempo real válido (incluso uno que no contenga datos), podrás especificar el método que utilizarás para enviar datos a Google.
Puedes enviar datos de transporte público en tiempo real de dos formas:
- Por extracción, lo que permite que Google obtenga los datos desde una ubicación web.
- Por inserción, lo que te permite subirlos por HTTP POST.
En el caso de los datos de alertas de servicio, si no puedes proporcionar alertas de servicio por los métodos de recogida o inserción, puedes crear alertas de servicio manualmente con el Editor de alertas de servicio.
Publicar alertas de servicio
Si no puedes proporcionar alertas de servicio por los métodos de recogida o inserción, puedes crear alertas de servicio manualmente con el Editor de alertas de servicio.
Recogida
Con este método de envío, cada feed en tiempo real se aloja en su propia ubicación web y Google obtiene (extrae) los datos desde allí cada 30 segundos.
Para permitir que Google obtenga los datos de forma segura, puedes utilizar una de las siguientes opciones de autenticación:
- Autenticación básica (nombre de usuario y contraseña)
- Encabezados específicos que se deben añadir a la solicitud
Inserción
Este método te permite transferir los datos a Google, o "insertarlos", de forma activa. Con el envío por inserción, puedes definir subidas automáticas de los feeds GTFS en tiempo real por HTTP POST. Se usa la autenticación OAuth2.0 para garantizar la seguridad de los feeds en tiempo real.
Para proporcionar a los usuarios información precisa y actualizada sobre el transporte público, te recomendamos que insertes actualizaciones en tiempo real con frecuencia. Lo ideal es insertar los datos de actualización de los viajes y de la posición de los vehículos cada 30 segundos, y los datos de las alertas de servicio en intervalos de entre 30 segundos y 2 minutos.
- Tienes una cuenta de Google registrada en el panel de control de Transit Partners
- Tienes una cuenta de Google que puede acceder a Google Cloud
- Tienes el archivo de feed en tiempo real que quieres transferir al panel de control de Transit Partners
- En la parte izquierda, en la pestaña "APIs y servicios", haz clic en Credenciales.
- En la parte superior, haz clic en Crear credenciales Cuenta de servicio.
- En el campo "Nombre de la cuenta de servicio", escribe un nombre.
- Haz clic en Crear y continuar Listo.
- En la consola de Google Cloud, haz clic en el menú IAM y administración.
- En la parte izquierda, haz clic en Cuentas de servicio Añadir clave.
- En "Tipo de clave", selecciona JSON.
- Haz clic en Crear.
- Para añadir la cuenta de servicio como usuario al panel de control de Transit Partners, haz clic en Open Invite Dialog (Abrir cuadro de diálogo de invitación) en la parte superior derecha de la página.
- En el cuadro de diálogo, introduce el correo de la cuenta de servicio.
- En la esquina superior derecha, haz clic en el botón Open Invite Dialog (Abrir cuadro de diálogo de invitación) y, a continuación, escribe el correo de tu cuenta de servicio.
- Para permitir que se envíen nuevos feeds en tiempo real, asegúrate de que tu cuenta de servicio tenga el permiso de acceso (predeterminado).
- Haz clic en Invite (Invitar).
Para obtener más información sobre cómo añadir usuarios, consulta cómo acceder al panel de control de Transit Partners.
https://www.googleapis.com/auth/partnerdash.upload
. La solicitud contiene un formulario HTML (Content-Type: multipart/form-data) con dos campos:
- realtime_feed_id: ID del feed en tiempo real que se está subiendo
- file: contenido del archivo GTFS-RT subido
#!/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())