Premiers pas avec Cloud Storage

Publicité sur le Réseau Display de Google Video 360 stocke automatiquement les fichiers de lecture des entités dans Google Cloud Storage. Ces fichiers ne sont accessibles qu'aux comptes auxquels l'accès a été accordé.

Créer un projet

Créez et configurez un projet comme suit:

  1. Accédez à la page API activées dans la console Google APIs.

    Si vous n'êtes pas déjà connecté à Google, vous êtes invité à le faire.

  2. Dans la liste déroulante des projets, sélectionnez un projet existant ou créez-en un.
    • Si vous avez plusieurs projets existants, assurez-vous de sélectionner le projet pour laquelle vous souhaitez activer Google Cloud Storage, puis sélectionnez Continuer.
    • Si vous n'avez pas de projet, sélectionnez Créer un projet, saisissez un nom de projet, puis sélectionnez Créer.

      Remarque: Vous devez savoir que certains identifiants de ressources (tels que les ID de projet) peuvent être conservés au-delà de la durée de vie de votre projet. Par conséquent, évitez de stocker des informations sensibles dans des ressources identifiants.

  3. Assurez-vous que le composant Google Cloud Storage figure dans la liste des API activées. S'il n'est pas répertorié, cliquez sur l'onglet API Google, recherchez et sélectionnez l'API Google Cloud Storage, puis cliquez sur Activer l'API.

    Notez que le composant Google Cloud Storage est déjà activé pour la plupart des projets. Si vous prévoyez pour accéder à Google Cloud Storage à l'aide de l'API JSON, puis vous devez également vérifier que l'API JSON Google Cloud Storage est activée.

  4. Activez la facturation pour le projet.

    Avant de pouvoir utiliser Google Cloud Storage, vous devez activer la facturation pour votre projet si vous ne l’avez pas déjà fait. L'activation de la facturation n'implique pas vous serez facturé. Pour en savoir plus, reportez-vous à la page Tarifs.

    1. Toujours dans le projet Cloud Storage, cliquez sur le menu de la galerie en haut à gauche, puis sélectionnez Facturation.
    2. Si vous n'avez pas encore de compte de facturation, suivez les instructions pour créez un compte de facturation.
    3. Si vous avez un compte de facturation existant, sélectionnez-la, puis sélectionnez Définir le compte.

Dans la console Google APIs, restez dans le même projet et passez à la section suivante.

Configurer l'accès à Cloud Storage

  1. Toujours dans la console Google APIs, dans le projet requis, cliquez sur le menu de la galerie dans en haut à gauche, sélectionnez API et Services, puis cliquez sur Identifiants. Le Identifiants, recherchez Clés de compte de service.

    Recherchez l'adresse e-mail de la clé du compte de service:

    1. Cliquez sur le lien Gérer les comptes de service (à droite de la section "Clés de compte de service").
    2. L'adresse e-mail s'affiche sur la page Autorisations qui s'affiche.

    Si aucune clé de compte de service n'est définie, créez un compte de service:

    1. Cliquez sur le menu déroulant Créer des identifiants, puis sélectionnez Clé de compte de service.
    2. Dans la liste déroulante Compte de service, sélectionnez Nouveau compte de service.
    3. Dans le champ Nom, saisissez le nom du compte de service. L'ID du compte de service est automatiquement généré à partir du nom et du nom du projet.
    4. Notez l'adresse e-mail associée à l'ID de compte de service gserviceaccount.com. Il ne s'affiche plus sur la page "Identifiants" une fois que vous avez sélectionné Créer.
    5. Dans la section Type de clé, choisissez JSON.
    6. Cliquez sur Créer. Le fichier JSON contenant la paire de clés publique/privée du compte est enregistré dans dans votre dossier "Téléchargements". Cette clé permet d'authentifier votre application auprès de l'API de signer toutes les requêtes qu'il envoie à l'API. Stockez le fichier JSON généré en lieu sûr. quelque part où votre application pourra y accéder.
  2. Contacter l'équipe display et L'équipe d'assistance de Video 360 demande l'activation des fichiers de lecture des entités et/ou l'API Google Bid Manager.

    Une fois l'accès confirmé par l'équipe d'assistance, créez un groupe Google dédié (ou groupes) et mettez à jour les champs suivants dans Display & Détails du partenaire Video 360 (notez que seuls les utilisateurs disposant d'un accès de niveau partenaire pourront effectuer ces modifications):

    • Groupe Google de lecture de journaux
      Le groupe en lecture seule est uniquement autorisé à lire les fichiers et à répertorier le contenu des buckets de stockage.
    • Groupe Google "Gestion des journaux"
      Le groupe de gestion dispose de toutes les autorisations du groupe en lecture seule, mais peut également modifier les LCA des fichiers dans les buckets. Notez que même le groupe de gestion n'a pas l'autorisation modifier les LCA d'un bucket, ni de créer, modifier ou supprimer des fichiers.

    Une fois le groupe Google ajouté, vous pouvez y ajouter des utilisateurs et en supprimer si nécessaire sans aucune autre intervention de la part du Display & L'équipe d'assistance Video 360 uniquement ces utilisateurs membres de votre groupe auront accès à vos données.

