O Google Display & Video 360 armazena automaticamente arquivos da leitura de entidades no Google Cloud Storage. Esses arquivos só podem ser acessados pelas contas com acesso concedido.
Criar um projeto
Crie e configure um projeto da seguinte maneira:
- Acesse a página de APIs ativadas pelo Console de APIs do Google.
Você será solicitado a fazer login no Google, caso ainda não tenha feito isso.
- Na lista suspensa do projeto, selecione um projeto existente ou crie um novo.
- Se você tiver vários projetos atuais, selecione aquele em que você quer ativar o Google Cloud Storage e, em seguida, selecione Continuar.
- Se você não tiver um projeto, selecione Criar um novo projeto, digite um nome e selecione Criar.
Observação: você precisa estar ciente de que alguns identificadores de recursos (como IDs do projeto) podem ser mantidos após o fim da vida útil do projeto. Por esse motivo, evite armazenar informações confidenciais em identificadores de recursos.
- Na lista de APIs ativadas, confira se o componente Google Cloud Storage está na lista.
Se ele não estiver listado, clique na guia APIs do Google, pesquise e selecione o componente do Google Cloud Storage e clique em Ativar API.
Observe que, para a maioria dos projetos, o componente Google Cloud Storage já está ativado. Se você planeja acessar o Google Cloud Storage usando a API JSON, verifique também se essa API está ativada.
- Ative o faturamento do projeto.
Antes de usar o Google Cloud Storage, ative o faturamento do seu projeto, caso ainda não tenha feito isso. Ativar o faturamento não significa necessariamente que você será cobrado. Para mais informações, consulte Preços.
- Ainda no projeto do armazenamento em nuvem, clique no menu da galeria no canto superior esquerdo e selecione Faturamento.
- Se você ainda não tiver uma conta de faturamento, siga as instruções para criar uma nova conta de faturamento.
- Se você já tiver uma conta de faturamento, selecione-a e escolha Definir conta.
No Console de APIs do Google, permaneça no mesmo projeto e vá para a próxima seção.
Configurar o acesso ao Cloud Storage
Ainda no Console de APIs do Google, no projeto necessário, clique no menu da galeria no canto superior esquerdo, selecione APIs e serviços e clique em Credenciais. Na página "Credenciais", procure Chaves da conta de serviço.
Encontre o endereço de e-mail da chave da conta de serviço:
- Selecione o link Gerenciar contas de serviço (à direita da seção de chaves da conta de serviço).
- O endereço de e-mail fica visível na página Permissões resultante.
Se não houver chaves de conta de serviço, crie uma nova conta de serviço:
- Selecione o menu suspenso Criar credenciais e escolha Chave da conta de serviço.
- No menu suspenso Conta de serviço, escolha Nova conta de serviço.
- Digite um Nome para a conta de serviço. O ID da conta de serviço é gerado automaticamente com base no nome e no nome do projeto.
- Anote o ID da conta de serviço
gserviceaccount.com
endereço de e-mail. Ele não aparece na página "Credenciais" depois que você seleciona Criar. - Na seção Tipo de chave, escolha JSON.
- Clique em Criar. O arquivo JSON com o par de chaves pública/privada da conta é salvo na pasta "Downloads". Essa chave é usada para autenticar seu aplicativo na API e assinar todas as solicitações enviadas à API. Armazene o arquivo JSON gerado em um local seguro, em algum lugar onde seu aplicativo possa acessá-lo.
Entre em contato com a equipe de suporte do Display & Video 360 para solicitar a ativação dos arquivos da leitura de entidades e/ou da API Google Bid Manager.
Depois que a equipe de suporte confirmar o acesso, crie um Grupo do Google (ou grupos) dedicado e atualize os seguintes campos nos detalhes do parceiro do Display & Video 360 (somente usuários com acesso no nível do parceiro poderão fazer essas atualizações):
- Grupo do Google de leitura de registros
O grupo somente leitura tem permissões apenas para ler arquivos e listar o conteúdo dos buckets de armazenamento. - Grupo do Google de gerenciamento de registros
O grupo de gerenciamento tem todas as permissões do grupo somente leitura, mas também pode alterar as ACLs de arquivos nos buckets. Nem mesmo o grupo de gerenciamento tem permissão para alterar ACLs de bucket, nem para criar, modificar ou excluir arquivos.
Depois que o Grupo do Google for adicionado, você poderá adicionar e remover usuários do seu Grupo do Google conforme necessário, sem nenhum envolvimento da equipe de suporte do Display & Video 360. Somente os usuários do seu grupo terão acesso aos seus dados.
- Grupo do Google de leitura de registros
Acessar seus dados
Acessar dados com o gsutil
A ferramenta gsutil é um aplicativo de linha de comando que permite acessar os dados do Google Cloud Storage com facilidade, sem a necessidade de experiência de programação. É possível, por exemplo, usar a gsutil como parte de um script ou arquivo em lote em vez de criar aplicativos personalizados.
Para começar a usar a gsutil, leia a documentação da gsutil. Você ainda precisará autenticar usando o OAuth 2 como antes, mas a própria gsutil solicitará as credenciais na primeira vez que você usá-la e as armazenará para uso posterior.
Acessar dados de maneira programática
O Google Cloud Storage tem APIs para muitas linguagens de programação que permitem acessar os dados de maneira programática. O exemplo abaixo mostra como realizar um download simples de um dos arquivos da leitura de entidades do Google Cloud Storage. Lembre-se de que apenas os
arquivos da leitura de entidades públicos são armazenados no
bucket gdbm-public
. Os
arquivos de leitura de entidades particulares serão armazenados em buckets específicos do parceiro e do anunciante.
Java
O exemplo a seguir usa a biblioteca de cliente de APIs do Google para Java, o que facilita o acesso aos dados mantidos no Google Cloud Storage. Além da biblioteca de cliente geral das principais APIs do Google, também é necessário fazer o download da biblioteca separada para a API Cloud Storage.
Primeiro, configure as credenciais que serão usadas para se comunicar com a API e receber autorização para acessar seus dados. Isso é feito criando um objeto Credential
que usa o endereço de e-mail developer.gserviceaccount.com
da conta de serviço como ServiceAccountId
e também carrega o arquivo de chave privada que foi transferido por download do Console de APIs do Google durante a criação da conta de serviço. Isso garante que todas as solicitações futuras à API sejam assinadas com a chave privada da conta de serviço:
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();
Depois de criar o objeto Credential
, use-o para instanciar um novo objeto Storage
que será usado em todas as solicitações futuras para a API Google Cloud Storage:
Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);
Agora que você tem um novo objeto Storage
, já pode começar a fazer solicitações à
API. Você está fazendo uma solicitação para recuperar um item específico bucketObjectName
do bucket bucket
. A biblioteca lida com o download HTTP do arquivo do Google Cloud Storage, e você simplesmente imprime o conteúdo no console:
Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString());
Os valores de bucket
e bucketObjectName
variam de acordo com a parte da API que você está acessando. Consulte a seção apropriada sobre convenções de nomenclatura.
C#
O exemplo a seguir usa a biblioteca de cliente de APIs do Google para .NET, o que torna o acesso aos dados mantidos no Google Cloud Storage simples e fácil.
Primeiro, configure as credenciais que serão usadas para se comunicar com a API e receber autorização de acesso aos seus dados. Para isso, crie um objeto AssertionFlowClient
que use o endereço de e-mail developer.gserviceaccount.com
da conta de serviço como ServiceAccountId
e carregue o arquivo de chave privada que foi transferido por download do Console de APIs do Google durante a criação da conta de serviço.
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() };
Depois de criar o objeto AssertionFlowClient
, use-o para instanciar um novo objeto OAuth2Authenticator
, que pode ser usado para criar uma nova instância do Storage
em todas as solicitações futuras para a API Google Cloud Storage:
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth);
Agora que você tem um novo objeto Storage
, já pode começar a fazer solicitações à API. Você está fazendo uma solicitação para recuperar um item específico,
bucketObjectName
, do bucket bucket
. Usamos classes de biblioteca de cliente .NET padrão para processar o download HTTP do Google Cloud Storage, mas é preciso processar manualmente o caso em que há um redirecionamento para garantir que sempre haja o cabeçalho Authorization
correto presente na solicitação:
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(); }
O conteúdo da resposta pode ser lido do objeto HttpWebResponse
por meio de GetResponseStream
, como de costume. Os valores de bucket
e bucketObjectName
variam de acordo com a parte da API que você está acessando. Consulte a seção apropriada sobre convenções de nomenclatura.
Apêndice: amostras 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; } } }