通知

Google アド マネージャー 360 でのみご利用いただけます。

アド マネージャーのストレージ バケットにアクセスする

データ転送のファイルをダウンロードする方法

Google Cloud Storage は、アド マネージャーでデータ転送レポートオーディエンス セグメントに一括アップロードされる Cookie ID 用のデータ レポジトリとして使用されている、アド マネージャーとは別個の Google サービスです。

この記事では、標準の Google Cloud Storage 技術を使用して、アド マネージャー固有のクラウド ストレージ設定を操作する方法について説明します。Google Cloud Storage に関する主な情報源としては、Google Cloud Storage デベロッパーのサイトをご利用ください。

方法

アド マネージャーのクラウド ストレージ バケットにアクセスするには、次の 3 つの方法があります。扱いやすい順に記載しています。

  • ウェブ: https://console.developers.google.com/storage/gdfp-[アド マネージャーのネットワーク コード] にアクセスします。
  • gsutil: Python ベースのコマンドライン ツールである gsutil で Unix 系のコマンドを使用して、ストレージ バケットを操作できます。バケット認証は自動的に抽象化されて処理されます。
  • Google Cloud Storage API: ストレージ バケットを操作するための高機能な API です。JSON や XML RESTful といったウェブ インターフェースを通じて使用できます。API クライアント ライブラリは、Java、JavaScript、Python、Objective-C など多くの一般的なプログラミング環境で利用可能です。ストレージ バケットを Google App Engine アプリや Java ウェブアプリと統合するためにプログラムで操作する必要がある場合は、この方法が最も便利です。

この記事では、Google Cloud Storage API について詳しく説明します。ただしウェブ経由と gsutil によるアクセス方法のほうが扱いやすく、まずそちらを試すことをおすすめします。これらの方法について詳しくは、Google Cloud Storage デベロッパーのサイトをご覧ください。

アド マネージャーのストレージ バケットへのアクセスを管理する

アド マネージャーで使用されるストレージ バケットは、Google が所有するクラウド ストレージ プロジェクトに含まれます。Google Developers Console のお客様のプロジェクト リストには、アド マネージャーのストレージ バケットは表示されません。

アド マネージャーのストレージ バケットを使用した機能を設定するには、Google 担当者の協力が必要です。ストレージ バケット管理用の Google グループはその担当者から提供されます。

既存の G Suite グループの管理者の場合は、機能を有効にする手続きの際に G Suite Google グループの名前を担当者にお知らせいただけます。担当者は、お客様と連絡を取り合い、その既存のグループを使ってアド マネージャーのストレージ バケットを使用する機能を有効にします。

データ転送を使って複数のアド マネージャー ネットワークを管理している場合は、ネットワーク管理を統合できるように、Google 担当者にそのことを伝える必要があります。これにより、1 つのグループを使用して、さまざまなネットワークのすべてのデータ転送バケットを管理できるようになります。

G Suite 以外の Google グループを使用してアド マネージャーのストレージ バケットを管理することはできません。

Google Cloud Storage API を使用する

API によるアクセスがお客様のニーズに最適であることが判明した場合は、Google Cloud Storage のサービス アカウントを設定することをおすすめします。

Google Cloud Storage のサービス アカウントを設定する

API 経由でストレージ バケットにアクセスする場合は、ユーザー アカウントで実行せず、サービス アカウントを設定することをおすすめします。サービス アカウントでは、動的に生成される OAuth トークンの代わりに秘密キーを使って認証を行うので、アプリケーションの開発作業がよりシンプルになります。サービス アカウントの設定方法は次のとおりです。

  1. Google Developers Console に移動します。

  2. アプリケーションの親になる新しいプロジェクトを作成するか既存のプロジェクトを選択し、クリックしてプロジェクトを開きます。

  3. (省略可)アド マネージャーのストレージ バケットからお客様自身の Google Cloud Storage アカウントにファイルをコピーする場合は、[課金と設定] をクリックして、プロジェクトに請求ソースを追加します。

  4. 次の方法で新しいクライアント ID を作成します。

    1. [API とサービス] > [認証情報] をクリックします。

    2. [新しいクライアント ID を作成] をクリックします。

    3. アプリケーションの種類として [サービス アカウント] を指定し、[クライアント ID を作成] をクリックします。

    4. [固有 ID]@developer.gserviceagccount.com の形式のメールアドレスが作成されます。これをコピーして保存し、Google グループに追加します。

    5. [新しい P12 キーを作成] をクリックします。ファイルはローカルに保存されます。このキーは、開発したアプリケーションで API にアクセスするときに使用します。コード例は以下をご覧ください。

  5. アド マネージャーのストレージ バケットへのアクセスを管理するために作成した Google グループにメールアドレスを追加します。メンバーを「招待」するのではなく、[メンバーを直接追加] をクリックして、サービス アカウントを追加します。アクセス権がない場合は、Google グループの管理者にメールアドレスの追加を依頼してください。
コード例

Google では Google Cloud Storage のサンプルコードとライブラリを提供しています。以下は、アド マネージャーのクラウド ストレージ バケットからファイルを読み取る Java コードの例です。サービス アカウントの設定時に設定した要素がどのようにコードに組み込まれるのかをご確認ください。

  • プロジェクト名: Google Cloud Storage プロジェクトの名前です。

  • サービス アカウントのメールアドレス: 生成したメールアドレスです。

  • .p12 キーファイル: ダウンロードしたファイルです。

  • バケット名: アド マネージャーのクラウド ストレージ バケットを使用する機能を有効にするときに 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 = "project name";

    /**
     * サービス アカウントのデベロッパー メールアドレス。
     * 
     * このメールアドレスは、Google Developers Console でサービス アカウントの
     * クライアント ID を作成すると生成され、[認証情報] ページから取得
     * できます。ストレージ バケットへのアクセスを管理するために使用する
     * Google グループにも追加する必要があります。
     */
    private static final String SERVICE_ACCOUNT_EMAIL = "service account email address";

    /**
     * ストレージの操作に使用するバケット。
     * 
     * このバケットの名前は、テクニカル アカウント マネージャーから提供
     * されます。使用しているアド マネージャーのアドオンに応じて、「gdfp-12345678」や
     * 「gdfp_cookieupload_12345678」のような名前になります。
     */
    private static final String BUCKET_NAME = "bucket name";

    /**
     * Google Cloud Storage OAuth 2.0 の読み取り / 書き込みの対象範囲。これは
     * バケットに対する Google グループのアクセス権に対応します。
     * グループに認められていないアクセス権をリクエストすることはできません
     * (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 = "path to .p12 key file";

    /** 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();

	// バケットが空の場合
	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();
    }

    /**
     * 指定したファイルをストレージ バケットからダウンロードするためのメソッド。
     * 
     * @パラメータ filename
     *            ダウンロードするファイルの名前。
     * @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.");
    }

    /**
     * 各種テストを実行するメインのメソッド。
     * 
     * @パラメータ 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 Code 公式ブログの Google Cloud Storage に関するセクションをご覧ください。また、ご不明な点があれば、Google Cloud Storage ディスカッション フォーラムに投稿してください。その際、件名には「バグ」や「機能のリクエスト」といった具体的な言葉を含めてください。Google Cloud Storage について他にご不明な点がありましたら、Google Cloud Storage に関するよくある質問をご覧ください。

この情報は役に立ちましたか?

改善できる点がありましたらお聞かせください。
検索
検索をクリア
検索を終了
メインメニュー
9766178137381351895
true
ヘルプセンターを検索
true
true
true
true
true
148
false
false