AdWords と Merchant Center のサブアカウントの作成とリンク

1. はじめに

この Codelab では、Content API for ShoppingAdWords API の基本的な使い方を学習し、その両方を使用するアプリケーションを作成します。具体的には、Google 広告アカウントと Merchant Center アカウントを作成してリンクするコマンドライン アプリケーションを作成します。

学習内容

  • クライアント センター(MCC)アカウントで管理されている AdWords アカウントを作成する方法。
  • マルチクライアント アカウントで管理されている Merchant Center アカウントを作成する方法。
  • Merchant Center アカウントから AdWords アカウントのリンクをリクエストする方法
  • 保留中の Merchant Center リンクを AdWords アカウントで承認する方法。

必要なもの

2. 設定方法

コードをダウンロード

次のリンクをクリックして、この Codelab 用のコードすべてをダウンロードします。

ダウンロードした zip ファイルを解凍すると、ルートフォルダ(shopping-account-linking-master)が展開されます。このフォルダには、Maven プロジェクトと必要なリソースがすべて含まれています。特に注目すべきサブディレクトリは次のとおりです。

  • src/main/java は Maven プロジェクトのソースルートであり、作業に使用するコードスケルトンが含まれています。
  • src/main/java/solution には完成したソリューションが含まれています。

必要なパッケージをインストールしてビルドする

Eclipse や IntelliJ などの Maven 対応 IDE を使用している場合は、抽出したフォルダを Maven プロジェクトとしてインポートし、通常どおりプロジェクトをコンパイルできます。

コマンドラインから Maven を使用する場合は、次のコマンドを実行して必要なパッケージを取得し、展開したプロジェクトのルートフォルダ(shopping-account-linking-master)からプロジェクトをコンパイルします。

mvn compile

3. 認証を設定する

このステップではコーディングは行いませんが、AdWords API と Content API for Shopping で使用する適切な認証トークンを含むファイルを設定します。

AdWords API 認証を設定する

この Codelab ではクライアント ライブラリと同じ認証情報の読み込みを使用します。そのため、MCC アカウントで Java 用 Google 広告 API クライアント ライブラリをすでに使用している場合は、すでに設定されています。それ以外の場合は、Java 用 Google 広告 API クライアント ライブラリの利用開始の手順 1 ~ 3 に沿って操作してください。

Content API 認証を設定する

サービス アカウント キーをまだ取得していない場合:

  1. マルチクライアント アカウントの Merchant Center に移動し、オーバーフロー メニューから [Content API] を選択します。89507d635c51a3dc.png
  2. [Authentication] を選択し、青い [+] ボタン c465d8dc314ec158.png をクリックします。
  3. Google Cloud Platform と Google API の利用規約に同意すると、新しいサービス アカウント キーを含む JSON ファイルが自動的にブラウザにダウンロードされます。

次に、サービス アカウントを使用したショッピング サンプルの認証の設定手順に沿って操作します。つまり、サービス アカウント キーのコピーは、ホーム ディレクトリからのパス shopping-samples/content/service-account.json にあります。この Codelab の終了後、サンプルを試すことに興味がない限り、サンプル構成を設定する必要はありません。

テストする

認証トークンを適切な場所に配置できたので、サンプルを実行してみましょう。コマンドラインで Maven を使用する場合は、次のコマンドを実行します。

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

セッション オブジェクトが指定されていないというエラー メッセージが表示された場合は、認証トークンが適切に機能しています。それ以外の場合は、表示されるエラー メッセージから、どの認証情報で機能しなかったのかと、どのファイルを修正すべきかがわかります。

4. API に接続する

使用する 2 つの API に有効な認証トークンを取得できたので、実際のコードの入力を始めましょう。まず、認証トークンを使用してセッション オブジェクトを作成します。後のステップでは、これらのセッション オブジェクトを使用して、各 API が提供するさまざまなサービスとメソッドにアクセスします。

Content API セッション オブジェクトを作成する

