Comienza a usar Cloud Storage

Google Display & Video 360 almacena automáticamente los archivos de lectura de entidades en Google Cloud Storage. Estos archivos solo son accesibles para las cuentas a las que se les otorgó acceso.

Cómo crear un proyecto

Crea y configura un proyecto de la siguiente manera:

  1. Ve a la página de APIs habilitadas de la Consola de APIs de Google.

    Si aún no accediste a Google, se te solicitará que lo hagas.

  2. 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 en el que deseas activar Google Cloud Storage y, luego, selecciona Continuar.
    • Si no tienes un proyecto, selecciona Crear un proyecto nuevo, ingresa un nombre para el proyecto y selecciona Crear.

      Nota: Debes tener en cuenta que algunos identificadores de recursos (como los ID del proyecto) podrían conservarse después de que el proyecto finalice. Por este motivo, evita almacenar información sensible en identificadores de recursos.

  3. En la lista de APIs habilitadas, asegúrate de que el componente de Google Cloud Storage aparezca. Si no aparece, haz clic en la pestaña API de Google, busca y selecciona el componente de Google 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 acceder a Google Cloud Storage con la API de JSON, también debes verificar que la API de JSON de Google Cloud Storage esté habilitada.

  4. Habilita la facturación para el proyecto.

    Antes de poder usar Google Cloud Storage, debes habilitar la facturación para tu proyecto si aún no lo has hecho. Habilitar la facturación no implica necesariamente que se te cobrará. Para obtener más información, consulta Precios.

    1. Dentro del proyecto de Cloud Storage, haz clic en el menú de la galería ubicado en la esquina superior izquierda y, luego, selecciona Facturación.
    2. Si aún no tienes una, sigue las instrucciones para crear una.
    3. Si tienes una cuenta de facturación existente, selecciónala y, luego, elige Establecer cuenta.

En la Consola de API de Google, permanece dentro del mismo proyecto y ve a la siguiente sección.

Configura el acceso a Cloud Storage

  1. En la Consola de API de Google, dentro del proyecto requerido, haz clic en el menú de la galería ubicado en la esquina superior izquierda, selecciona APIs y servicios y, luego, haz clic en Credenciales. 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:

    1. Selecciona el vínculo Administrar cuentas de servicio (a la derecha de la sección Claves de cuenta de servicio).
    2. La dirección de correo electrónico se puede ver en la página de Permisos resultante.

    Si no hay claves de cuenta de servicio, crea una nueva cuenta de servicio:

    1. Selecciona el menú desplegable Crear credenciales y, luego, elige Clave de cuenta de servicio.
    2. En el menú desplegable Cuenta de servicio, elige Nueva cuenta de servicio.
    3. Ingresa un Nombre para la cuenta de servicio. El ID de la cuenta de servicio se genera automáticamente a partir del nombre y del proyecto.
    4. Toma nota de la dirección de correo electrónico del ID de la cuenta de servicio gserviceaccount.com. No se muestra en la página Credenciales después de seleccionar Crear.
    5. En la sección Tipo de clave, elige JSON.
    6. Haz clic en Crear. El archivo JSON con el par de claves pública/privada de la cuenta se guarda en tu 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 él.
  2. Comunícate con el equipo de asistencia al cliente de Display & Video 360 para solicitar la habilitación de los archivos de lectura de entidades o la API de Google Bid Manager.

    Después de que el equipo de asistencia al cliente confirme el acceso, crea un Grupo de Google (o grupos) dedicado y actualiza los siguientes campos en los detalles de socio de Display & Video 360 (ten en cuenta que solo los usuarios con acceso a nivel de socio podrán realizar estas actualizaciones):

    • Grupo de Google de lectura de registros
      El 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 incluso el grupo de administración no tiene permiso para cambiar las LCA del bucket ni para crear, modificar o borrar archivos.

    Después de agregar el Grupo de Google, puedes agregar y quitar usuarios de tu Grupo de Google según sea necesario sin ninguna otra participación del equipo de asistencia al cliente de Display & Video 360. Solo los usuarios que estén en tu grupo tendrán acceso a tus datos.

Accede a tus datos

Accede a los datos con gsutil

gsutil es una aplicación de línea de comandos que te permite acceder con facilidad a tus datos de Google Cloud Storage sin necesidad de tener experiencia en programación. Por ejemplo, podrías usar gsutil como parte de una secuencia de comandos o un archivo por lotes en lugar de crear aplicaciones personalizadas.

Para comenzar a usar 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 las uses y, luego, las almacenará para usarlas más adelante.

Accede a los datos de manera programática

Google Cloud Storage tiene APIs para muchos lenguajes de programación que te permiten acceder a tus datos de manera programática. En el siguiente ejemplo, se muestra cómo realizar una descarga simple de uno de los archivos de lectura de entidades de Google Cloud Storage. Recuerda que solo los archivos públicos de lectura de entidades se almacenan en el bucket gdbm-public; los archivos privados de lectura de entidades se almacenarán en buckets específicos de socios y anunciantes.

Java

En el siguiente ejemplo, se usa la biblioteca cliente de las API de Google para Java, que facilita el acceso a los datos almacenados en Google Cloud Storage. Además de la biblioteca cliente de las API de Google general principal, también deberás descargar la biblioteca cliente de la API de Cloud Storage por separado.

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 crea un objeto Credential que use la dirección de correo electrónico developer.gserviceaccount.com de la cuenta de servicio como ServiceAccountId y, además, cargue el archivo de claves privadas que se descargó desde la Consola de API de Google cuando se creó la cuenta de servicio. Esto garantizará que todas las solicitudes futuras a la API se firmen 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 puedes usar en 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, estás 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 maneja la descarga HTTP del archivo desde Google Cloud Storage y, luego, solo imprimes el contenido en la consola:

Get bucketObject = storage.objects().get(bucketName, bucketObjectName);

ByteArrayOutputStream output = new ByteArrayOutputStream();
bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
bucketObject.executeAndDownloadTo(output);

System.out.println(output.toString());

Tus valores para bucket y bucketObjectName variarán según la parte de la API a la que accedas. Consulta la sección correspondiente sobre convenciones de nombres.

C#

En el siguiente ejemplo, se usa la biblioteca cliente de las API de Google para .NET, que hace que el acceso a los datos almacenados en Google Cloud Storage sea simple y sencillo.

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 crea un objeto AssertionFlowClient que use la dirección de correo electrónico developer.gserviceaccount.com de la cuenta de servicio como ServiceAccountId y, además, cargue 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 de Storage nueva 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ás listo para comenzar a realizar solicitudes a la API. Aquí realizas una solicitud para recuperar un elemento específico, bucketObjectName, del bucket bucket. Usamos clases de biblioteca cliente de .NET estándar para controlar la descarga HTTP desde Google Cloud Storage, pero debes controlar de forma manual el caso en el que haya un redireccionamiento para garantizar que siempre haya el encabezado Authorization correcto 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án según la parte de la API a la que accedas. Consulta la sección correspondiente sobre convenciones de nombres.

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;
        }

    }
}