Inizia a utilizzare Cloud Storage

Google Display & Video 360 archivia automaticamente i file per la lettura delle entità in Google Cloud Storage. Questi file sono accessibili solo gli account a cui è stato concesso l'accesso.

Creare un progetto

Crea e configura un progetto nel seguente modo:

  1. Vai alla pagina delle API abilitate per la Console API di Google.

    Se non hai ancora effettuato l'accesso a Google, ti viene chiesto di farlo.

  2. Dal menu a discesa dei progetti, seleziona un progetto esistente o creane uno nuovo.
    • Se esistono già progetti multipli, assicurati di selezionare quello per cui vuoi attivare Google Cloud Storage, quindi seleziona Continua.
    • In alternativa, se non ne hai uno, seleziona Crea un nuovo progetto, inserisci un nome per il progetto e seleziona Crea.

      Nota: tieni presente che alcuni identificatori di risorse (ad esempio gli ID progetto) potrebbero essere conservati oltre la durata del progetto. Per questo motivo, evita di archiviare informazioni sensibili negli identificatori di risorse.

  3. Nell'elenco delle API abilitate, assicurati che sia presente il componente Google Cloud Storage. Se non è presente, fai clic sulla scheda API di Google, cerca e seleziona il componente Google Cloud Storage e fai clic su Abilita API.

    Tieni presente che per la maggior parte dei progetti il componente Google Cloud Storage è già abilitato. Se prevedi di accedere a Google Cloud Storage utilizzando l'API JSON, devi anche verificare che l'API JSON di Google Cloud Storage sia abilitata.

  4. Abilitare la fatturazione per il progetto.

    Prima di poter utilizzare Google Cloud Storage, devi abilitare la fatturazione per il tuo progetto, se non l'hai ancora fatto. L'attivazione della fatturazione non comporta necessariamente un addebito. Per ulteriori informazioni, vedi Prezzi.

    1. Sempre all'interno del progetto Cloud Storage, fai clic sul menu della galleria nell'angolo in alto a sinistra e seleziona Fatturazione.
    2. Se non hai ancora un account di fatturazione, segui le istruzioni per creare un nuovo account di fatturazione.
    3. Se hai un account di fatturazione esistente, selezionalo e poi seleziona Imposta account.

Nella console API di Google, rimani all'interno dello stesso progetto e vai alla sezione successiva.

Configura l'accesso a Cloud Storage

  1. Sempre nella console API di Google all'interno del progetto richiesto, fai clic sul menu della galleria nell'angolo in alto a sinistra, seleziona API e servizi, quindi fai clic su Credenziali. Nella pagina Credenziali, cerca Chiavi account di servizio.

    Trova l'indirizzo email della chiave dell'account di servizio:

    1. Seleziona il link Gestisci account di servizio (a destra della sezione Chiavi account di servizio).
    2. L'indirizzo email può essere visualizzato nella pagina Autorizzazioni visualizzata.

    Se non sono presenti chiavi dell'account di servizio, crea un nuovo account di servizio:

    1. Seleziona il menu a discesa Crea credenziali, quindi scegli Chiave account di servizio.
    2. Nel menu a discesa Account di servizio, scegli Nuovo account di servizio.
    3. Inserisci un nome per l'account di servizio. L'ID account di servizio viene generato automaticamente dal nome e da quello del progetto.
    4. Prendi nota dell'indirizzo email dell'account di servizio con ID gserviceaccount.com. Non verrà visualizzato nella pagina Credenziali dopo aver selezionato Crea.
    5. Nella sezione Tipo di chiave, scegli JSON.
    6. Fai clic su Crea. Il file JSON con la coppia di chiavi pubblica/privata dell'account viene salvato nella cartella Download. Questa chiave viene utilizzata per autenticare l'applicazione all'API e firmare tutte le richieste che invia all'API. Archivia il file JSON generato in un luogo sicuro, dove l'applicazione potrà accedervi.
  2. Contatta il team di assistenza di Display & Video 360 per richiedere l'attivazione dei file per la lettura delle entità e/o dell'API Google Bid Manager.

    Dopo che il team di assistenza avrà confermato l'accesso, crea uno o più gruppi di Google Gruppi e aggiorna i seguenti campi nei dettagli del partner Display & Video 360 (tieni presente che solo gli utenti con accesso a livello di partner potranno effettuare questi aggiornamenti):

    • Gruppo Google per la lettura di log
      Il gruppo di sola lettura dispone solo delle autorizzazioni per leggere i file ed elencare i contenuti dei bucket di archiviazione.
    • Gruppo Google per la gestione dei log
      Il gruppo di gestione dispone di tutte le autorizzazioni del gruppo di sola lettura, ma è anche in grado di modificare gli ACL dei file all'interno dei bucket. Tieni presente che anche il gruppo di gestione non dispone delle autorizzazioni necessarie per modificare gli ACL dei bucket né per creare, modificare o eliminare file.

    Dopo aver aggiunto il gruppo Google, puoi aggiungere e rimuovere utenti dal tuo gruppo Google come richiesto senza alcun ulteriore coinvolgimento del team di assistenza di Display & Video 360; solo gli utenti che fanno parte del tuo gruppo avranno accesso ai tuoi dati.