Content API セッションを作成するには、ShoppingContent.Builder オブジェクトを作成し、それを使用して適切な ShoppingContent オブジェクトを作成します。幸いなことに、前者を構築するために必要なものはコードスケルトンですでに利用できるため、次のようにしてまとめる必要があります。

SolutionRunner.java

// TODO(sessions): Create a ShoppingContent object using ShoppingContent.Builder.
contentApiSession =
    new ShoppingContent.Builder(httpTransport, jsonFactory, contentApiCredential)
        .setApplicationName("Linking AdWords and Merchant Center Accounts Codelab")
        .build();

アプリ名の設定は必須ではありませんが、build() メソッドを呼び出す前に ShoppingContent.Builder オブジェクトを介して必要なオプションを設定する方法を示しています。

AdWords API のセッション オブジェクトを作成する

同様に、AdWordsSession オブジェクトを作成するための AdWordsSession.Builder クラスもあります。主な違いは、設定オプションをビルダーで直接設定するのではなく、fromFile() メソッドを使用して、前のステップで設定した ads.properties ファイルから読み込むことです。

SolutionRunner.java

// TODO(sessions): Create a AdWordsSession object using AdWordsSession.Builder.
adWordsSession =
    new AdWordsSession.Builder()
        .fromFile()
        .withOAuth2Credential(adwordsOAuth2Credential)
        .build();

テストする

Maven プロジェクトを再ビルドして実行するには、前のセクションと同じコマンドを使用します(コマンドラインから実行している場合)。

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

今回はエラーはまったく表示されませんが、興味深い出力は得られません。API を呼び出して新しいアカウントの作成とリンクを行うときに、その ID を追加します。

5. AdWords 管理対象のアカウントを新規作成する

API セッション オブジェクトを作成できたので、リンクするアカウントを作成します。まず AdWords で MCC アカウントでテスト アカウントを作成します。

ManagedCustomerService にアクセスする

AdWords API では、利用可能な各種サービスにアクセスするには、まず getInstance() 静的メソッドを使用して AdWordsServices クラスのインスタンスを取得します。このインスタンスを使用すると、get() メソッドでこれらのサービスのクライアントを作成できます。このメソッドは、クライアントを作成するセッションと、目的のサービスのインターフェースの 2 つの引数を取ります。

SolutionRunner.java

// TODO(newAWaccount): Using the ManagedCustomerService, create a new testing AdWords account
// under the given manager account.

AdWordsServicesInterface adWordsServices = AdWordsServices.getInstance();

ManagedCustomerServiceInterface managedCustomerService =
    adWordsServices.get(adWordsSession, ManagedCustomerServiceInterface.class);

ここでは、AdWords の「顧客」を管理できる ManagedCustomerService にアクセスします。(複数のアカウント)にアクセスできます。

新しいアカウント設定を指定する

まず、新しいアカウントの設定を含む ManagedCustomer オブジェクトを作成します。この Codelab のテスト アカウントを作成し、通貨を米ドル、タイムゾーンを米国西海岸と同じにします。

SolutionRunner.java

Random rand = new Random();
long run = rand.nextLong();

ManagedCustomer newAdWordsAccount = new ManagedCustomer();
newAdWordsAccount.setName(String.format("AdWords Account Created by Run %d", run));
newAdWordsAccount.setTestAccount(true);
newAdWordsAccount.setCurrencyCode("USD");
newAdWordsAccount.setDateTimeZone("America/Los_Angeles");

また、アカウント名に含まれる乱数も作成されます。これは、ここで作成する AdWords アカウントと、後で作成する Merchant Center アカウントを照合できるようにするためです。これにより、ソリューションの完了後にこれらのアカウントが視覚的に調査され、実際に 2 つがリンクされていることを確認できます。

新しい管理対象アカウントを作成する

実際に新しいアカウントを作成するには、ManagedCustomerOperation を使用して ADD オペレーションを指定します。

SolutionRunner.java

ManagedCustomerOperation operation = new ManagedCustomerOperation();
operation.setOperand(newAdWordsAccount);
operation.setOperator(Operator.ADD);

