通知

僅適用於 Google Ad Manager 360。

存取 Ad Manager 儲存空間值區

如何下載資料移轉檔案

Ad Manager 會運用 Google Cloud Storage 這項獨立的 Google 產品,來存放資料移轉報表批次上傳目標對象 Cookie ID 的資料。

本文旨在協助您使用標準 Google Cloud Storage 技術,以連結 Ad Manager 的特定雲端儲存空間設定。不過,Google Cloud Storage 的主要參考資料還是 Google Cloud Storage 開發人員網站

方法

您可以透過三種方式存取 Ad Manager Cloud Storage 值區。按複雜程度排列如下:

  • 使用線上版:前往 https://console.developers.google.com/storage/gdfp-[Ad Manager 聯播網代碼]
  • gsutil 是一個基於 Python 的指令列工具,可提供類似 Unix 的指令以便與儲存空間值區互動。系統會在背景自動處理值區驗證程序。
  • Google Cloud Storage API 功能齊全,可用來控管儲存空間值區,只要透過 JSON 或符合 REST 樣式的 XML 網路介面 (XML RESTful) 就能使用。API 用戶端程式庫可用於許多熱門的程式設計環境,包括 Java、JavaScript、Python 和 Objective-C。如果您採用程式設計方式操控儲存空間值區,以便與 Google App Engine 應用程式或 Java 網路應用程式整合,就非常適合這個方法。

本文將詳細介紹 Google Cloud Storage API。線上版和 gsutil 存取權較容易管理,因此建議您先探索這些方法。Google Cloud Storage 開發人員網站提供了詳細資料。

管理 Ad Manager 儲存空間值區的存取權

Ad Manager 使用的儲存空間值區包含在 Google 擁有的雲端儲存空間專案中。在 Google Developers Console 中,您自己的專案清單不會顯示 Ad Manager 儲存空間值區。

您需要與 Google 代表合作,設定依賴 Ad Manager 儲存空間值區的功能。Google 代表會提供 Google 群組,供您管理儲存空間值區。

如果您是現有 G Suite 群組的管理員,即可在啟用功能的過程中,將 G Suite Google 群組的名稱提供給您的代表。他們將與您合作,透過現有群組啟用依賴 Ad Manager 儲存空間值區的任何功能。

如果您管理多個可存取資料移轉功能的 Ad Manager 聯播網,則應將此資訊傳達給您的 Google 代表,以便整合聯播網管理作業。系統會使用一個群組來管理整個聯播網中的所有「資料移轉」值區。

不屬於 G Suite 的 Google 群組無法用來管理 Ad Manager 儲存空間值區。

使用 Google Cloud Storage API

如果您確定 API 存取方式最符合您的需求,我們建議您設定 Google Cloud Storage 服務帳戶。

設定 Google Cloud Storage 服務帳戶

透過 API 存取儲存空間值區時,建議您設定服務帳戶,而不是在使用者的環境中執行。服務帳戶會使用私密金鑰進行驗證 (而非動態產生的 OAuth 憑證),因此可簡化應用程式開發作業。如要設定服務帳戶:

  1. 前往 Google Developer Console

  2. 建立一個新專案 (或選取一個現有專案) 做為應用程式的上層,然後點選進入專案。

  3. (可選) 如果您打算將檔案從 Ad Manager 儲存空間值區複製到您自己的 Google Cloud Storage 帳戶,請按一下 [帳單和設定],為您的專案新增帳單來源。

  4. 建立新的用戶端 ID:

    1. 依序按一下 [API 和服務] > [憑證]

    2. 按一下 [建立新的用戶端 ID]

    3. 選取 [服務帳戶] 做為您的應用程式類型,然後按一下 [建立用戶端 ID]

    4. 產生的電子郵件地址格式為 [unique-id]@developer.gserviceagccount.com。複製並儲存電子郵件地址,以便加到您的 Google 群組。

    5. 按一下 [產生新的 P12 金鑰]。系統會將檔案儲存在您的電腦中。在您開發用來存取 API 的應用程式中使用這個金鑰,如以下程式碼範例所示。

  5. 將電子郵件地址加到您建立的 Google 群組,以管理對 Ad Manager 儲存空間值區的存取權限。請按一下 [直接新增成員]而不是透過「邀請」新增服務帳戶。如果您尚未取得所需權限,可以請 Google 群組管理員代表您新增地址。
程式碼範例

Google 提供 Google Cloud Storage 的程式碼範例和程式庫。以下用來讀取 Ad Manager Cloud Storage 值區檔案的 Java 範例,說明您在設定服務帳戶時所設定的元件對於程式碼可能造成的影響:

  • 專案名稱:Google Cloud Storage 專案的名稱。

  • 服務帳戶的電子郵件地址:您產生的電子郵件。

  • .p12 金鑰檔案:您下載的檔案。

  • 值區名稱:當您啟用依賴 Ad Manager 雲端儲存空間值區的功能時,Google 會提供這個名稱。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.GeneralSecurityException;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.model.StorageObject;

