Rede de Display do Google e O Video 360 armazena automaticamente os arquivos da leitura de entidades no Google Cloud Storage. Esses arquivos só podem ser acessados por que receberam acesso.
Criar um projeto
Crie e configure um projeto da seguinte maneira:
- Acesse a página de APIs ativadas do Console de APIs do Google.
Se ainda não tiver feito login no Google, você será solicitado a fazer login.
- Na lista suspensa do projeto, selecione um projeto existente ou crie um novo.
- Se você já tiver vários projetos, selecione o projeto para a qual você quer ativar o Google Cloud Storage. Em seguida, selecione Continuar.
- Ou, se você não tiver um projeto, selecione Criar um novo projeto, digite um nome para o projeto e selecione Criar.
Observação: alguns identificadores de recurso (como IDs de projeto) podem ser retidos após o fim da vida útil do projeto. Por isso, evite armazenar informações sensíveis em recursos identificadores.
- Na lista de APIs ativadas, verifique se o componente Google Cloud Storage está listado.
Se ela não estiver na lista, clique na guia APIs do Google, pesquise e selecione a opção
Storage e clique em Ativar API.
Observe que, para a maioria dos projetos, o componente Google Cloud Storage já está ativado. Se você planeja para acessar o Google Cloud Storage usando a API JSON e, em seguida, verifique também se a API JSON do Google Cloud Storage está ativada.
- Ative o faturamento do projeto.
Antes de usar o Google Cloud Storage, você precisa ativar o faturamento dos seus projeto, se ainda não o fez. A ativação do faturamento não necessariamente significa que você será cobrado. Para mais informações, consulte Preços.
- Ainda no projeto de armazenamento em nuvem, clique no menu da galeria no canto superior esquerdo e selecione Faturamento.
- Se você ainda não tem uma conta de faturamento, siga as instruções para criar uma nova conta de faturamento.
- Se você tiver uma conta de faturamento, Selecione-a e clique em 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, dentro do projeto requerido, clique no menu de galeria na no canto superior esquerdo, selecione APIs e Serviços e em Credenciais. No(s) dia(s) Página de 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 "Chaves da conta de serviço").
- O endereço de e-mail pode ser visualizado 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 é exibido gerada a partir do nome e do nome do projeto.
- Anote o endereço de e-mail do ID da conta de serviço
gserviceaccount.com
. Ela não é exibida 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 sua pasta "Downloads". Essa chave é usada para autenticar seu aplicativo na API e assinar todas as solicitações que envia à 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 Display & A equipe de suporte do Video 360 precisa solicitar a ativação dos arquivos da Leitura de entidades e/ou a API Google Bid Manager.
Depois que a equipe de suporte confirmar o acesso, crie um Grupo do Google dedicado. (ou grupos) e atualize os seguintes campos em Exibir e Detalhes do parceiro do Video 360 (somente os usuários com acesso no nível do parceiro poderão fazer estas 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 dos arquivos nos buckets. Até mesmo o grupo de gerenciamento não tem permissão alterar ACLs de bloco nem permissão para criar, modificar ou excluir arquivos.
Depois que o grupo do Google for adicionado, você poderá adicionar e remover usuários do grupo conforme necessário. sem qualquer envolvimento adicional da equipe de Display e Equipe de suporte do Video 360 somente esses usuários que estão no grupo terão acesso aos seus dados.
- Grupo do Google de leitura de registros
Acessar seus dados
Acessar dados usando gsutil
A ferramenta gsutil é um aplicativo de linha de comando que permite acessar os Dados do Google Cloud Storage com facilidade, sem necessidade de programação do usuário. É possível, por exemplo, usar o gsutil como parte de um script ou arquivo de lote em vez de criar aplicativos personalizados.
Para começar a usar a gsutil, leia a documentação dela. Você ainda precisará se autenticar usando o OAuth 2 como antes, mas a própria gsutil solicitará as credenciais na primeira vez que você usá-las e, em seguida, armazená-las para uso posterior.
Acessar dados de forma programática
O Google Cloud Storage tem APIs para muitas linguagens de programação que permitem
acesse seus dados de forma programática. O exemplo abaixo mostra como realizar
Faça o download de um dos arquivos da leitura de entidades.
do Google Cloud Storage. Lembre-se de que apenas o público
Os arquivos da leitura de entidades são armazenados no
bucket gdbm-public
; privado
Os arquivos da leitura de entidades serão armazenados em buckets específicos do parceiro e do anunciante.
Java
O exemplo a seguir usa a API Google de cliente de APIs do Google para Java, o que torna o acesso aos dados mantidos no Google o Cloud Storage. Além da principal biblioteca cliente geral de APIs do Google, você também precisa fazer o download biblioteca para a API Cloud Storage.
Primeiro, configure as credenciais que serão usadas na comunicação com a API para
receber autorização para acessar seus dados. Isso é feito criando um Credential
objeto 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 baixado
no Console de APIs do Google ao criar a conta de serviço. Isso garantirá que todos
futuras solicitações à API são 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
, você pode usá-lo para instanciar uma
novo objeto Storage
que pode ser usado em todas as solicitações futuras para o
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 para
a API. Aqui 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 da
no Google Cloud Storage. Em seguida, basta imprimir 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 para bucket
e bucketObjectName
variam de acordo com
a parte da API que você está acessando; consulte a seção apropriada sobre nomenclatura
e convenções de segurança.
C#
O exemplo a seguir usa Biblioteca cliente de APIs do Google para .NET, que simplifica e facilita o acesso aos dados no Google Cloud Storage.
Primeiro, configure as credenciais que serão usadas na comunicação com a API para receber autorização de acesso aos seus dados. Para fazer isso, crie um objeto AssertionFlowClient
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 baixado 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 instanciar uma nova instância Storage
para todas as solicitações futuras à API do 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. Aqui você faz uma solicitação para recuperar um item específico,
bucketObjectName
, do bucket bucket
. Usamos padrões
Classes da biblioteca de cliente .NET para processar o download HTTP da
Google Cloud Storage, mas é necessário lidar manualmente com o caso em que
há um redirecionamento para garantir que sempre haja o Authorization
correto
cabeçalho 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 no objeto HttpWebResponse
.
via GetResponseStream
, como de costume. Seus valores para bucket
e
bucketObjectName
varia 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; } } }