次に、ManagedCustomerService オブジェクトの mutate() メソッドを使用してオペレーションを実行します。このメソッドは実行するオペレーションの配列を受け取りますが、ここでは単一のオペレーションのみを実行します。mutate() メソッドの結果は、ManagedCustomer のリストを含む値です。ここには 1 人の顧客(作成した新しいアカウント)を含むリストが表示されます後で使用するために新しいアカウントの ID を取得します。また、ソリューションの出力の一部として確認できるように印刷します。

SolutionRunner.java

ManagedCustomerReturnValue result =
    managedCustomerService.mutate(new ManagedCustomerOperation[] {operation});
Long adWordsId = result.getValue()[0].getCustomerId();
System.out.printf("Created new AdWords account %d%n", adWordsId);

テストする

前と同じように、ソリューションを実行してみてください。コマンドラインから Maven を使用する場合:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

問題がなければ、エラーは表示されず、今度は作成した新しい AdWords アカウントの ID が表示されます。AdWordsサイトでお客様のクライアント センター(MCC)アカウントを確認すると、新しいアカウントも表示されているはずです。

6. 新しい Merchant Center サブアカウントを作成する

このステップでは、前のステップで作成した AdWords アカウントにリンクする Merchant Center サブアカウントを作成します。サブアカウントの作成後にリンクを個別にリクエストする代わりに、作成時にリンクをリクエストできます。これは、対応する AdWords アカウントの ID がすでにわかっているためです。

新しいサブアカウントの設定を指定する

AdWords API とは異なり、Account モデルクラスのセッターはオブジェクトを返すので、新しい Account オブジェクトで呼び出しを連結できます。AdWords アカウントの作成時に生成された乱数が、新しい Merchant Center アカウントの名前にも使用されます。

SolutionRunner.java

Account newMcAccount = new Account()
    .setName(String.format("Merchant Center Account Created by Run %d", run))
    .setAdwordsLinks(
        ImmutableList.of(
            new AccountAdwordsLink()
                .setAdwordsId(BigInteger.valueOf(adWordsId))
                .setStatus("active")));

この手順の冒頭で述べたように、新しい子アカウントの AdWords ID はわかっているので、この ID を新しいサブアカウントの AdwordsLinks リストに追加します。新しいサブアカウントを作成すると、このリンクが自動的にリクエストされ、AdWords API で利用できるようになります。

新しいサブアカウントを作成する

Content API では、セッション オブジェクトの accounts() メソッドを呼び出して Accounts サービスにアクセスし、オペレーション オブジェクトを設定する代わりに、insert() メソッドを呼び出します。このメソッドは 2 つの引数を取ります。1 つは新しいサブアカウントの作成に使用するマルチクライアント アカウントの ID、もう 1 つは必要な設定を含む Account オブジェクトです。

SolutionRunner.java

newMcAccount = contentApiSession.accounts().insert(mcaId, newMcAccount).execute();

System.out.printf("Created new Merchant Center account %s%n", newMcAccount.getId());

insert() メソッドは、新しいサブアカウントの設定を含む Account オブジェクトを返します。返されたバージョンには新しいサブアカウントの ID という重要な情報が含まれているため、元の Account オブジェクトを上書きします。これをソリューションの出力に出力します。これにより、ソリューションを実行し、新しいサブアカウントが Merchant Center に存在することを確認できます。

テストする

前と同じように、ソリューションを実行してみてください。コマンドラインから Maven を使用する場合:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

問題がなければ、エラーは表示されず、今回は新しい AdWords アカウントと新しい Merchant Center アカウントの両方の ID が表示されます。マルチクライアント アカウントの Merchant Center で新しいサブアカウントをご確認ください。

7. AdWords アカウントからリンクを承認する

前のステップでは、新しい Merchant Center サブアカウントを作成し、新しい AdWords アカウントへのリンクもリクエストしました。このステップでは、Google 広告 API を使用してリクエストされたリンクを承認し、プロセスを終了します。

CustomerService にアクセスします。

