Google 展示广告网络和Video 360 会自动存储实体读取文件 存储在 Google Cloud Storage 中。只有 已获得访问权限的账号。
创建项目
按如下方式创建和配置项目:
- 前往 Google API 控制台中“已启用的 API”页面。
如果您尚未登录 Google,系统会提示您登录。
- 从项目下拉菜单中,选择一个现有项目或创建一个新项目。
- 如果您有多个现有项目,请务必选择该项目 为其激活 Google Cloud Storage,然后选择 继续。
- 或者,如果您还没有项目,请选择 Create a new project,输入项目名称,然后选择 Create。
注意:您应该了解,某些资源标识符 (例如项目 ID)的保留期可能会比项目的生命周期更长。 因此,请避免将敏感信息存储在 标识符。
- 在已启用的 API 列表中,确保已列出 Google Cloud Storage 组件。
如果未列出,请点击 Google API 标签页,搜索并选择 Google Cloud
Storage 组件,然后点击启用 API。
请注意,对于大多数项目,Google Cloud Storage 组件已启用。如果您计划 使用 JSON API 访问 Google Cloud Storage,然后 您还应验证是否已启用 Google Cloud Storage JSON API。
- 为项目启用结算功能。
您需要先为自己的账号启用结算功能,然后才能使用 Google 云端存储 项目(如果尚未创建)。启用结算功能不一定 这意味着您将需要支付费用。要了解详情,请参阅价格。
在 Google API 控制台中,留在同一个项目中,然后前往下一部分。
设置对 Cloud Storage 的访问权限
还是在 Google API 控制台中所需项目内,点击 选择 API 和服务,然后点击凭据。在 “凭据”页面上,查找服务账号密钥。
找到服务账号密钥电子邮件地址:
- 选择管理服务账号链接(位于“服务账号密钥”部分右侧)。
- 电子邮件地址会显示在随即显示的权限页面上。
如果没有服务账号密钥,请创建一个新的服务账号:
- 选择创建凭据下拉菜单,然后选择服务账号密钥。
- 在服务账号下拉菜单中,选择新的服务账号。
- 输入服务账号的名称。系统会自动创建服务账号 ID 根据名称和项目名称生成的
- 记下服务账号 ID
gserviceaccount.com
的电子邮件地址。 选择创建后,凭据不会显示在“凭据”页面上。 - 在密钥类型部分中,选择 JSON。
- 点击创建。包含账号公钥/私钥对的 JSON 文件将保存到 “下载内容”文件夹中此密钥用于向 API 验证您的应用 对发送到 API 的所有请求进行签名。将生成的 JSON 文件存储在安全的位置, 以便您的应用能够访问该文件
与展示广告联系Video 360 支持团队请求启用实体读取文件 和/或 Google Bid Manager API
在支持团队确认访问权限后,创建一个专门的 Google 群组 (或组),并更新 Display &Video 360 中的以下字段:Video 360 合作伙伴详细信息(请注意,只有 拥有合作伙伴级访问权限的用户将能够进行以下更新):
- 日志读取 Google 群组
只读群组仅有权读取文件和列出存储分区的内容。 - Log Management Google 群组
管理群组拥有只读群组的所有权限,但也可以更改 存储分区内文件的 ACL。请注意,即使是管理群组也没有权限 更改存储分区 ACL,也无权创建、修改或删除文件。
添加 Google 群组后,您可以根据需要向 Google 群组添加用户和从中移除用户 而无需展示广告网络与Video 360 支持团队;仅限这些用户 您群组中的成员也将可以访问您的数据。
- 日志读取 Google 群组
访问您的数据
使用 gsutil 访问数据
gsutil 工具是一款命令行应用 无需任何编程即可轻松访问 Google Cloud Storage 数据 体验例如,您可以将 gsutil 作为脚本或批处理文件的一部分, 创建自定义应用的方法
要开始使用 gsutil,请参阅 gsutil 文档。 您仍然需要像之前一样使用 OAuth 2 进行身份验证,但 gsutil 本身会提示您 凭据,然后存储起来以备日后使用。
以编程方式访问数据
Google Cloud Storage 提供多种编程语言的 API,
以编程方式访问数据以下示例展示了如何执行简单的
下载某个实体读取文件
从 Google Cloud Storage 中获取。请注意
实体读取文件存储在
gdbm-public
存储分区;您的私人
实体读取文件将存储在合作伙伴专用存储分区和广告客户专用存储分区中。
Java
以下示例使用 Google 适用于 Java 的 API 客户端库,让您可以访问 Google Cloud Storage。除了主要的常规 Google API 客户端库外, 您还需要下载单独的 库 适用于 Cloud Storage API。
您需要先设置与该 API 进行通信时使用的凭据,
获取访问您数据的授权。方法是创建一个 Credential
该对象使用服务账号的 developer.gserviceaccount.com
电子邮件地址
作为 ServiceAccountId
,还会加载已下载的私钥文件
。这样可确保
今后向 API 发出的请求会使用该服务账号的私钥进行签名:
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();
创建 Credential
对象后,您可以使用它来实例化
新的 Storage
对象,可用于后续向
Google Cloud Storage API:
Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);
现在您已经有了新的 Storage
对象,可以开始向
该 API。此处,您发出了检索特定项 bucketObjectName
的请求
从存储分区 bucket
中移除。该库会处理从
Google Cloud Storage,然后将内容输出到
控制台:
Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString());
bucket
和bucketObjectName
的值会因以下因素而异:
您正在访问 API 的哪个部分;请参考有关命名的相应部分
惯例。
C#
以下示例使用 适用于 .NET 的 Google API 客户端库:可让您轻松、轻松地访问保存在 Google Cloud Storage 中的数据。
您首先需要设置与 API 通信时使用的凭据,以获取访问您数据的授权。具体方法是创建一个 AssertionFlowClient
对象,该对象使用服务账号的 developer.gserviceaccount.com
电子邮件地址作为 ServiceAccountId
,并加载在创建服务账号时从 Google API 控制台下载的私钥文件。
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() };
创建 AssertionFlowClient
对象后,您可以用它实例化一个新的 OAuth2Authenticator
对象,该对象可用于实例化一个新的 Storage
实例,以处理将来发送到 Google Cloud Storage API 的所有请求:
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth);
现在,您已经有了新的 Storage
对象,可以开始发出请求了
该 API。在这里,您发出了检索特定项的请求,
bucketObjectName
(来自存储分区 bucket
)。我们使用
.NET 客户端库
Google Cloud Storage,但您必须手动处理
系统会设置重定向,以确保始终有正确的 Authorization
标头:
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(); }
然后,系统就可以从 HttpWebResponse
对象中读取响应的内容
通过 GetResponseStream
发送。您为“bucket
”和
bucketObjectName
因您要访问 API 的哪个部分而异;请参阅有关命名惯例的相应部分。
附录:完整示例
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; } } }