Accéder à vos données

Accéder aux données avec gsutil

L'outil gsutil est une application de ligne de commande qui vous permet d'accéder Google Cloud Storage, facilement et sans aucune programmation expérience. Vous pouvez, par exemple, utiliser gsutil dans le cadre d'un script ou d'un fichier de traitement par lot au lieu créer des applications personnalisées.

Pour faire vos premiers pas avec gsutil, consultez la documentation gsutil. Vous devrez toujours vous authentifier avec OAuth 2 comme auparavant, mais gsutil vous demandera les identifiants la première fois que vous les utilisez, puis les stockez pour une utilisation ultérieure.

Accéder aux données de manière programmatique

Google Cloud Storage dispose d'API pour de nombreux langages de programmation qui permettent d'accéder à vos données par programmation. L'exemple ci-dessous montre comment effectuer une le téléchargement de l'un des fichiers de lecture des entités depuis Google Cloud Storage. N'oubliez pas que seul le public Les fichiers de lecture des entités sont stockés dans la section gdbm-public bucket; votre Les fichiers de lecture des entités seront stockés dans des ensembles spécifiques aux partenaires et aux annonceurs.

Java

L'exemple suivant utilise la classe Google la bibliothèque cliente des API pour Java, qui facilite l'accès aux données conservées dans Google Cloud Storage. En plus de la bibliothèque cliente générale des API Google, vous devez également télécharger bibliothèque pour l'API Cloud Storage.

Vous devez d'abord configurer les identifiants à utiliser lorsque vous communiquez avec l'API pour obtenir l'autorisation d'accéder à vos données. Pour ce faire, créez un Credential qui utilise l'adresse e-mail developer.gserviceaccount.com du compte de service en tant que ServiceAccountId et charge également le fichier de clé privée téléchargé depuis la console Google APIs lorsque vous créez le compte de service. Vous aurez ainsi l'assurance les futures requêtes à l'API sont signées avec la clé privée du compte de service:

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

Après avoir créé l'objet Credential, vous pouvez l'utiliser pour instancier Nouvel objet Storage que vous pouvez utiliser pour toutes les futures requêtes adressées au API Google Cloud Storage:

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

Maintenant que vous disposez d'un nouvel objet Storage, vous pouvez commencer à envoyer des requêtes à l'API. Vous exécutez ici une requête pour récupérer un élément spécifique bucketObjectName à partir du bucket bucket. La bibliothèque gère le téléchargement HTTP du fichier à partir de Google Cloud Storage. Il vous suffit ensuite d'imprimer le contenu sur la console:

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

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

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

Vos valeurs pour bucket et bucketObjectName varient en fonction de la partie de l'API à laquelle vous accédez ; reportez-vous à la section appropriée conventions.

C#

L'exemple suivant utilise la classe La bibliothèque cliente des API Google pour .NET facilite l'accès aux données stockées dans Google Cloud Storage.

Vous devez d'abord configurer les identifiants à utiliser lorsque vous communiquez avec l'API afin d'obtenir l'autorisation d'accéder à vos données. Pour ce faire, créez un objet AssertionFlowClient qui utilise l'adresse e-mail developer.gserviceaccount.com du compte de service comme ServiceAccountId et charge également le fichier de clé privée téléchargé depuis la console Google APIs lors de la création du compte de service.

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

Après avoir créé l'objet AssertionFlowClient, vous pouvez l'utiliser pour instancier un nouvel objet OAuth2Authenticator que vous pouvez utiliser pour instancier une nouvelle instance Storage pour toutes les futures requêtes adressées à l'API Google Cloud Storage:

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

Maintenant que vous disposez d'un nouvel objet Storage, vous pouvez commencer à envoyer des requêtes à l'API. Ici, vous envoyez une requête pour récupérer un élément spécifique, bucketObjectName, provenant du bucket bucket. Nous utilisons des rôles de la bibliothèque cliente .NET pour gérer le téléchargement HTTP à partir de Google Cloud Storage, mais vous devez gérer manuellement le cas où une redirection permet de s'assurer qu'il y a toujours le bon Authorization. présent dans la requête:

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

Le contenu de la réponse peut ensuite être lu à partir de l'objet HttpWebResponse. via GetResponseStream comme d'habitude. Vos valeurs pour bucket et bucketObjectName varie en fonction de la partie de l'API à laquelle vous accédez. reportez-vous à la section appropriée sur les conventions de nommage.

Annexe: Exemples complets

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

    }
}