Publicidad en Display de Google Video 360 almacena automáticamente archivos de lectura de entidades en Google Cloud Storage. Solo se puede acceder a estos archivos a las cuentas a las que se les otorgó acceso.
Crea un proyecto
Crea y configura un proyecto de la siguiente manera:
- Ve a la página de APIs habilitadas en la Consola de APIs de Google.
Si aún no accediste a Google, se te solicitará que lo hagas.
- En el menú desplegable de proyectos, selecciona un proyecto existente o crea uno nuevo.
- Si tienes varios proyectos existentes, asegúrate de seleccionar el proyecto para el que deseas activar Google Cloud Storage y, luego, selecciona Continuar.
- O bien, si no tienes un proyecto, selecciona Crear un proyecto nuevo, ingresa un nombre para el proyecto y, luego, selecciona Crear.
Nota: Ten en cuenta que algunos identificadores de recursos (como los IDs del proyecto) podrían conservarse más allá de la vida útil de tu proyecto. Por este motivo, evita almacenar información sensible en recursos identificadores.
- En la lista de APIs habilitadas, asegúrate de que aparezca el componente de Google Cloud Storage.
Si no aparece en la lista, haz clic en la pestaña Google APIs, busca y selecciona la herramienta
Cloud Storage y haz clic en Habilitar API.
Ten en cuenta que, para la mayoría de los proyectos, el componente de Google Cloud Storage ya está habilitado. Si planeas para acceder a Google Cloud Storage con la API de JSON, luego también debes verificar que esté habilitada la API de Google Cloud Storage JSON.
- Habilitar la facturación para el proyecto
Antes de poder usar Google Cloud Storage, debes habilitar la facturación de tu proyecto si aún no lo has hecho. Habilitar la facturación no necesariamente significa que se te cobrará. Para obtener más información, consulta Precios.
- En el proyecto de Cloud Storage, haz clic en el menú de la galería, en la esquina superior izquierda, y, luego, selecciona Facturación.
- Si aún no tienes una cuenta de facturación, sigue las instrucciones para Crea una cuenta de facturación nueva.
- Si ya tienes una cuenta de facturación, selecciónalo y, luego, Establecer cuenta.
En la Consola de APIs de Google, permanece dentro del mismo proyecto y ve a la siguiente sección.
Configura el acceso a Cloud Storage
En la Consola de APIs de Google dentro del proyecto requerido, haz clic en el menú de la galería de en la esquina superior izquierda, selecciona APIs y Services y, luego, haz clic en Credentials. En la En la página Credenciales, busca Claves de cuenta de servicio.
Busca la dirección de correo electrónico de la clave de la cuenta de servicio:
- Selecciona el vínculo Administrar cuentas de servicio (a la derecha de la sección Claves de cuenta de servicio).
- La dirección de correo electrónico se puede ver en la página Permisos resultante.
Si no hay claves de cuenta de servicio, crea una nueva cuenta de servicio:
- Selecciona el menú desplegable Crear credenciales y, luego, elige Clave de cuenta de servicio.
- En el menú desplegable Cuenta de servicio, elige Nueva cuenta de servicio.
- Ingresa un Nombre para la cuenta de servicio. El ID de cuenta de servicio se generados a partir del nombre y el nombre del proyecto.
- Toma nota del ID de la cuenta de servicio
gserviceaccount.com
email address. No se muestra en la página Credenciales después de que seleccionas Crear. - En la sección Tipo de clave, elige JSON.
- Haz clic en Crear. El archivo JSON con el par de claves pública/privada de la cuenta se guarda en a la carpeta Descargas. Esta clave se usa para autenticar tu aplicación en la API y firmar todas las solicitudes que envía a la API. Almacena el archivo JSON generado en un lugar seguro. en algún lugar donde tu aplicación pueda acceder a ellos.
Contacta a Display & El equipo de asistencia al cliente de Video 360 debe solicitar la habilitación de los archivos de lectura de entidades. o la API de Google Bid Manager.
Una vez que el equipo de asistencia al cliente confirme el acceso, crea un Grupo de Google exclusivo. (o grupos) y actualiza los siguientes campos en Display & Detalles de los socios de Video 360 (ten en cuenta que solo los usuarios con acceso a nivel de socio podrán realizar las siguientes actualizaciones):
- Grupo de Google de lectura de registros
Este grupo de solo lectura solo tiene permisos para leer archivos y enumerar el contenido de los buckets de almacenamiento. - Grupo de Google de administración de registros
El grupo de administración tiene todos los permisos del grupo de solo lectura, pero también puede cambiar las LCA de los archivos dentro de los buckets. Ten en cuenta que ni siquiera el grupo de gerencia tiene permiso cambiar las LCA de los buckets ni tener permisos para crear, modificar o borrar archivos.
Después de agregar el Grupo de Google, puedes agregar usuarios al Grupo de Google y quitarlos según sea necesario. sin ninguna otra participación del equipo de Display El equipo de asistencia al cliente de Video 360 solo esos usuarios que están en tu grupo tendrán acceso a tus datos.
- Grupo de Google de lectura de registros
Accede a tus datos
Accede a los datos con gsutil
La herramienta gsutil es una aplicación de línea de comandos que te permite acceder a tus datos de Google Cloud Storage fácilmente sin programación una experiencia fluida a los desarrolladores. Podrías, por ejemplo, usar gsutil como parte de una secuencia de comandos o un archivo por lotes en lugar de crear aplicaciones personalizadas.
Para comenzar con gsutil, lee la documentación de gsutil. Deberás autenticarte con OAuth 2 como antes, pero gsutil te solicitará las credenciales la primera vez que la usas y, luego, almacénalas para usarlas más adelante.
Accede a los datos de manera programática
Google Cloud Storage cuenta con APIs para muchos lenguajes de programación que permiten
que te permita acceder a tus datos de manera programática. En el siguiente ejemplo, se muestra cómo realizar una
descarga de uno de los archivos de lectura de entidades
desde Google Cloud Storage. Recuerda que solo el público
Los archivos de lectura de entidades se almacenan
gdbm-public
bucket; tu privado
Los archivos de lectura de entidades se almacenarán en buckets específicos del socio y del anunciante.
Java
En el siguiente ejemplo, se usa la función de la biblioteca cliente de APIs de Java, que facilita el acceso a los datos almacenados en Google Cloud Storage es sencillo. Además de la principal biblioteca cliente general de las APIs de Google, también deberás descargar los archivos biblioteca para la API de Cloud Storage.
Primero, deberás configurar las credenciales que se usarán cuando te comuniques con la API para
obtener autorización para acceder a tus datos. Para ello, se debe crear un Credential
objeto que usa la dirección de correo electrónico developer.gserviceaccount.com
de la cuenta de servicio
como ServiceAccountId
y también carga el archivo de claves privadas que se descargó.
desde la Consola de APIs de Google al crear la cuenta de servicio. Esto garantizará que todos
Las solicitudes futuras a la API se firman con la clave privada de la cuenta de servicio:
NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport(); JacksonFactory JSON_FACTORY = new JacksonFactory(); ... Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId("...@developer.gserviceaccount.com") .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY) .setServiceAccountPrivateKeyFromP12File(new File("...-privatekey.p12")) .build();
Después de crear el objeto Credential
, puedes usarlo para crear una instancia de un
nuevo objeto Storage
que puedas usar para todas las solicitudes futuras a la
API de Google Cloud Storage:
Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);
Ahora que tienes un objeto Storage
nuevo, tienes todo listo para comenzar a realizar solicitudes a
la API. Aquí realizas una solicitud para recuperar un elemento específico bucketObjectName
del bucket bucket
. La biblioteca controla la descarga HTTP del archivo desde
Google Cloud Storage. Luego, imprime los contenidos
consola:
Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString());
Los valores para bucket
y bucketObjectName
variarán en función de lo siguiente:
a qué parte de la API estás accediendo; consulta la sección adecuada sobre nombres
de datos.
C#
En el siguiente ejemplo, se usa la Biblioteca cliente de las APIs de Google para .NET, que facilita y simplifica el acceso a los datos almacenados en Google Cloud Storage.
Primero, deberás configurar las credenciales que se usarán cuando te comuniques con la API para obtener autorización y acceder a tus datos. Para ello, se crea un objeto AssertionFlowClient
que usa la dirección de correo electrónico developer.gserviceaccount.com
de la cuenta de servicio como ServiceAccountId
y también carga el archivo de claves privadas que se descargó de la Consola de APIs de Google cuando se creó la cuenta de servicio.
string keyPath = @"...-privatekey.p12"; X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable); var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) { ServiceAccountId = "...@developer.gserviceaccount.com", Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue() };
Después de crear el objeto AssertionFlowClient
, puedes usarlo para crear una instancia de un nuevo objeto OAuth2Authenticator
que puedes usar a fin de crear una instancia nueva de Storage
para todas las solicitudes futuras a la API de Google Cloud Storage:
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth);
Ahora que tienes un objeto Storage
nuevo, está todo listo para comenzar a realizar solicitudes
a la API. En este caso, se hace una solicitud para recuperar un elemento específico,
bucketObjectName
, del bucket bucket
Usamos
las clases de bibliotecas cliente .NET de .NET para manejar la descarga HTTP desde
Google Cloud Storage, pero debes manejar manualmente los casos en los que
se produce un redireccionamiento para garantizar que siempre esté la Authorization
correcta.
encabezado presente en la solicitud:
var results = service.Objects.Get(bucketName, bucketObjectName).Fetch(); HttpWebRequest request = createRequest(results.Media.Link, auth); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Handle redirects manually to ensure that the Authorization header is present if // your request is redirected. if (response.StatusCode == HttpStatusCode.TemporaryRedirect) { request = createRequest(response.Headers["Location"], auth); response = (HttpWebResponse)request.GetResponse(); }
El contenido de la respuesta se puede leer desde el objeto HttpWebResponse
.
a través de GetResponseStream
, como de costumbre. Tus valores para bucket
y
bucketObjectName
variará según la parte de la API a la que estés accediendo. consulta la sección correspondiente sobre convenciones de nomenclatura.
Apéndice: Muestras completas
Java
/* * Copyright (c) 2013 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.bidmanager.api.samples; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStreamReader; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.storage.Storage; import com.google.api.services.storage.Storage.Objects.Get; import com.google.api.services.storage.StorageScopes; /** * A simple class that demonstrates how to download a specific object from a bucket using a * service account */ public class ServiceDownload { /** * This is the HTTP Transport object used for automatically refreshing access tokens. */ static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport(); /** * This is the JSON factory used for parsing refresh token responses.Your first requirement */ static final JacksonFactory JSON_FACTORY = new JacksonFactory(); /** * The main method will attempt to download a specific named object from the gdbm-public bucket * using a service account. * * @param args Not used. */ public static void main(String[] args) { try { // Prompt the user for the details of the object to download. System.out.print("Name of object to download, e.g. entity/20130430.0.Browser.json:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String bucketObjectName = in.readLine(); in.close(); String bucketName = "gdbm-public"; Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId("...@developer.gserviceaccount.com") .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY) .setServiceAccountPrivateKeyFromP12File( new File("...-privatekey.p12")) .build(); Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential); Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString()); } catch (Exception e) { System.err.println("Unexpected exception caught: " + e.getMessage()); e.printStackTrace(); } } }
C#
/* * Copyright (c) 2013 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Net; using System.Security.Cryptography.X509Certificates; using DotNetOpenAuth.OAuth2; using Google.Apis; using Google.Apis.Requests; using Google.Apis.Authentication.OAuth2; using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; using Google.Apis.Storage.v1beta1; using Google.Apis.Storage.v1beta1.Data; using Google.Apis.Util; namespace ApiSamples { /// <summary> /// A simple class that demonstrates how to download a specific object from a bucket using a /// service account /// </summary> class ServiceDownload { /// <summary> /// The main method will attempt to download a specific named object from the /// gdbm-public bucket using a service account. /// </summary> /// <param name="args">Not used.</param> public static void Main(string[] args) { // Prompt the user for the details of the object to download Console.WriteLine("Name of object to download, e.g. entity/20130430.0.Browser.json:"); string bucketObjectName = Console.ReadLine(); string bucketName = "gdbm-public"; try { string keyPath = @"...-privatekey.p12"; X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable); var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) { ServiceAccountId = "...@developer.gserviceaccount.com", Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue() }; var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth); var results = service.Objects.Get(bucketName, bucketObjectName).Fetch(); HttpWebRequest request = createRequest(results.Media.Link, auth); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Handle redirects manully to ensure that the Authorization header is present if // our request is redirected. if (response.StatusCode == HttpStatusCode.TemporaryRedirect) { request = createRequest(response.Headers["Location"], auth); response = (HttpWebResponse)request.GetResponse(); } Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream); String data = reader.ReadToEnd(); Console.Write(data); } catch (Exception e) { Console.WriteLine("Unexpected exception caught: " + e.Message); Console.Write(e.StackTrace); } Console.ReadKey(); } /// <summary> /// Generate a HttpWebRequest for the given URL with the appropriate OAuth2 authorization /// header applied. The HttpWebRequest object returned has its AllowAutoRedirect option /// disabled to allow us to manually handle redirects. /// </summary> /// <param name="url">URL that is to be requested with this object</param> /// <param name="auth">The OAuth2Authenticator instance that contains the appropriate keys.</param> /// <returns>HttpWebRequest object ready to be used to make requests to the API</returns> private static HttpWebRequest createRequest(string url, OAuth2Authenticator<AssertionFlowClient> auth) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Headers.Add("Authorization", "Bearer " + auth.State.AccessToken); request.AllowAutoRedirect = false; return request; } } }