public class GcsApiTest {
    /**
     * 建立服務帳戶的專案名稱。
     * 
     * 此資訊顯示在 Google Developers Console 下。
     */
    private static final String PROJECT_NAME = "專案名稱";

    /**
     * 服務帳戶的開發人員電子郵件地址。
     * 
     * 這個電子郵件是在您的
     * Google Developers Console 中建立服務帳戶用戶端 ID 時產生,
     * 可以從「憑證」網頁取得。此電子郵件也必須新增到用來控制
     * 儲存空間值區存取權的 Google 群組。
     */
    private static final String SERVICE_ACCOUNT_EMAIL = "服務帳戶的電子郵件地址";

    /**
     * 用於儲存作業的值區。
     * 
     * 這個值區的名稱是由您的
     * 帳戶管理員提供。它的名稱可能類似於「gdfp-12345678」或
     *「gdfp_cookieupload_12345678」,具體取決於您使用的 Ad Manager 外掛程式。
     */
    private static final String BUCKET_NAME = "值區名稱";

    /**
     * Google Cloud Storage OAuth 2.0 讀取/寫入範圍。這應該
     * 對應到您的 Google Group 群組對
     * 值區所擁有的存取權,而且您無法要求未授予
     * 群組的存取權 (可能是 read_only)。
     */
    private static final String STORAGE_SCOPE = 
        "https://www.googleapis.com/auth/devstorage.read_write";

    /**
     * 提供值區存取權的 key.p12 檔案路徑。
     * 
     * 系統會在建立服務用戶端 ID 時建立這個檔案。如果您沒有
     * 這個檔案,就必須從 Google Developers Console
     * 產生新的用戶端 p12 金鑰。
     */
    private static final String KEY_P12 = ".p12 金鑰檔案的路徑";

    /** HTTP 傳輸。*/
    private HttpTransport httpTransport;
    private Storage storage;

    // 建構函式,可設定憑證和儲存空間物件
    public GcsApiTest() {
	File p12File = new File(KEY_P12);

	try {
	    httpTransport = GoogleNetHttpTransport.newTrustedTransport();

	    GoogleCredential credential = new GoogleCredential.Builder()
		    .setTransport(httpTransport)
		    .setJsonFactory(JacksonFactory.getDefaultInstance())
		    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
		    .setServiceAccountScopes(
			    Collections.singleton(STORAGE_SCOPE))
		    .setServiceAccountPrivateKeyFromP12File(p12File).build();
	    storage = new Storage.Builder(httpTransport,
		    JacksonFactory.getDefaultInstance(), credential)
		    .setApplicationName(PROJECT_NAME).build();
	} catch (GeneralSecurityException | IOException e1) {
	    e1.printStackTrace();
	    System.exit(1);
	}
    }

    /**
     * 傳回值區中第一個檔案名稱的方法。
     * 
     * @傳回檔案名稱;如果值區空白則傳回 null
     * @傳回 IOException
     */
    public String GetFirstFile() throws IOException {
	Storage.Objects.List listObjects = storage.objects().list(BUCKET_NAME);
	listObjects.setMaxResults(5L);
	com.google.api.services.storage.model.Objects objects = listObjects
		.execute();

	// empty bucket?
	if (null == objects.getItems() || objects.getItems().isEmpty()) {
	    System.out.println("Bucket \"" + BUCKET_NAME
		    + "\" empty or invalid.");
	    return null;
	}

	StorageObject object = objects.getItems().get(0);
	System.out.println("First object in bucket: \"" + object.getName()
		+ "\".");
	return object.getName();
    }

    /**
     * 從儲存空間值區下載指定檔案的方法
     * 
     * @參數檔案名稱
     *            應下載檔案的名稱。
     * @傳回 IOException
     */
    public void DownloadFile(String filename) throws IOException {
	Storage.Objects.Get getObject = storage.objects().get(BUCKET_NAME,
		filename);
	OutputStream os = new FileOutputStream(filename, true);
	getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
	getObject.executeMediaAndDownloadTo(os);

	System.out.println("File \"" + filename + "\" downloaded.");
    }

    /**
     * 執行不同測試的主要方法。
     * 
     * @param args
     */
    public static void main(String[] args) {
	GcsApiTest gcsApiTest = new GcsApiTest();

	try {
	    String filename = gcsApiTest.GetFirstFile();
	    gcsApiTest.DownloadFile(filename);
	} catch (IOException e) {
	    System.out.println(e.getMessage());
	}
    }
}

調節和並行連線

並行連線沒有預先定義的限制。但是為了避免濫用行為,Google 會限制資料移轉擷取請求。

歡迎閱讀官方「Google 程式碼」網誌的 Google Cloud Storage 部分,掌握最新消息,並將問題張貼至 Google Cloud Storage 論壇。請視情況在主旨行加上「錯誤」或「功能要求」字樣。如有其他 Google Cloud Storage 相關問題,請參閱 Google Cloud Storage 常見問題

這對您有幫助嗎?

我們應如何改進呢?
搜尋
清除搜尋內容
關閉搜尋
主選單
2662635201831992403
true
搜尋說明中心
true
true
true
true
true
148
false
false