Accedi ai tuoi dati

Accedi ai dati utilizzando gsutil

Lo strumento gsutil è un'applicazione a riga di comando che consente di accedere facilmente ai dati di Google Cloud Storage senza alcuna esperienza di programmazione. Ad esempio, puoi utilizzare gsutil come parte di un file di script o batch anziché creare applicazioni personalizzate.

Per iniziare a utilizzare gsutil, leggi la documentazione relativa a gsutil. Dovrai comunque eseguire l'autenticazione utilizzando OAuth 2 come prima, ma gsutil stesso ti chiederà le credenziali la prima volta che lo userai e le archivierà per utilizzarle in un secondo momento.

Accedere ai dati in modo programmatico

Google Cloud Storage dispone di API per molti linguaggi di programmazione che ti consentono di accedere ai dati in modo programmatico. L'esempio riportato di seguito mostra come eseguire un semplice download di uno dei file per la lettura delle entità da Google Cloud Storage. Ricorda che solo i file per la lettura delle entità pubblici sono archiviati nel bucket gdbm-public; i tuoi file per la lettura delle entità privati verranno archiviati nei bucket specifici del partner e dell'inserzionista.

Java

L'esempio seguente utilizza la libreria client delle API di Google per Java, che semplifica l'accesso ai dati archiviati in Google Cloud Storage. Oltre alla libreria client generale delle API di Google principale, devi scaricare la libreria separata per l'API Cloud Storage.

Devi prima configurare le credenziali da utilizzare durante la comunicazione con l'API per ottenere l'autorizzazione ad accedere ai tuoi dati. A questo scopo, crea un oggetto Credential che utilizzi l'indirizzo email developer.gserviceaccount.com dell'account di servizio come ServiceAccountId e carichi anche il file della chiave privata che è stato scaricato dalla console API di Google durante la creazione dell'account di servizio. Ciò garantisce che tutte le richieste future all'API siano firmate con la chiave privata dell'account di servizio:

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();

Dopo aver creato l'oggetto Credential, puoi utilizzarlo per creare l'istanza di un nuovo oggetto Storage da utilizzare per tutte le richieste future all'API Google Cloud Storage:

Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);

Ora che hai un nuovo oggetto Storage, puoi iniziare a effettuare richieste all'API. Qui stai effettuando una richiesta per recuperare un elemento specifico bucketObjectName dal bucket bucket. La libreria gestisce il download HTTP del file da Google Cloud Storage e poi è sufficiente stampare i contenuti dalla console:

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

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

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

I valori per bucket e bucketObjectName varieranno a seconda della parte dell'API a cui stai accedendo; consulta la sezione appropriata sulle convenzioni di denominazione.

C#

L'esempio seguente utilizza la libreria client delle API di Google per .NET, che semplifica e semplifica l'accesso ai dati archiviati in Google Cloud Storage.

Per prima cosa, devi configurare le credenziali da utilizzare durante la comunicazione con l'API per ottenere l'autorizzazione ad accedere ai tuoi dati. A questo scopo, crea un oggetto AssertionFlowClient che utilizzi l'indirizzo email developer.gserviceaccount.com dell'account di servizio come ServiceAccountId e carica anche il file della chiave privata che è stato scaricato dalla console API di Google durante la creazione dell'account di servizio.

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

Dopo aver creato l'oggetto AssertionFlowClient, puoi utilizzarlo per creare un'istanza di un nuovo oggetto OAuth2Authenticator da utilizzare per creare una nuova istanza Storage per tutte le richieste future all'API Google Cloud Storage:

var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
StorageService service = new StorageService(auth);

Ora che hai un nuovo oggetto Storage, puoi iniziare a effettuare richieste all'API. Qui stai effettuando una richiesta per recuperare un elemento specifico, bucketObjectName, dal bucket bucket. Utilizziamo classi della libreria client .NET standard per gestire il download HTTP da Google Cloud Storage, ma devi gestire manualmente il caso in cui è presente un reindirizzamento per garantire che nella richiesta sia sempre presente l'intestazione Authorization corretta:

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

I contenuti della risposta possono essere letti dall'oggetto HttpWebResponse tramite GetResponseStream come di consueto. I valori per bucket e bucketObjectName varieranno a seconda della parte dell'API a cui stai accedendo; consulta la sezione appropriata sulle convenzioni di denominazione.

Appendice: Esempi completi

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

    }
}