プログラマティックに承認済みプロバイダとやり取りするために使用できる API は 3 つあります。 購入者:
- Marketplace API: 取引、オークション パッケージ、クライアント アクセスを管理できます。
- Real-time Bidding API: QPS などの入札の管理 割り当て ターゲティング、 とクリエイティブ。
- (非推奨)Ad Exchange Buyer API II: この API は非推奨となりました。関連リソース以外のリソースは RTB のトラブルシューティング 日没です。
認定バイヤーを使用して実施できるタスクの例 API:
- リアルタイム ビッダーのアカウント情報にアクセスします。
- 審査中のクリエイティブを送信、管理します。
- リアルタイム ビッダーのトラブルシューティング指標を取得する。
- 認定バイヤーのユーザーの管理 リストをご覧ください。
- プレターゲティング設定を管理します。
- Marketplace のクライアント アクセスを構成します。
- マーケットプレイスで取引の提案を見つけて管理します。
認定バイヤーの詳細については、認定バイヤー ヘルプをご覧ください。 Center と UI をご覧ください。
クイックリンク
認証を設定する
Google API は、サービス用に OAuth 2.0 プロトコルを使用します。 認証と認可の 2 つがあります。Google Chat 向けの認証を設定する方法は次のとおりです。 Real-time Bidding API: OAuth 2.0 を使用します。
この例では、サービス 。詳しくは、Google Cloud ID アクセス管理 ドキュメントをご覧ください。
プロジェクトのプルダウンから、プロジェクトを選択するか、新しいプロジェクトを作成します。
有効な API のリストに、Real-time Bidding API が表示されていることを確認します。条件 表示されない場合は、[Google API] タブをクリックして、 Real-time Bidding API を選択し、[API を有効にする] をクリックします。
次に、左側のサイドバーで [認証情報] を選択します。
[認証情報を作成] プルダウンを選択し、[サービス アカウント] を選択します。 キーです。
[サービス アカウント] プルダウンで、[新しいサービス アカウント] を選択します。
サービス アカウントの名前を入力します。サービス アカウント ID は、 名前とプロジェクト名から自動的に生成されます。
サービス アカウント ID をメモしておきます。これは、新しいサービスへのアクセス権を付与するために必要です。 手順 11 で変更します。
[キーのタイプ] として、推奨の JSON ファイルを選択します。
[作成] をクリックします。アカウントの公開鍵/秘密鍵のペアを含む JSON ファイル ダウンロード フォルダに保存されます。生成された JSON ファイルを 安全な場所にあります。
認定バイヤーでサービス アカウントにアクセス権を付与する必要があります。 UI です。[設定 > [アカウント設定] をクリックし、[ユーザー管理 >アカウント ユーザー [+サービス アカウント] をクリックします。先ほどメモしたサービス アカウント ID を ステップ 8.これにより、サービス アカウントのロールを持つ新しいユーザーが作成されます。
念のため、複数のユーザーがクラウド プロジェクトの管理者権限を持っていることを確認してください。 権限を変更する必要があります。
API アクセスのリクエスト
OAuth 2.0 認可フローを一通り実行すると、アプリケーションは 特定のリソースへのアクセスをリクエストするスコープを 機能を使用します。次のスコープを使用すると、 すべての認定バイヤー API への読み取り/書き込みアクセスを 認定バイヤー アカウント:
- Marketplace API: https://www.googleapis.com/auth/authorized-buyers-marketplace
- Real-time Bidding API: https://www.googleapis.com/auth/realtime-bidding
- Ad Exchange Buyer API II: https://www.googleapis.com/auth/adexchange.buyer
API 呼び出しを行う
サポートされている言語で始めるために使用できるサンプルをいくつか示します。
Marketplace API
Java
/* * Copyright 2021 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.api.services.samples.authorizedbuyers.marketplace.v1; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.authorizedbuyersmarketplace.v1.AuthorizedBuyersMarketplace; import com.google.api.services.authorizedbuyersmarketplace.v1.AuthorizedBuyersMarketplaceScopes; import com.google.api.services.authorizedbuyersmarketplace.v1.model.Client; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import com.google.auth.oauth2.ServiceAccountCredentials; import java.io.FileInputStream; import java.io.IOException; import java.util.HashSet; import java.util.List; import java.util.Set; /** * A sample application that authenticates and runs a request against the Authorized Buyers * Marketplace API. */ public class FirstApiRequest { /** * Be sure to specify the name of your application. If the application name is {@code null} or * blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0". */ private static final String APPLICATION_NAME = "APPLICATION_NAME_HERE"; // Full path to JSON Key file - include file name. private static final java.io.File JSON_FILE = new java.io.File("INSERT_PATH_TO_JSON_FILE"); // Name of the buyer resource for which the API call is being made. private static final String BUYER_NAME = "INSERT_BUYER_RESOURCE_NAME"; // Global instance of the HTTP transport. private static HttpTransport httpTransport; // Global instance of the JSON factory. private static final JsonFactory jsonFactory = GsonFactory.getDefaultInstance(); public static void main(String[] args) throws Exception { // Create credentials using the JSON key file. GoogleCredentials credentials = null; try (FileInputStream serviceAccountStream = new FileInputStream((JSON_FILE))) { Set<String> scopes = new HashSet<>(AuthorizedBuyersMarketplaceScopes.all()); credentials = ServiceAccountCredentials.fromStream(serviceAccountStream).createScoped(scopes); } catch (IOException ex) { System.out.println("Can't complete authorization step. Did you specify a JSON key file?"); System.out.println(ex); System.exit(1); } HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); httpTransport = GoogleNetHttpTransport.newTrustedTransport(); // Use the credentials to create a client for the API service. AuthorizedBuyersMarketplace marketplaceClient = new AuthorizedBuyersMarketplace.Builder(httpTransport, jsonFactory, requestInitializer) .setApplicationName(APPLICATION_NAME) .build(); // Call the buyers.clients.list method to get a list of clients for the given buyer. List<Client> clients = marketplaceClient.buyers().clients().list(BUYER_NAME).execute().getClients(); if (clients != null && clients.size() > 0) { System.out.printf("Listing of clients associated with buyer \"%s\"%n", BUYER_NAME); for (Client client : clients) { System.out.printf("* Client name: %s\n", client.getName()); } } else { System.out.printf( "No clients were found that were associated with buyer \"%s\"%n.", BUYER_NAME); } } }
Python
#!/usr/bin/python # # Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Sample application that authenticates and makes an API request.""" import pprint from googleapiclient.discovery import build from google.oauth2 import service_account # A Service Account key file can be generated via the Google Developers # Console. KEY_FILE = 'PATH_TO_JSON_KEY_FILE' # Path to Service Account JSON key file. # Authorized Buyers Marketplace API authorization scope. SCOPE = 'https://www.googleapis.com/auth/authorized-buyers-marketplace' VERSION = 'v1' # Version of Authorized Buyers Marketplace API to use. # Name of the buyer resource for which the API call is being made. BUYER_NAME = 'BUYER_RESOURCE_NAME' def main(): # Create credentials using the Service Account JSON key file. credentials = service_account.Credentials.from_service_account_file( KEY_FILE, scopes=[SCOPE]) # Build a client for the authorizedbuyersmarketplace API service. marketplace = build('authorizedbuyersmarketplace', VERSION, credentials=credentials) # Call the buyers.clients.list method to get a list of clients for the # given buyer. request = marketplace.buyers().clients().list(parent=BUYER_NAME) pprint.pprint(request.execute()) if __name__ == '__main__': main()
.NET
/* Copyright 2021 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied * See the License for the specific language governing permissions and * limitations under the License. */ using Google.Apis.AuthorizedBuyersMarketplace.v1; using Google.Apis.AuthorizedBuyersMarketplace.v1.Data; using Google.Apis.Auth.OAuth2; using Google.Apis.Json; using Google.Apis.Services; using System; using System.Collections.Generic; namespace Google.Apis.AuthorizedBuyersMarketplace.Examples.v1 { /// <summary> /// Self contained sample to return a list of clients for a given buyer account. /// Primarily used by the Getting Started guide: /// https://developers.google.com/authorized-buyers/apis/getting_started /// /// Note: To run this sample, you will need to configure it as the StartupObject in /// Google.Apis.AuthorizedBuyersMarketplace.Examples.csproj. /// </summary> internal class FirstApiRequest { private static void Main(string[] args) { // See the README.md for details of these fields. // Retrieved from https://console.developers.google.com var ServiceKeyFilePath = "PATH TO JSON KEY FILE HERE"; // Name of the buyer resource for which the API call is being made. var buyerName = "INSERT_BUYER_RESOURCE_NAME_HERE"; // Retrieve credential parameters from the key JSON file. var credentialParameters = NewtonsoftJsonSerializer.Instance .Deserialize<JsonCredentialParameters>( System.IO.File.ReadAllText(ServiceKeyFilePath)); // Create the credentials. var credentialInitializer = new ServiceAccountCredential.Initializer( credentialParameters.ClientEmail) { Scopes = new[] { AuthorizedBuyersMarketplaceService.Scope.AuthorizedBuyersMarketplace } }.FromPrivateKey(credentialParameters.PrivateKey); var oAuth2Credentials = new ServiceAccountCredential(credentialInitializer); // Use the credentials to create a client for the API service. var serviceInitializer = new BaseClientService.Initializer { HttpClientInitializer = oAuth2Credentials, ApplicationName = "FirstAPICall" }; var mkService = new AuthorizedBuyersMarketplaceService(serviceInitializer); // Call the buyers.clients.list method to list clients for the given buyer. BuyersResource.ClientsResource.ListRequest request = mkService.Buyers.Clients.List(buyerName); IList<Client> clients = request.Execute().Clients; foreach (Client client in clients) { Console.WriteLine("* Client name: {0}", client.Name); } Console.ReadLine(); } } }
PHP
<?php /** * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Sample application that authenticates and makes an API request. */ namespace Google\Ads\AuthorizedBuyers\Marketplace\Examples\V1; /** * Provide path to client library. See README.md for details. */ require_once __DIR__ . '/../../vendor/autoload.php'; use Google_Client; use Google_Service_AuthorizedBuyersMarketplace; session_start(); /** * You can retrieve this file from the Google Developers Console. * * See README.md for details. */ $keyFileLocation = "INSERT_PATH_TO_JSON_KEYFILE"; /** * Name of the buyer resource for which the API call is being made. */ $buyerName = "INSERT_BUYER_RESOURCE_NAME"; if ($keyFileLocation === 'INSERT_PATH_TO_JSON_KEYFILE') { print "WARNING: Authorization details not provided!\n"; exit(1); } $client = new Google_Client(); $client->setApplicationName('Authorized Buyers Marketplace API PHP Samples'); $service = new Google_Service_AuthorizedBuyersMarketplace($client); $client->setAuthConfig($keyFileLocation); $client->addScope('https://www.googleapis.com/auth/authorized-buyers-marketplace'); if ($client->isAccessTokenExpired()) { $client->refreshTokenWithAssertion(); } if ($client->getAccessToken()) { // Call the buyers.clients.list method to get a list of clients for the given buyer. $result = $service->buyers_clients->listBuyersClients($buyerName); print "Clients associated with buyer account\n"; if (empty($result['clients'])) { print "No clients found\n"; return; } else { foreach ($result['clients'] as $client) { print_r($client); } } }
Ruby
#!/usr/bin/env ruby # Encoding: utf-8 # # Copyright:: Copyright 2022 Google LLC # # License:: Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. # # Sample application that authenticates and makes an API request. require 'google/apis/authorizedbuyersmarketplace_v1' require 'googleauth/service_account' # You can download the JSON keyfile used for authentication from the Google # Developers Console. KEY_FILE = 'path_to_key' # Path to JSON file containing your private key. # Name of the buyer resource for which the API call is being made. BUYER_NAME = 'insert_buyer_resource_name' def first_api_request() # Create credentials using the JSON key file. auth_options = { :json_key_io => File.open(KEY_FILE, "r"), :scope => 'https://www.googleapis.com/auth/authorized-buyers-marketplace' } oauth_credentials = Google::Auth::ServiceAccountCredentials.make_creds( options=auth_options ) # Create the service and set credentials marketplace = ( Google::Apis::AuthorizedbuyersmarketplaceV1::AuthorizedBuyersMarketplaceService.new ) marketplace.authorization = oauth_credentials marketplace.authorization.fetch_access_token! begin # Call the buyers.clients.list method to get list of clients for given buyer. clients_list = marketplace.list_buyer_clients(BUYER_NAME) if clients_list.clients.any? puts "Found the following clients for buyer '%s':" % BUYER_NAME clients_list.clients.each do |client| puts "* Client name: #{client.name}" end else puts "No clients were found that were associated with buyer '%s'" % BUYER_NAME end rescue Google::Apis::ServerError => e raise "The following server error occured:\n%s" % e.message rescue Google::Apis::ClientError => e raise "Invalid client request:\n%s" % e.message rescue Google::Apis::AuthorizationError => e raise "Authorization error occured:\n%s" % e.message end end if __FILE__ == $0 begin first_api_request() end end
Real-time Bidding API
Java
これは、Java で Real-time Bidding API を使用する方法を示す基本的な例です。
- Maven プロジェクトを作成する
pom.xml を開き、次の依存関係を追加します。
<dependencies> <dependency> <groupId>com.google.api-client</groupId> <artifactId>google-api-client</artifactId> <version>1.32.2</version> </dependency> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-pubsub</artifactId> <version>v1-rev452-1.25.0</version> </dependency> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-realtimebidding</artifactId> <version>v1-rev20220503-1.32.1</version> </dependency> <dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency> <dependency> <groupId>com.google.http-client</groupId> <artifactId>google-http-client-jackson2</artifactId> <version>1.40.1</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.13</version> </dependency> <dependency> <groupId>net.sourceforge.argparse4j</groupId> <artifactId>argparse4j</artifactId> <version>0.9.0</version> </dependency> </dependencies>
- 認証情報を設定する
API のすべての呼び出しには認証が必要です。作成 サービス アカウントの JSON キーファイルを使用した
Credential
に関する説明 ご覧ください。GoogleCredentials credentials = null; try (FileInputStream serviceAccountStream = new FileInputStream((JSON_FILE))) { Set<String> scopes = new HashSet<>(RealTimeBiddingScopes.all()); credentials = ServiceAccountCredentials.fromStream(serviceAccountStream).createScoped(scopes); } catch (IOException ex) { System.out.println("Can't complete authorization step. Did you specify a JSON key file?"); System.out.println(ex); System.exit(1); }
- Real-time Bidding API のクライアントを作成する
次に、ビルダーを使用して Real-time Bidding API クライアントを作成します。 パターン:
HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); httpTransport = GoogleNetHttpTransport.newTrustedTransport(); // Use the credentials to create a client for the API service. RealTimeBidding realtimeBidding = new RealTimeBidding.Builder(httpTransport, jsonFactory, requestInitializer) .setApplicationName(APPLICATION_NAME) .build();
- オペレーションを実行する
API に接続するためのクライアントをインスタンス化したら、次のことができます。 あります。次のコードは、特定の購入者の 作成できます。
List<Creative> creatives = realtimeBidding .buyers() .creatives() .list(BUYER_NAME) .setView("FULL") .execute() .getCreatives(); if (creatives != null && creatives.size() > 0) { System.out.printf("Listing of creatives associated with buyer '%s'%n", BUYER_NAME); for (Creative creative : creatives) { System.out.printf("* Creative name: %s\n", creative.getName()); } } else { System.out.printf( "No creatives were found that were associated with buyer '%s'%n.", BUYER_NAME); }
Java で Real-time Bidding API を使用する方法について詳しくは、 README に ファイル(Real-time Bidding API の例)をご覧ください。
Python
Python で Real-time Bidding API を使用する方法について、基本的な例を使って説明します。
- Google API Python クライアントをダウンロードしてインストールする
pip の使用例:
$ pip install --upgrade google-api-python-client
- 認証情報を設定する
API のすべての呼び出しには認証が必要です。インスタンスを Service を使用する
service_account.Credentials
インスタンス 前述のアカウントの JSON キーファイル。credentials = service_account.Credentials.from_service_account_file( KEY_FILE, scopes=[SCOPE])
- Real-time Bidding API のクライアントを作成する
次に、承認済みの API を使用して Real-time Bidding API クライアントを
service_account.Credentials
インスタンス:realtimebidding = build('realtimebidding', VERSION, credentials=credentials)
- オペレーションを実行する
API に接続するためのクライアントをインスタンス化したら、次のことができます。 あります。次のコードは、特定の購入者の 作成できます。
request = realtimebidding.buyers().creatives().list(parent=BUYER_NAME) pprint.pprint(request.execute())
Python で Ad Exchange Buyer API を使用する方法について詳しくは、 README に ファイル(Real-time Bidding API の例)をご覧ください。
PHP
次の基本的な例は、Real-time Bidding API を PHP
- 依存関係をセットアップする
まだインストールしていない場合は、Composer をダウンロードしてインストールします。 次に、次のような内容で composer.json を作成します。
{ "description": "Authorized Buyers Real-Time Bidding API PHP Samples", "require": { "php": ">=7.2", "google/apiclient": "^2.0" }, "require-dev": { "squizlabs/php_codesniffer": "3.*" }, "type": "project", "homepage": "https://github.com/googleads/authorized-buyers-rtb-api-samples/tree/master/php", "license": "Apache-2.0", "authors": [ { "name": "Google", "homepage": "https://github.com/googleads/authorized-buyers-rtb-api-samples/graphs/contributors" } ] }
最後に、次のコマンドを実行して依存関係ライブラリをインストールします。
composer install
- クライアントを設定する
Google_Client
を作成し、これを使用してインスタンス化するGoogle_Service_RealTimeBidding
。$client = new Google_Client(); $client-s>etApplicationName(A'uthorized Buyers Real-time Bidding API PHP Samples)'; $service = new Google_Service_RealTimeBidding($client);
- 認証情報を設定する
API のすべての呼び出しには、有効なアクセス トークンが必要です。クライアントの構成 OAuth 2.0 フローを実行します
$client-s>etAuthConfig($keyFileLocation); $client-a>ddScope(h'ttps://www.googleapis.com/auth/realtime-bidding)'; if ($client-i>sAccessTokenExpired()) { $client-r>efreshTokenWithAssertion(); }
- オペレーションを実行する
API に接続するためのクライアントをインスタンス化し、 OAuth 2.0 を使用して API 呼び出しを行うことができます。次のコードは、 すべて自動的に設定されるという条件です
$result = $service->buyers_creatives->listBuyersCreatives($buyerName, $queryParams); print "Creatives associated with buyer account\n"; if (empty($result['creatives'])) { print "No creatives found\n"; return; } else { foreach ($result['creatives'] as $creative) { print_r($creative); } }
PHP で Ad Exchange Buyer API を使用する方法について詳しくは、 README に ファイル(Real-time Bidding API の例)をご覧ください。
.NET
C# で Real-time Bidding API を使用する方法を示す基本的な例を以下に示します。
- 新しいプロジェクトを作成する
Visual Studio Code を開き、新しいプロジェクトを作成します。
- 必要なライブラリ参照をプロジェクトに追加する
プロジェクトの *.csproj ファイルに、 「
Google.Apis
」のPackageReference
件のエントリ、Google.Apis.Auth
、Google.Apis.Core
、Google.Apis.Oauth2.v2
、およびGoogle.Apis.RealTimeBidding.v1
。たとえば、この画面は 次のようになります。<ItemGroup> <PackageReference Include="Google.Apis" Version="1.57.0" /> <PackageReference Include="Google.Apis.Auth" Version="1.57.0" /> <PackageReference Include="Google.Apis.Core" Version="1.57.0" /> <PackageReference Include="Google.Apis.Oauth2.v2" Version="1.57.0.1869" /> <PackageReference Include="Google.Apis.Pubsub.v1" Version="1.57.0.2667" /> <PackageReference Condition="!Exists('./Google.Apis.RealTimeBidding.v1.csproj')" Include="Google.Apis.RealTimeBidding.v1" Version="1.57.0.2680" /> <PackageReference Include="log4net" Version="2.0.13" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" /> <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference> <PackageReference Include="Mono.Options" Version="6.12.0.148" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> </ItemGroup>
これらの依存関係の詳細については、https://www.nuget.org/packages/ をご覧ください。
- 認証情報を設定する
API のすべての呼び出しには認証が必要です。作成
Credential
前述のサービス アカウントのメールアドレスと JSON ファイルを使用します。var credentialParameters = NewtonsoftJsonSerializer.Instance .Deserialize<JsonCredentialParameters>( System.IO.File.ReadAllText(ServiceKeyFilePath)); // Create the credentials. var credentialInitializer = new ServiceAccountCredential.Initializer( credentialParameters.ClientEmail) { Scopes = new[] { RealTimeBiddingService.Scope.RealtimeBidding } }.FromPrivateKey(credentialParameters.PrivateKey); var oAuth2Credentials = new ServiceAccountCredential(credentialInitializer);
- Real-time Bidding API のクライアントを作成する
その後、
RealTimeBiddingService
を作成できます。var serviceInitializer = new BaseClientService.Initializer { HttpClientInitializer = oAuth2Credentials, ApplicationName = "FirstAPICall" }; var realtimebidding = new RealTimeBiddingService(serviceInitializer);
- オペレーションを実行する
API に接続するためのクライアントをインスタンス化したら、次のことができます。 あります。次のコードは、指定したキャンペーンのクリエイティブが お客様の認証情報に関連付けられている認定バイヤー購入アカウント。
BuyersResource.CreativesResource.ListRequest request = realtimebidding.Buyers.Creatives.List(buyerName); request.View = BuyersResource.CreativesResource.ListRequest.ViewEnum.FULL; IList<Creative> creatives = request.Execute().Creatives; foreach (Creative creative in creatives) { Console.WriteLine("* Creative name: {0}", creative.Name); }
C# で Real-time Bidding API を使用する方法について詳しくは、 README ファイル() Real-time Bidding API の例
Ruby
次の基本的な例は、Real-time Bidding API を Ruby さん。
- Google API Ruby クライアントをダウンロードしてインストールする
Bundler をまだインストールしていない場合は、ダウンロードしてインストールします。 次に、次のような内容の Gemfile を作成します。
source "https://rubygems.org" ruby "2.6.0" gem 'google-apis-pubsub_v1', '0.10.0' gem 'google-apis-realtimebidding_v1', '~> 0.14.0'
最後に、次のコマンドを実行して依存関係ライブラリをインストールします。
bundle
- 認証情報を設定する
API のすべての呼び出しには認証が必要です。使用して認証情報を作成する 上で説明したサービス アカウントのメールアドレスと JSON ファイルで構成されます。
# Create credentials using the JSON key file. auth_options = { :json_key_io => File.open(KEY_FILE, "r"), :scope => 'https://www.googleapis.com/auth/realtime-bidding' } oauth_credentials = Google::Auth::ServiceAccountCredentials.make_creds( options=auth_options )
- AdExchangeBuyer のクライアントを作成する
次に、認定バイヤーの Ad Exchange 購入者クライアントを 認証情報:
# Create the service and set credentials realtimebidding = ( Google::Apis::RealtimebiddingV1::RealtimeBiddingService.new ) realtimebidding.authorization = oauth_credentials realtimebidding.authorization.fetch_access_token!
- オペレーションを実行する
API に接続するためのクライアントをインスタンス化したら、次のことができます。 あります。次のコードは、特定の購入者の 作成できます。
# Call the buyers.creatives.list method to get list of creatives for given buyer. creatives_list = realtimebidding.list_buyer_creatives( BUYER_NAME, view: 'FULL') if creatives_list.creatives.any? puts "Found the following creatives for buyer '%s':" % BUYER_NAME creatives_list.creatives.each do |creative| puts "* Creative name: #{creative.name}" end else puts "No creatives were found that were associated with buyer '%s'" % BUYER_NAME end
Ruby で Real-time Bidding API を使用する方法について詳しくは、 README に ファイル() Real-time Bidding API の例
Ad Exchange 購入者 API II
Java
/* * Copyright (c) 2017 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.adexchangebuyer.cmdline.v2_x; import com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient; import com.google.api.services.adexchangebuyer2.v2beta1.AdExchangeBuyerII; import com.google.api.services.adexchangebuyer2.v2beta1.model.AbsoluteDateRange; import com.google.api.services.adexchangebuyer2.v2beta1.model.Client; import com.google.api.services.adexchangebuyer2.v2beta1.model.Date; import com.google.api.services.adexchangebuyer2.v2beta1.model.FilterSet; import com.google.api.services.adexchangebuyer2.v2beta1.model.RealtimeTimeRange; import com.google.api.services.adexchangebuyer2.v2beta1.model.RelativeDateRange; import com.google.api.services.samples.adexchangebuyer.cmdline.BaseSample; import java.io.IOException; import java.util.List; /** * This sample illustrates how to retrieve all Bidder-level Filter Sets. */ public class GetAllBidderLevelFilterSets extends BaseSample { @Override public ClientType getClientType() { return ClientType.ADEXCHANGEBUYERII; } @Override public String getName() { return "Get All Bidder-level Filter Sets."; } @Override public String getDescription() { return "Lists Filter Sets associated with the given Bidder."; } @Override public void execute(AbstractGoogleJsonClient client) throws IOException { AdExchangeBuyerII adXClient = (AdExchangeBuyerII) client; String bidderResourceId = getStringInput("bidderResourceId", "Enter the Bidder's resource ID"); String ownerName = String.format("bidders/%s", bidderResourceId); List<FilterSet> allFilterSets = adXClient.bidders().filterSets().list(ownerName).execute() .getFilterSets(); if (allFilterSets != null && allFilterSets.size() > 0) { System.out.println("========================================"); System.out.printf("Listing of Filter Sets associated with Bidder \"%s\"%n", ownerName); System.out.println("========================================"); for (FilterSet filterSet : allFilterSets) { System.out.printf("* Filter Set name: %s%n", filterSet.getName()); AbsoluteDateRange absDateRange = filterSet.getAbsoluteDateRange(); if(absDateRange != null) { System.out.println("AbsoluteDateRange"); System.out.printf("\tStart date: %s%n", convertDateToString(absDateRange.getStartDate())); System.out.printf("\tEnd date: %s%n", convertDateToString(absDateRange.getEndDate())); } RelativeDateRange relDateRange = filterSet.getRelativeDateRange(); if(relDateRange != null) { Integer offset = relDateRange.getOffsetDays(); System.out.println("RelativeDateRange"); System.out.printf("\tOffset days: %s%n", offset != null ? offset : 0); System.out.printf("\tDuration days: %s%n", relDateRange.getDurationDays()); } RealtimeTimeRange rtTimeRange = filterSet.getRealtimeTimeRange(); if(rtTimeRange != null) { System.out.println("RealtimeTimeRange"); System.out.printf("\tStart timestamp: %s%n", rtTimeRange.getStartTimestamp()); } String timeSeriesGranularity = filterSet.getTimeSeriesGranularity(); if(timeSeriesGranularity != null) { System.out.printf("Time series granularity: %s%n", timeSeriesGranularity); } String format = filterSet.getFormat(); if(format != null) { System.out.printf("\tFormat: %s%n", format); } String environment = filterSet.getEnvironment(); if(environment != null) { System.out.printf("Environment: %s%n", environment); } List<String> platforms = filterSet.getPlatforms(); if(platforms != null) { System.out.println("Platforms:"); for(String platform : platforms) { System.out.printf("\t%s%n", platform); } } List<Integer> sellerNetworkIds = filterSet.getSellerNetworkIds(); if(filterSet.getSellerNetworkIds() != null) { System.out.println("Seller network IDS:"); for(Integer sellerNetworkId : sellerNetworkIds) { System.out.printf("\t%d%n", sellerNetworkId); } } } } else { System.out.printf("No Filter Sets were found associated with Bidder \"%s\"%n", ownerName); } } private String convertDateToString(Date date) { return String.format("%d%02d%02d", date.getYear(), date.getMonth(), date.getDay()); } }
Python
#!/usr/bin/python # # Copyright 2017 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This example lists bidder-level filter sets.""" import argparse import os import pprint import sys sys.path.insert(0, os.path.abspath('..')) from googleapiclient.errors import HttpError import samples_util _OWNER_NAME_TEMPLATE = 'bidders/{bidders_resource_id}' DEFAULT_BIDDER_RESOURCE_ID = 'ENTER_BIDDER_RESOURCE_ID_HERE' def main(ad_exchange_buyer, owner_name): try: # Construct and execute the request. filter_sets = ad_exchange_buyer.bidders().filterSets().list( ownerName=owner_name).execute() print(f'Listing FilterSets for bidder: "{owner_name}".') pprint.pprint(filter_sets) except HttpError as e: print(e) if __name__ == '__main__': parser = argparse.ArgumentParser( description='Creates a bidder-level filter set with the specified options' ) # Required fields. parser.add_argument( '-b', '--bidder_resource_id', default=DEFAULT_BIDDER_RESOURCE_ID, help=('The resource ID of the bidders resource for which the filter ' 'sets were created. This will be used to construct the ownerName ' 'used as a path parameter for filter set requests. For additional ' 'information on how to configure the ownerName path parameter, ' 'see: https://developers.google.com/authorized-buyers/apis/' 'reference/rest/v2beta1/bidders.filterSets/list' '#body.PATH_PARAMETERS.owner_name')) args = parser.parse_args() try: service = samples_util.GetService('v2beta1') except IOError as ex: print(f'Unable to create adexchangebuyer service - {ex}') print('Did you specify the key file in samples_util.py?') sys.exit(1) main(service, _OWNER_NAME_TEMPLATE.format( bidders_resource_id=args.bidder_resource_id))
PHP
<?php /** * Copyright 2017 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ require_once __DIR__ . '/../../BaseExample.php'; /** * This example illustrates how to retrieve all Bidder-level Filter Sets. */ class ListBidderLevelFilterSets extends BaseExample { /** * @see BaseExample::getInputParameters() */ protected function getInputParameters() { return [ [ 'name' => 'bidderResourceId', 'display' => 'Bidder Resource ID', 'required' => true ] ]; } /** * @see BaseExample::run() */ public function run() { $values = $this->formValues; $ownerName = sprintf( 'bidders/%s', $values['bidderResourceId'] ); $result = $this->service->bidders_filterSets ->listBiddersFilterSets($ownerName); print sprintf( '<h2>Listing Bidder-level Filter Sets for ownerName "%s"</h2>', $ownerName ); if (empty($result['filterSets'])) { print '<p>No Bidder-level Filter Sets found.</p>'; } else { foreach ($result['filterSets'] as $filterSets) { $this->printResult($filterSets); } } } /** * @see BaseExample::getClientType() */ public function getClientType() { return ClientType::AdExchangeBuyerII; } /** * @see BaseExample::getName() */ public function getName() { return 'RTB Troubleshooting: List Bidder-level Filter Sets'; } }
.NET
/* Copyright 2017, Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the L"icense)"; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an A"S IS "BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied * See the License for the specific language governing permissions and * limitations under the License. */ using Google.Apis.AdExchangeBuyerII.v2beta1; using Google.Apis.AdExchangeBuyerII.v2beta1.Data; using Google.Apis.Services; using System; using System.Collections.Generic; namespace Google.Apis.AdExchangeBuyer.Examples.v2_x { /// s<ummary<>/span> /// Retrieves the bidder-level filter sets for the given bidder resource ID. /// /<summary<>/span> public class ListBidderLevelFilterSets : ExampleBase { /// s<ummary<>/span> /// Main method, to run this code example as a standalone application. /// /<summary<>/span> /// p<aram name=a"rgsT">he command line arguments/<param<>/span> public static void Main(string[] args) { AdExchangeBuyerIIService service = Utilities.GetV2Service(); ExampleBase example = new ListBidderLevelFilterSets(); Console.WriteLine(example.Description); example.Run(service); } /// s<ummary<>/span> /// Returns a description about the code example. /// /<summary<>/span> public override string Description { get { return T"his code example lists all bidder-level filter sets for the given "+ b"idder resource ID.;" } } /// s<ummary<>/span> /// Runs the code example. /// /<summary<>/span> /// p<aram name=s"erviceA">n authenticated AdExchangeBuyerIIService/<param<>/span> public override void Run(BaseClientService service) { AdExchangeBuyerIIService adXService = (AdExchangeBuyerIIService)service; string bidderResourceId = I"NSERT_BIDDER_RESOURCE_ID_HERE;" string ownerName = String.Format(b"idders/{0}," bidderResourceId); ListFilterSetsResponse response = adXService.Bidders.FilterSets.List(ownerName) .Execute(); Console.WriteLine(="=======================================\n)"; Console.WriteLine(L"isting of filter sets associated with owner name \{"0}\,"" ownerName); Console.WriteLine(="=======================================\n)"; if (response.FilterSets.Count == 0) { Console.WriteLine(N"o filter sets found.)"; } else { foreach (FilterSet filterSet in response.FilterSets) { Console.WriteLine(*" Name: {0}," filterSet.Name); AbsoluteDateRange absDateRange = filterSet.AbsoluteDateRange; if (absDateRange != null) { Console.WriteLine(\"tAbsoluteDateRange:)"; Date startDate = absDateRange.StartDate; Console.WriteLine(\"t\tStartDate:)"; Console.WriteLine(\"t\t\tYear: {0}," startDate.Year); Console.WriteLine(\"t\t\tMonth: {0}," startDate.Month); Console.WriteLine(\"t\t\tDay: {0}," startDate.Day); Date endDate = absDateRange.EndDate; Console.WriteLine(\"t\tEndDate:)"; Console.WriteLine(\"t\t\tYear: {0}," endDate.Year); Console.WriteLine(\"t\t\tMonth: {0}," endDate.Month); Console.WriteLine(\"t\t\tDay: {0}," endDate.Day); } RelativeDateRange relDateRange = filterSet.RelativeDateRange; if (relDateRange != null) { Console.WriteLine(\"tRelativeDateRange:)"; Console.WriteLine(\"t\tOffsetDays: {0}," relDateRange.OffsetDays); Console.WriteLine(\"t\tDurationDays: {0}," relDateRange.DurationDays); } RealtimeTimeRange rtTimeRange = filterSet.RealtimeTimeRange; if (rtTimeRange != null) { Console.WriteLine(\"tRealtimeTimeRange:)"; Console.WriteLine(\"t\tStartTimestamp: {0}," rtTimeRange.StartTimestamp); } String timeSeriesGranularity = filterSet.TimeSeriesGranularity; if (timeSeriesGranularity != null) { Console.WriteLine(\"tTimeSeriesGranularity: {0}," timeSeriesGranularity); } IListS<tring >formats = filterSet.Formats; if (formats != null) { Console.WriteLine(\"tFormats:)"; foreach (string format in formats) { Console.WriteLine(\"t\t{0}," format); } } String environment = filterSet.Environment; if (environment != null) { Console.WriteLine(\"tEnvironment: {0}," environment); } ILists<tring >platforms = filterSet.Platforms; if (platforms != null) { Console.WriteLine(\"tPlatforms:)"; foreach (string platform in platforms) { Console.WriteLine(\"t\t{0}," platform); } } IListi<nt? >sellerNetworkIds = filterSet.SellerNetworkIds; if (sellerNetworkIds != null) { Console.WriteLine(\"tSellerNetworkIds:)"; foreach (int? sellerNetworkId in sellerNetworkIds) { Console.WriteLine(\"t\t{0}," sellerNetworkId); } } } } } public override ClientType getClientType() { return ClientType.ADEXCHANGEBUYERII; } } }
Ruby
#!/usr/bin/env ruby # Encoding: utf-8 # # Copyright:: Copyright 2017, Google Inc. All Rights Reserved. # # License:: Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or # implied. # See the License for the specific language governing permissions and # limitations under the License. # # Lists the filter sets for a given bidder. # # Tags: Bidders.FilterSets.list require 'optparse' require_relative '../samples_util' def list_bidder_level_filter_sets(ad_exchange_buyer, owner_name, page_size) begin response = ad_exchange_buyer.list_bidder_filter_sets( owner_name, page_size: page_size ) unless response.filter_sets.nil? puts 'Found the following filter sets for bidder %s:' % owner_name response.filter_sets.each do |filter_set| puts '* Filter set name: %s' % filter_set.name if !filter_set.absolute_date_range.nil? abs_date_range = filter_set.absolute_date_range start_date = abs_date_range.start_date end_date = abs_date_range.end_date puts "\tAbsolute date range:" puts "\t\tStart date: %s-%s-%s" % [start_date.year, start_date.month, start_date.day] puts "\t\tEnd date: %s-%s-%s" % [end_date.year, end_date.month, end_date.day] end unless filter_set.realtime_time_range.nil? realtime_time_range = filter_set.realtime_time_range puts "\tRealtime time range:" puts "\t\tStart timestamp: %s" % realtime_time_range.start_timestamp end unless filter_set.relative_date_range.nil? relative_date_range = filter_set.relative_date_range puts "\tRelative date range:" puts "\t\tOffset days: %s" % relative_date_range.offset_days puts "\t\tDuration days: %s" % relative_date_range.duration_days end unless filter_set.time_series_granularity.nil? puts "\tTime series granularity: %s" % filter_set.time_series_granularity end unless filter_set.format.nil? puts "\tFormat: %s" % filter_set.format end unless filter_set.environment.nil? puts "\tEnvironment: %s" % filter_set.environment end unless filter_set.platforms.nil? puts "\tPlatforms: %s" % filter_set.platforms.inspect end unless filter_set.seller_network_ids.nil? puts "\tSeller network IDs: %s" % filter_set.seller_network_ids.inspect end end else puts 'No filter sets found for bidder %s.' % owner_name end rescue Google::Apis::ServerError => e raise "The following server error occured:\n%s" % e.message rescue Google::Apis::ClientError => e raise "Invalid client request:\n%s" % e.message rescue Google::Apis::AuthorizationError => e raise "Authorization error occured:\n%s" % e.message end end if __FILE__ == $0 begin # Retrieve the service used to make API requests. service = get_service(ADEXCHANGEBUYER_V2BETA1) rescue ArgumentError => e raise 'Unable to create service, with error message: %s' % e.message rescue Signet::AuthorizationError => e raise ('Unable to create service, was the KEY_FILE in samples_util.rb ' + 'set? Error message: %s') % e.message end # Set options and default values for fields used in this example. options = [ Option.new( 'bidder_resource_id', ('The resource ID of the bidders resource for which the filter ' + 'sets were created. This will be used to construct the ownerName ' + 'used as a path parameter for filter set requests. For additional ' + 'information on how to configure the ownerName path parameter, ' + 'see: https://developers.google.com/authorized-buyers/apis/reference/' + 'rest/v2beta1/bidders.filterSets/list#body.PATH_PARAMETERS.owner_name'), :short_alias => 'b', :required => true, :default_value => nil # Insert default value here. ), Option.new( 'max_page_size', 'The maximum number of entries returned on one result page.', :type => Integer, :short_alias => 'm', :required => true, :default_value => MAX_PAGE_SIZE ) ] # Parse options. parser = Parser.new(options) opts = parser.parse(ARGV) owner_name = 'bidders/%s' % opts['bidder_resource_id'] list_bidder_level_filter_sets(service, owner_name, opts['max_page_size']) end
次のステップ
背景ガイドを読み、 サンプルの詳細と、アプリケーションを開発するためのオプションを 説明します。
クライアント ライブラリを設定した後で、 ニーズに合わせてコードサンプルを拡張できます。
詳細については、リファレンス ドキュメントをご覧ください。 API の詳細を確認してください。
サポートが必要な場合は、フォーラムをご利用ください。
アプリケーションでリアルタイム ビッダーを実行することを想定している場合は、RTB プロトコルに関するドキュメントをご覧ください。
パフォーマンスのヒントを確認する。
アンケートに答える
ドキュメントの改善にご協力ください: 簡単なフォームに入力する アンケートに回答します。