1. はじめに
この Codelab では、Content API for Shopping と AdWords API の基本的な使い方を学習し、その両方を使用するアプリケーションを作成します。具体的には、Google 広告アカウントと Merchant Center アカウントを作成してリンクするコマンドライン アプリケーションを作成します。
学習内容
- クライアント センター(MCC)アカウントで管理されている AdWords アカウントを作成する方法。
- マルチクライアント アカウントで管理されている Merchant Center アカウントを作成する方法。
- Merchant Center アカウントから AdWords アカウントのリンクをリクエストする方法
- 保留中の Merchant Center リンクを AdWords アカウントで承認する方法。
必要なもの
- Google 広告クライアント センター(MCC)アカウント
- Merchant Center マルチクライアント アカウント
- Java 7 以降
- Maven
- サンプルコード
- テキスト エディタ(Eclipse や IntelliJ などの Maven プロジェクトを理解できる IDE を推奨)
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 認証を設定する
サービス アカウント キーをまだ取得していない場合:
- マルチクライアント アカウントの Merchant Center に移動し、オーバーフロー メニューから [Content API] を選択します。
- [Authentication] を選択し、青い [+] ボタン
をクリックします。
- 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
アカウントに保持し、SET
を ACTIVE
にします。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 では、まず AdWords アカウントを巧みに作成して、Merchant Center アカウントの作成時にその情報を使用してリンクをリクエストできるようにしました。ただし、Merchant Center アカウントがすでに存在する場合は、代わりに構成を更新する必要があります。まず Merchant Center アカウントを作成するようにコードを変更してから、AdWords アカウントの作成後に戻り、設定を更新してリンクをリクエストしてください。
追加の実習: AdWords と Merchant Center のアカウント情報を取得して、リンクの作成を確認する
現在、アプリケーションは API 呼び出しのエラーがないことを成功のサインとしてのみ扱います。サンプルを拡張して、新しい Merchant Center アカウントと AdWords アカウントのリンク情報をチェックし、リンクが実際に有効になっていることを確認します。
世界一のカキ
他にも改善の余地があると考える場合は、ぜひお試しください。アイデアの参照コードが必要な場合は、Google ショッピングのサンプルと、Google 広告 Java クライアント ライブラリ ソースの examples
ディレクトリをご覧ください。