以前と同様に、AdWordsServices クラスを使用して CustomerService のクライアントを取得します。ただし、クライアントを作成する前に、今後の利用が MCC アカウントではなく新しい子アカウントで動作するように、まず AdWords セッション オブジェクトを変更します。結局のところ、Merchant Center アカウントは MCC アカウントではなく管理対象アカウントへのリンクをリクエストしています。

SolutionRunner.java

// TODO(acceptLink): Using the mutateServiceLinks method in CustomerService, accept the
// proposed link between the new AdWords account and the new Merchant Center account.

adWordsSession.setClientCustomerId(adWordsId.toString());

CustomerServiceInterface customerService =
    adWordsServices.get(adWordsSession, CustomerServiceInterface.class);

新しい AdWords アカウントを作成したときと同様に、リンクの設定を含む ServiceLink オブジェクトと、目的の操作を表す ServiceLinkOperation オブジェクトを作成します。ここでは、保留中のサービスリンクを MERCHANT_CENTER アカウントに保持し、SETACTIVE にします。serviceLinkId の設定では、先ほど作成した Merchant Center アカウントの ID を使用します。これは、Google 広告のサービスリンクの ID になります。

SolutionRunner.java

ServiceLink serviceLink = new ServiceLink();
serviceLink.setServiceLinkId(newMcAccount.getId().longValue());
serviceLink.setLinkStatus(ServiceLinkLinkStatus.ACTIVE);
serviceLink.setServiceType(ServiceType.MERCHANT_CENTER);

ServiceLinkOperation op = new ServiceLinkOperation();
op.setOperator(Operator.SET);
op.setOperand(serviceLink);

最後に、CustomerService オブジェクトの mutateServiceLinks() メソッドを呼び出して、オペレーションを実行します。以前と同様に、サービスリンク オペレーションの配列を受け取ります。今回は、(変更される可能性がある)サービスリンクのリストが直接返されるので、そのリストをループして、解答の結果を出力します。もちろん、ここで指定した操作は 1 つのみなので、出力にはリンクが 1 つしか出力されないはずです。

SolutionRunner.java

ServiceLink[] mutatedServiceLinks =
    customerService.mutateServiceLinks(new ServiceLinkOperation[] {op});
for (ServiceLink mutatedServiceLink : mutatedServiceLinks) {
  System.out.printf(
      "Service link with service link ID %d, type '%s' updated to status: %s.%n",
      mutatedServiceLink.getServiceLinkId(),
      mutatedServiceLink.getServiceType(),
      mutatedServiceLink.getLinkStatus());
}

テストする

前と同じように、ソリューションを実行してみてください。コマンドラインから Maven を使用する場合:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

問題がなければ、エラーは表示されず、今度はサービスリンクがアクティブに更新されたことを示すメッセージが表示されます。AdWordsMerchant Center で、アカウントが本当にリンクされていることを再度確認します。

8. テーマのバリエーション

お疲れさまでした。これで、この Codelab は終了です。問題なく機能するソリューションが完成しました。次は、この Codelab で見てきた API をさらに使用するために、ソリューションを変更または拡張する方法の例を見ていきましょう。

この Codelab では、まず AdWords アカウントを巧みに作成して、Merchant Center アカウントの作成時にその情報を使用してリンクをリクエストできるようにしました。ただし、Merchant Center アカウントがすでに存在する場合は、代わりに構成を更新する必要があります。まず Merchant Center アカウントを作成するようにコードを変更してから、AdWords アカウントの作成後に戻り、設定を更新してリンクをリクエストしてください。

現在、アプリケーションは API 呼び出しのエラーがないことを成功のサインとしてのみ扱います。サンプルを拡張して、新しい Merchant Center アカウントと AdWords アカウントのリンク情報をチェックし、リンクが実際に有効になっていることを確認します。

世界一のカキ

他にも改善の余地があると考える場合は、ぜひお試しください。アイデアの参照コードが必要な場合は、Google ショッピングのサンプルと、Google 広告 Java クライアント ライブラリ ソースexamples ディレクトリをご覧ください。