チュートリアル: Java Bing Ads API Web アプリケーション
次の Java Web アプリケーションの例では、指定した資格情報を使用してユーザーの同意を求め、認証されたユーザーがアクセスできるアカウントを取得します。
最初にアプリケーションを登録し、クライアント ID (登録済みアプリケーション ID)、クライアント シークレット (登録済みパスワード)、リダイレクト URI を書き留めておく必要があります。 アプリケーションの登録と承認コード付与フローの詳細については、「 OAuth による認証」を参照してください。
運用 開発者トークンも必要です。 以下で説明するように、サンプルを段階的に作成するか、 GitHub からより多くの例をダウンロードできます。
注:
この例では、運用環境での OAuth 認証を示します。 サンドボックスの構成については、「 サンドボックスの構成」を参照してください。
Web アプリケーション認証の例の Walk-Through
Eclipse 開発環境を開きます。
File -New -Project ->Maven ->Maven>Project> を使用して新しいプロジェクトを作成し、[次へ] をクリックします。
[ 新しい Maven プロジェクト ] ダイアログで、[ 単純なプロジェクトを作成する (アーキタイプの選択をスキップする)] オプションが選択されていないことを確認し、[ 次へ] をクリックします。 次の手順で Maven アーキタイプを選択します。
[ 新しい Maven プロジェクト ] ダイアログで、Maven Web アプリのアーキタイプを選択し、[ 次へ] をクリックします。 グループ ID は org.apache.maven.archetypes で、成果物 ID は maven-archetype-webapp です。
[ 新しい Maven プロジェクト ] ダイアログで、プロジェクトの成果物パラメーターを指定し、[ 完了] をクリックします。 たとえば、 グループ ID を com.microsoft.bingads.examples に、 成果物 ID を BingAdsWebApp に設定できます。
必要な javax サーブレット JAR が Java ビルド・パスにまだ存在しない場合は、プロジェクト・ライブラリーに追加します。 プロジェクト エクスプローラーで、BingAdsWebApp プロジェクトを右クリックし、[プロパティ] をクリックします。 [プロパティ] ダイアログの [Java ビルド パス ->ライブラリ] タブに移動し、[外部 JAR の追加] をクリックし、{EclipseInstallationPath}/plugins/ に移動し、たとえば、javax.servlet.jsp_2.2.0.v201112011158 と javax.servlet_3.0.0.v201112011016 の両方を選択します。
サーブレット JAR をプロジェクトの順序とエクスポートされたエントリに含めます。 [Java ビルド パス ->順序とエクスポート] タブで、[すべて選択] (少なくともサーブレット JAR を選択) をクリックし、[完了] をクリックします。
プロジェクトの Web 配置アセンブリにサーブレット JAR を含めます。 プロジェクト エクスプローラーで、BingAdsWebApp プロジェクトを右クリックし、[プロパティ] を選択します。 [プロパティ] ダイアログの [配置アセンブリ ->追加] に移動し、[Java ビルド パス エントリ] を選択して、[次へ] をクリックします。 前の手順で追加したすべての JAR を選択し、[新しいアセンブリ ディレクティブ] ダイアログで [完了] をクリックし、[プロパティ] ダイアログで [適用] をクリックします。
プロジェクト エクスプローラーで、pom.xml ファイルを右クリックし、[Open With -Text Editor]\(テキスト> エディターで開く\) を選択します。 次の例に示すように 、com.microsoft.bingads 依存関係を 追加し、pom.xml 保存します。
注:
最新の SDK 依存関係バージョンの詳細については、 Bing Ads Java SDK GitHub README.md を参照してください。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.microsoft.bingads.examples</groupId> <artifactId>BingAdsWebApp</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>BingAdsWebApp Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.microsoft.bingads</groupId> <artifactId>microsoft.bingads</artifactId> <version>13.0.17</version> </dependency> </dependencies> <build> <finalName>BingAdsWebApp</finalName> </build> </project>
プロジェクト エクスプローラーで、BingAdsWebApp プロジェクトの Web コンテンツ フォルダーを右クリックし、新しい ->JSP ファイルを選択します。 ファイルに index.jsp という名前を付け、[完了] をクリック します。
Index.jsp ファイルを開き、その内容を次のコード ブロックに置き換えます。 アプリケーションを登録したときにプロビジョニングされた ClientId、ClientSecret、および RedirectionUri を使用して、以下のサンプルを編集する必要があります。 また、運用 開発者トークンを使用して例を編集する必要もあります。 サンドボックスを使用している場合は、「 サンドボックスの構成」の手順に従う必要があります。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.net.URL" %> <%@ page import="com.microsoft.bingads.*" %> <%@ page import="com.microsoft.bingads.v13.customermanagement.*" %> <%! static AuthorizationData authorizationData; static ServiceClient<ICustomerManagementService> CustomerService; private static java.lang.String DeveloperToken = "<DeveloperTokenGoesHere>"; private static java.lang.String ClientId = "<ClientIdGoesHere>"; private static java.lang.String ClientSecret = "<ClientSecretGoesHere>"; private static java.lang.String RedirectUri = "<RedirectUriGoesHere>"; static long accountsCount = 0; %> <%! //Gets a User object by the specified Microsoft Advertising user identifier. static User getUser(java.lang.Long userId) throws Exception { GetUserRequest request = new GetUserRequest(); request.setUserId(userId); return CustomerService.getService().getUser(request).getUser(); } // Searches by UserId for accounts that the user can manage. static ArrayOfAdvertiserAccount searchAccountsByUserId(java.lang.Long userId) throws AdApiFaultDetail_Exception, ApiFault_Exception{ ArrayOfPredicate predicates = new ArrayOfPredicate(); Predicate predicate = new Predicate(); predicate.setField("UserId"); predicate.setOperator(PredicateOperator.EQUALS); predicate.setValue("" + userId); predicates.getPredicates().add(predicate); Paging paging = new Paging(); paging.setIndex(0); paging.setSize(10); final SearchAccountsRequest searchAccountsRequest = new SearchAccountsRequest(); searchAccountsRequest.setPredicates(predicates); searchAccountsRequest.setPageInfo(paging); return CustomerService.getService().searchAccounts(searchAccountsRequest).getAccounts(); } // Outputs the account and parent customer identifiers for the specified accounts. static void printAccounts(ArrayOfAdvertiserAccount accounts) throws Exception { for (Account account : accounts.getAccounts()) { System.out.printf("AccountId: %d\n", account.getId()); System.out.printf("CustomerId: %d\n", account.getParentCustomerId()); } } %> <% // Main execution try { OAuthWebAuthCodeGrant oAuthWebAuthCodeGrant = new OAuthWebAuthCodeGrant( ClientId, ClientSecret, new URL(RedirectUri) ); oAuthWebAuthCodeGrant.setNewTokensListener(new NewOAuthTokensReceivedListener() { @Override public void onNewOAuthTokensReceived(OAuthTokens newTokens) { java.lang.String newAccessToken = newTokens.getAccessToken(); java.lang.String newRefreshToken = newTokens.getRefreshToken(); java.lang.String refreshTime = new java.text.SimpleDateFormat( "MM/dd/yyyy HH:mm:ss").format(new java.util.Date()); System.out.printf("Token refresh time: %s\n", refreshTime); System.out.printf("New access token: %s\n", newAccessToken); System.out.printf("You should securely store this new refresh token: %s\n", newRefreshToken); } }); if (authorizationData == null) { if (request.getParameter("code") == null) { URL authorizationUrl = oAuthWebAuthCodeGrant.getAuthorizationEndpoint(); response.sendRedirect(authorizationUrl.toString()); return; } else { OAuthTokens tokens = oAuthWebAuthCodeGrant.requestAccessAndRefreshTokens( new URL(request.getRequestURL() + "?" + request.getQueryString())); authorizationData = new AuthorizationData(); authorizationData.setDeveloperToken(DeveloperToken); authorizationData.setAuthentication(oAuthWebAuthCodeGrant); } } CustomerService = new ServiceClient<ICustomerManagementService>( authorizationData, ICustomerManagementService.class); User user = getUser(null); // Search for the accounts that the user can access. ArrayOfAdvertiserAccount accounts = searchAccountsByUserId(user.getId()); accountsCount = accounts.getAccounts().size(); System.out.println("The user can access the following Microsoft Advertising accounts: \n"); printAccounts(accounts); // Customer Management service operations can throw AdApiFaultDetail. } catch (AdApiFaultDetail_Exception ex) { System.out.println("The operation failed with the following faults:\n"); for (AdApiError error : ex.getFaultInfo().getErrors().getAdApiErrors()) { System.out.printf("AdApiError\n"); System.out.printf("Code: %d\nError Code: %s\nMessage: %s\n\n", error.getCode(), error.getErrorCode(), error.getMessage() ); } // Customer Management service operations can throw ApiFault. } catch (ApiFault_Exception ex) { System.out.println("The operation failed with the following faults:\n"); for (OperationError error : ex.getFaultInfo().getOperationErrors().getOperationErrors()) { System.out.printf("OperationError\n"); System.out.printf("Code: %d\nMessage: %s\n\n", error.getCode(), error.getMessage() ); } } catch (Exception ex) { // Ignore fault exceptions that we already caught. if (ex.getCause() instanceof AdApiFaultDetail_Exception || ex.getCause() instanceof ApiFault_Exception ) { ; } else { System.out.println("Error encountered: "); System.out.println(ex.getMessage()); ex.printStackTrace(); } } %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Microsoft Advertising Web Application Example</title> <link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen"> </head> <body> <div id="content" class="container"> <div> <br/> <b>You have <%= accountsCount %> accounts</b> </div> </div> </body> </html>
アプリケーションをサーバーにデプロイする準備ができました。 たとえば、Azure App Serviceを使用して Web アプリを発行できます。 詳細については、「 Web アプリケーションのデプロイ」を参照してください。 アプリケーションを起動すると、運用環境で認証するための Microsoft アカウント資格情報が既定で求められます。
Web アプリケーションのデプロイ
Microsoft Azure を使用して Web アプリケーションをデプロイする場合は、次のものが必要です。
Apache Tomcat、GlassFish、JBoss Application Server、Jetty、IBM® WebSphere® Application Server Liberty Core などの Java ベースの Web サーバーまたはアプリケーション サーバーのディストリビューション。
から取得 https://azure.microsoft.com/pricing/purchase-options/できる Azure サブスクリプション。
必要に応じて、Azure Toolkit for Eclipse (Microsoft Open Technologies によって) をインストールし、Azure クラウド サービスを使用して Web アプリケーションをデプロイできます。 詳細については、「 Azure Toolkit for Eclipse のインストール」を参照してください。