1. はじめに
この Codelab では、Content API for Shopping と AdWords API の基本的な使い方を学び、両方を使用するアプリケーションを構築します。具体的には、AdWords アカウントと Merchant Center アカウントを作成してリンクするコマンドライン アプリケーションを構築します。
学習内容
- MCC アカウントで管理する AdWords アカウントを作成する方法。
- マルチクライアント アカウントで管理される Merchant Center アカウントを作成する方法。
- Merchant Center アカウントから AdWords アカウントへのリンクをリクエストする方法。
- AdWords アカウントで保留中の Merchant Center リンクを承認する方法。
必要なもの
- AdWords クライアント センター(MCC)アカウント
- Merchant Center マルチクライアント アカウント
- Java 7 以降
- Maven
- サンプルコード
- テキスト エディタ(Eclipse や IntelliJ などの Maven プロジェクトを理解する IDE を推奨)
2. 設定方法
code をダウンロードする
次のリンクをクリックして、この 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)アカウントで Google Ads APIs Client Library for Java をすでに使用している場合は、すでに設定が完了しているはずです。それ以外の場合は、Java 用 Google Ads API クライアント ライブラリのスタートガイドの手順 1 ~ 3 に沿って操作します。
Content API の認証を設定する
サービス アカウント キーがまだない場合:
- マルチクライアント アカウントの Merchant Center に移動し、オーバーフロー メニューから [Content API] を選択します。

- [認証] を選択し、青い [+] ボタンをクリックします。

- 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);
ここでは、ManagedCustomerService にアクセスします。これにより、特定の MCC アカウントから AdWords の「顧客」(アカウント)を管理できます。
新しいアカウント設定を指定する
まず、新しいアカウントの設定を含む 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 アカウントを照合して、ソリューションが完成したときに両者がリンクされていることを確認できるようにするためです。
新しい管理対象アカウントを作成する
新しいアカウントを実際に作成するには、ManagedCustomerOperation を使用して ADD オペレーションを指定します。
SolutionRunner.java
ManagedCustomerOperation operation = new ManagedCustomerOperation();
operation.setOperand(newAdWordsAccount);
operation.setOperator(Operator.ADD);
次に、ManagedCustomerService オブジェクトの mutate() メソッドを使用してオペレーションを実行します。このメソッドは実行するオペレーションの配列を受け取りますが、ここでは 1 つのオペレーションのみを実行します。mutate() メソッドの結果は、ManagedCustomer のリストを含む値です。ここでは、作成した新しいアカウントである 1 人の顧客を含むリストになります。この新しいアカウントの ID を取得して後で使用します。また、ソリューションの出力の一部として確認できるように、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 が表示されます。MCC アカウントの AdWords サイトを確認すると、新しいアカウントが一覧に表示されます。
6. 新しい Merchant Center サブアカウントを作成する
このステップでは、前のステップで作成した AdWords アカウントにリンクする Merchant Center サブアカウントを作成します。サブアカウントの作成後にリンクを個別にリクエストするのではなく、対応する AdWords アカウントの ID がすでに存在するため、作成時にリンクをリクエストできます。
新しいサブアカウントの設定を指定する
AdWords API とは異なり、Account モデルクラスのセッターはオブジェクトを返すため、新しい Account オブジェクトでセッターへの呼び出しをチェーンできます。新しい Merchant Center アカウントの名前にも、Google 広告アカウントの作成時に生成されたランダムな番号が使用されます。
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 はすでに取得済みであるため、新しいサブアカウントの AdwordsLinks のリストにその ID を追加できます。新しいサブアカウントが作成されると、このリンクは自動的にリクエストされ、AdWords API で利用可能になります。
新しいサブアカウントを作成する
Content API では、セッション オブジェクトの accounts() メソッドを呼び出して Accounts サービスにアクセスし、オペレーション オブジェクトを設定する代わりに insert() メソッドを直接呼び出します。このメソッドは、新しいサブアカウントを作成するマルチクライアント アカウントの ID と、目的の設定を含む Account オブジェクトの 2 つの引数を取ります。
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 アカウントへのリンクをリクエストしました。このステップでは、AdWords API を使用してリクエストされたリンクを承認し、プロセスを完了します。
CustomerService にアクセスする
これまでと同様に、AdWordsServices クラスを使用して CustomerService のクライアントを取得します。ただし、クライアントを作成する前に、AdWords セッション オブジェクトを変更して、今後使用する際に MCC アカウントではなく新しい管理アカウントで動作するようにします。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 アカウントに取得し、ACTIVE に SET します。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"
すべてがうまくいけば、エラーは表示されず、サービスリンクが有効になるように更新されたというメモが表示されます。AdWords と Merchant Center を確認し、アカウントがリンクされていることを再度確認します。
8. テーマのバリエーション
お疲れさまでした。これでこの Codelab は終了です。これで、完全に機能するソリューションが完成しました。この Codelab で学習した API をさらに活用するために、ソリューションを変更または拡張する方法の例を見てみましょう。
追加課題: 既存の Merchant Center アカウントを更新して AdWords リンクをリクエストする
この Codelab では、Merchant Center アカウントの作成時にリンクをリクエストする際に AdWords アカウントの情報を使用できるように、AdWords アカウントを先に作成しました。ただし、Merchant Center アカウントがすでに存在する場合は、代わりにその設定を更新する必要があります。コードを変更して、まず Merchant Center アカウントを作成し、AdWords アカウントを作成してから戻って、リンクをリクエストするように構成を更新してみてください。
追加の課題: AdWords アカウントと Merchant Center アカウントの情報を取得して、リンクの作成を確認する
現在、アプリケーションは API 呼び出しからのエラーがないことのみを成功の兆候として扱っています。例を拡張して、新しい Merchant Center アカウントと AdWords アカウントのリンク情報を確認し、リンクが実際に有効であることを確認します。
世界はあなたの思いのまま
他にも変更できる点があれば、ぜひお試しください。アイデアの参照コードが必要な場合は、Google ショッピングのサンプルと、Google 広告 Java クライアント ライブラリのソースの examples ディレクトリをご覧ください。