Mạng Hiển thị của Google và Video 360 tự động lưu trữ các tệp thực thể đọc được trong Google Cloud Storage. Chỉ những người dùng mới có thể truy cập vào các tệp này tài khoản đã được cấp quyền truy cập.
Tạo một dự án
Tạo và định cấu hình dự án như sau:
- Truy cập trang API được bật trên Bảng điều khiển của Google API.
Nếu chưa đăng nhập vào Google, bạn sẽ được nhắc đăng nhập.
- Trong trình đơn thả xuống của dự án, hãy chọn dự án hiện có hoặc tạo dự án mới.
- Nếu bạn có nhiều dự án, hãy nhớ chọn dự án đó mà bạn muốn kích hoạt Google Cloud Storage, sau đó chọn Tiếp tục.
- Hoặc nếu bạn chưa có dự án, hãy chọn Create a new project (Tạo dự án mới), nhập tên Project (Dự án) rồi chọn Create (Tạo).
Lưu ý: Bạn nên biết rằng một số giá trị nhận dạng tài nguyên (chẳng hạn như mã dự án) có thể được giữ lại sau khi dự án hoạt động. Vì lý do này, hãy tránh lưu trữ thông tin nhạy cảm trong tài nguyên giá trị nhận dạng.
- Trong danh sách API đã bật, hãy đảm bảo thành phần Google Cloud Storage có trong danh sách.
Nếu không thấy Google Cloud, hãy nhấp vào thẻ Google APIs, tìm rồi chọn Google Cloud
thành phần Storage (Bộ nhớ) rồi nhấp vào Enable API (Bật API).
Xin lưu ý rằng đối với hầu hết các dự án, thành phần Google Cloud Storage đã được bật. Nếu bạn dự định để truy cập Google Cloud Storage bằng API JSON, sau đó bạn cũng nên xác minh rằng bạn đã bật Google Cloud Storage JSON API.
- Bật tính năng thanh toán cho dự án.
Trước khi có thể sử dụng Google Cloud Storage, bạn cần bật tính năng thanh toán cho dự án nếu bạn chưa làm như vậy. Việc bật tính năng thanh toán không nhất thiết có nghĩa là bạn sẽ bị tính phí. Để biết thêm thông tin, hãy xem bài viết Định giá.
- Vẫn trong dự án bộ nhớ trên đám mây, hãy nhấp vào trình đơn thư viện ở góc trên bên trái, rồi chọn Thanh toán.
- Nếu bạn chưa có tài khoản thanh toán, hãy làm theo hướng dẫn để tạo tài khoản thanh toán mới.
- Nếu bạn đã có tài khoản thanh toán, chọn tài khoản đó, rồi chọn Đặt tài khoản.
Trong Bảng điều khiển API của Google, hãy ở trong cùng một dự án và chuyển đến phần tiếp theo.
Thiết lập quyền truy cập vào Cloud Storage
Vẫn trong Bảng điều khiển API của Google trong dự án được yêu cầu, hãy nhấp vào trình đơn thư viện trong góc trên bên trái, chọn API & Services, sau đó nhấp vào Thông tin xác thực. Trên Trang Thông tin đăng nhập, hãy tìm Khoá tài khoản dịch vụ.
Tìm địa chỉ email có khoá tài khoản dịch vụ:
- Chọn đường liên kết Quản lý tài khoản dịch vụ (ở bên phải phần Khoá tài khoản dịch vụ).
- Địa chỉ email có thể xem được trên trang Quyền xuất hiện.
Nếu không có khoá tài khoản Dịch vụ, hãy tạo một Tài khoản dịch vụ mới:
- Chọn trình đơn thả xuống Tạo thông tin xác thực, sau đó chọn Khoá tài khoản dịch vụ.
- Trong trình đơn thả xuống Tài khoản dịch vụ, hãy chọn Tài khoản dịch vụ mới.
- Nhập Tên cho tài khoản dịch vụ. Mã tài khoản dịch vụ sẽ tự động được tạo từ tên và tên dự án.
- Ghi lại địa chỉ email có mã tài khoản dịch vụ
gserviceaccount.com
. Chứng chỉ này không hiển thị trên trang Thông tin xác thực sau khi bạn chọn Tạo. - Trong phần Key type (Loại khoá), hãy chọn JSON.
- Nhấp vào Tạo. Tệp JSON có cặp khoá công khai/riêng tư của tài khoản sẽ được lưu vào thư mục Tài nguyên đã tải xuống. Khoá này dùng để xác thực ứng dụng của bạn với API và ký tất cả các yêu cầu mà nó gửi đến API. Lưu trữ tệp JSON đã tạo ở một nơi an toàn, ở một nơi nào đó mà ứng dụng của bạn có thể truy cập vào.
Liên hệ với nhóm Hiển thị và Nhóm hỗ trợ Video 360 để yêu cầu bật tệp Entity Read và/hoặc API Trình quản lý giá thầu của Google.
Sau khi Nhóm hỗ trợ xác nhận quyền truy cập, hãy tạo một Nhóm Google riêng (hoặc nhóm) và cập nhật các trường sau trong chiến dịch Hiển thị và Thông tin chi tiết về đối tác video 360 (lưu ý rằng chỉ người dùng có quyền truy cập ở cấp đối tác sẽ có thể thực hiện những nội dung cập nhật này):
- Ghi nhật ký đọc nhóm trên Google Groups
Nhóm chỉ có quyền đọc này chỉ có quyền đọc tệp và liệt kê nội dung của các bộ chứa lưu trữ. - Nhóm Google Quản lý nhật ký
Nhóm quản lý có tất cả các quyền của nhóm chỉ đọc nhưng cũng có thể thay đổi Danh sách kiểm soát quyền truy cập (ACL) của các tệp trong nhóm. Xin lưu ý rằng ngay cả nhóm quản lý cũng không có quyền để thay đổi các ACL của nhóm, cũng như không có quyền tạo, sửa đổi hoặc xoá tệp.
Sau khi thêm nhóm trên Google Groups, bạn có thể thêm người dùng vào và xoá người dùng khỏi nhóm trên Google Groups theo yêu cầu mà không có thêm bất kỳ sự tham gia nào của chiến dịch Hiển thị và Nhóm hỗ trợ Video 360; chỉ những người dùng đó những người trong nhóm sẽ có quyền truy cập vào dữ liệu của bạn.
- Ghi nhật ký đọc nhóm trên Google Groups
Truy cập vào dữ liệu của bạn
Truy cập dữ liệu bằng OneRoster
Công cụ NCMEC là một ứng dụng dòng lệnh cho phép bạn truy cập vào Dễ dàng lưu dữ liệu trên Google Cloud Storage mà không cần lập trình của bạn. Ví dụ: bạn có thể sử dụng YT như một phần của tập lệnh hoặc tệp hàng loạt thay vì tạo các ứng dụng tuỳ chỉnh.
Để bắt đầu sử dụng YT, hãy đọc tài liệu OneRoster. Bạn vẫn cần xác thực bằng cách sử dụng OAuth 2 như trước đây, nhưng chính News sẽ nhắc bạn về thông tin đăng nhập vào lần đầu tiên bạn sử dụng rồi lưu trữ để sử dụng sau này.
Truy cập dữ liệu theo phương thức lập trình
Google Cloud Storage có API dành cho nhiều ngôn ngữ lập trình cho phép
bạn truy cập dữ liệu của mình theo cách có lập trình. Mẫu dưới đây cho bạn biết cách thực hiện một thao tác đơn giản
tải một trong các Tệp đọc thực thể xuống
từ Google Cloud Storage. Hãy nhớ rằng chỉ công chúng
Tệp đọc thực thể được lưu trữ trong
Bộ chứa gdbm-public
; riêng tư của bạn
Tệp đọc thực thể sẽ được lưu trữ trong bộ chứa Đối tác và Nhà quảng cáo.
Java
Ví dụ sau đây sử dụng lệnh Google Thư viện ứng dụng API cho Java, giúp truy cập vào dữ liệu được lưu giữ trong Google Cloud Storage thật dễ dàng. Ngoài Thư viện ứng dụng API chính của Google, bạn cũng cần tải các tệp thư viện cho Cloud Storage API.
Trước tiên, bạn cần thiết lập thông tin đăng nhập để sử dụng khi giao tiếp với API để
được uỷ quyền để truy cập vào dữ liệu của bạn. Bạn có thể thực hiện việc này bằng cách tạo một Credential
đối tượng sử dụng địa chỉ email developer.gserviceaccount.com
của Tài khoản dịch vụ
dưới dạng ServiceAccountId
, đồng thời tải tệp khoá riêng tư đã tải xuống
trong Bảng điều khiển API của Google khi tạo Tài khoản dịch vụ. Điều này sẽ đảm bảo rằng tất cả
các yêu cầu API trong tương lai sẽ được ký bằng khoá riêng tư của Tài khoản dịch vụ:
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();
Sau khi đã tạo đối tượng Credential
, bạn có thể sử dụng đối tượng này để tạo thực thể cho một đối tượng.
đối tượng Storage
mới mà bạn có thể sử dụng cho tất cả các yêu cầu trong tương lai đến
API Google Cloud Storage:
Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);
Bây giờ, bạn đã có đối tượng Storage
mới, bạn có thể bắt đầu đưa ra yêu cầu để
API. Ở đây, bạn đang đưa ra yêu cầu truy xuất một mặt hàng cụ thể bucketObjectName
khỏi bộ chứa bucket
. Thư viện này xử lý việc tải tệp xuống qua HTTP từ
Google Cloud Storage, sau đó bạn chỉ cần in nội dung ra
bảng điều khiển:
Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString());
Giá trị bucket
và bucketObjectName
của bạn sẽ thay đổi tùy thuộc
bạn sẽ truy cập vào phần nào của API; hãy tham khảo phần thích hợp về cách đặt tên
quy ước của chúng tôi.
C#
Ví dụ sau đây sử dụng phương thức Thư viện ứng dụng API của Google dành cho .NET, giúp việc truy cập dữ liệu được lưu trữ trong Google Cloud Storage trở nên đơn giản và dễ dàng.
Trước tiên, bạn cần thiết lập thông tin đăng nhập để sử dụng khi giao tiếp với API nhằm được phép truy cập vào dữ liệu của bạn. Việc này được thực hiện bằng cách tạo một đối tượng AssertionFlowClient
sử dụng địa chỉ email developer.gserviceaccount.com
của Tài khoản dịch vụ làm ServiceAccountId
, đồng thời tải tệp khoá riêng tư mà bạn đã tải xuống từ Bảng điều khiển API của Google khi tạo Tài khoản dịch vụ.
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() };
Sau khi tạo đối tượng AssertionFlowClient
, bạn có thể dùng đối tượng này để tạo thực thể cho một đối tượng OAuth2Authenticator
mới. Bạn có thể dùng đối tượng này để tạo thực thể Storage
mới cho tất cả các yêu cầu sau này đến API Google Cloud Storage:
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth);
Bây giờ, bạn đã có đối tượng Storage
mới, bạn có thể bắt đầu tạo yêu cầu
cho API. Ở đây, bạn đưa ra yêu cầu truy xuất một mục cụ thể,
bucketObjectName
trong bộ chứa bucket
. Chúng tôi sử dụng tiêu chuẩn
Các lớp của thư viện ứng dụng .NET để xử lý việc tải HTTP xuống từ
Google Cloud Storage, nhưng bạn phải xử lý thủ công trường hợp
sẽ có lệnh chuyển hướng để đảm bảo rằng luôn có Authorization
chính xác
tiêu đề có trong yêu cầu:
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(); }
Sau đó, nội dung của phản hồi có thể được đọc từ đối tượng HttpWebResponse
qua GetResponseStream
như thường lệ. Giá trị của bạn cho bucket
và
bucketObjectName
sẽ khác nhau tuỳ thuộc vào phần API mà bạn đang truy cập; hãy tham khảo phần thích hợp về quy ước đặt tên.
Phụ lục: Mẫu hoàn chỉnh
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; } } }