سه میانای برنامهسازی کاربردی وجود دارد که میتوانید برای تعامل برنامهریزیشده با خریداران مجاز استفاده کنید:
- Marketplace API: مدیریت معاملهها، بستههای مزایده، و دسترسی مشتری.
- Real-time Bidding API: مدیریت پیشنهاد قیمت، ازجمله سهمیههای QPS، هدفیابی، و طرحآگهیها.
- (منسوخشده)Ad Exchange Buyer API II: این میانای برنامهسازی کاربردی منسوخ شده است. همه منابع بهجز منابع مربوط به عیبیابی RTB منسوخ شدهاند.
در اینجا چند نمونه از کارهایی که میتوانید بااستفاده از Authorized Buyers APIs انجام دهید آورده شده است:
- دسترسی به اطلاعات حساب مناقصه همزمان.
- طرحآگهیهای درحال بازبینی را ارسال و مدیریت کنید.
- سنجههای عیبیابی پیشنهاد قیمت همزمان را بازیابی کنید.
- فهرستهای کاربر «خریداران مجاز» را مدیریت کنید.
- پیکربندیهای پیشهدفیابی را مدیریت کنید.
- پیکربندی دسترسی مشتری برای «بازار».
- پیشنهادهای معاملهها را در «بازارگاه» کاوش و مدیریت کنید.
اگر با «خریداران مجاز» آشنا نیستید، برای کسب اطلاعات بیشتر به مرکز راهنمایی خریداران مجاز و رابط کاربری مراجعه کنید.
پیوندهای سریع
راهاندازی اصالتسنجی
میاناهای برنامهسازی کاربردی Google از پروتکل OAuth 2.0 برای اصالتسنجی و صدور مجوز استفاده میکنند. در اینجا نحوه راهاندازی اصالتسنجی برای میانای برنامهسازی کاربردی «مناقصه همزمان» بااستفاده از OAuth 2.0 آورده شده است.
این مثال از حساب سرویس استفاده میکند. برای جزئیات بیشتر درباره کنترل دسترسی، به مستندات مدیریت دسترسی هویت Google Cloud مراجعه کنید.
به صفحه Google API Console Enabled APIs بروید.
از منو کرکرهای پروژه، پروژهای را انتخاب کنید یا پروژه جدیدی ایجاد کنید.
در فهرست میاناهای برنامهسازی کاربردی فعالشده، مطمئن شوید Real-time Bidding API فهرست شده باشد. اگر در فهرست نیست، روی برگه Google APIs کلیک کنید، Real-time Bidding API را جستجو و انتخاب کنید، و روی فعال کردن API کلیک کنید.
سپس، در نوار کناری سمت راست، اعتبارنامه را انتخاب کنید.
منو کرکرهای ایجاد اطلاعات کاربری را انتخاب کنید، سپس کلید حساب سرویس را انتخاب کنید.
در منو کرکرهای حساب سرویس، حساب سرویس جدید را انتخاب کنید.
نامی برای حساب سرویس وارد کنید. شناسه حساب سرویس بهطور خودکار از نام و نام پروژه تولید میشود.
شناسه حساب خدمات را یادداشت کنید: در مرحله ۱۱ برای اعطای دسترسی به حساب خدمات جدید در واسط کاربر «خریداران مجاز» به آن نیاز دارید.
فایل JSON توصیهشده را بهعنوان نوع کلید انتخاب کنید.
روی ایجاد کردن کلیک کنید. فایل JSON با جفت کلید عمومی/خصوصی حساب در پوشه «بارگیریها» ذخیره میشود. فایل JSON تولیدشده را در مکان امنی نگه دارید.
برای اینکه حساب سرویس کار کند، باید در رابط کاربری خریداران مجاز به آن دسترسی بدهید. تنظیمات > تنظیمات حساب را انتخاب کنید، سپس مدیریت کاربر > کاربران حساب را انتخاب کنید و روی +حساب سرویس کلیک کنید. شناسه حساب سرویسی را که در مرحله ۸ بالا یادداشت کردید وارد کنید. با این کار، کاربر جدیدی با نقش حساب خدمات ایجاد میشود.
مطمئن شوید که چند نفر به پروژه ابری شما دسترسی «سرپرست» داشته باشند تا درصورت نیاز بتوانید اجازهها را تغییر دهید.
درخواست دسترسی به میانای برنامهسازی کاربردی
هنگام طی کردن مراحل جریان مجوز OAuth 2.0، برنامه شما میتواند دامنههایی را برای درخواست دسترسی به ویژگیهای خاصی ازطرف «حسابهای Google» دیگر مشخص کند. از دامنههای زیر برای بهدست آوردن دسترسی خواندن/نوشتن به هریک از Authorized Buyers API ازطرف حساب Authorized Buyers استفاده کنید:
- 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
جاوا
/* * 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); } } }
Real-time Bidding API
جاوا
در اینجا نمونهای ساده آورده شده است که نحوه استفاده از Real-time Bidding API با Java را نشان میدهد.
- ایجاد پروژه 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-rev20260914-2.0.0</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
سپس میتوانید کارخواه API «مناقصه همزمان» خود را بااستفاده از الگوی Builder ایجاد کنید:
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); }
برای اطلاعات دقیقتر درباره استفاده از Real-time Bidding API با Java، به فایل README در نمونههای Real-time Bidding API مراجعه کنید.
Python
در اینجا مثالی پایه آورده شده است که نحوه استفاده از Real-time Bidding API با Python را نشان میدهد.
- بارگیری و نصب Google API Python Client
نمونه استفاده از pip:
$ pip install --upgrade google-api-python-client
- راهاندازی اطلاعات کاربری
همه تماسها با API به اصالتسنجی نیاز دارند؛ بااستفاده از فایل کلید JSON «حساب سرویس» که در بالا توضیح داده شد، نمونه
service_account.Credentialsرا ایجاد کنید.credentials = service_account.Credentials.from_service_account_file( KEY_FILE, scopes=[SCOPE])
- ساختن کارخواه برای Real-time Bidding 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())
برای اطلاعات دقیقتر درباره استفاده از Ad Exchange Buyer API با Python، به فایل 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->setApplicationName('Authorized Buyers Real-time Bidding API PHP Samples'); $service = new Google_Service_RealTimeBidding($client);
- راهاندازی اطلاعات کاربری
همه تماسها با میانای برنامهسازی کاربردی به کد دسترسی معتبر نیاز دارند. کارخواهتان را برای طی کردن مراحل جریان OAuth 2.0 پیکربندی کنید.
$client->setAuthConfig($keyFileLocation); $client->addScope('https://www.googleapis.com/auth/realtime-bidding'); if ($client->isAccessTokenExpired()) { $client->refreshTokenWithAssertion(); }
- انجام عملیات
پساز اینکه کلاینتی را برای اتصال به 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); } }
برای اطلاعات دقیقتر درباره استفاده از Ad Exchange Buyer API با PHP، به فایل README در نمونههای Real-time Bidding API مراجعه کنید.
دات نت
در اینجا مثالی ساده آورده شده است که نحوه استفاده از Real-time Bidding API با C# را نشان میدهد.
- ایجاد کردن پروژه جدید
Visual Studio Code را باز کنید و پروژه جدیدی ایجاد کنید.
- افزودن ارجاعهای کتابخانه موردنیاز به پروژه
در فایل *.csproj پروژهتان، ورودی
PackageReferenceرا برایGoogle.Apis،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); }
برای اطلاعات دقیقتر درباره استفاده از Real-time Bidding API با C#، به فایل README در نمونههای Real-time Bidding API مراجعه کنید.
Ruby
در اینجا نمونهای ساده آورده شده است که نحوه استفاده از Real-time Bidding API را با Ruby نشان میدهد.
- بارگیری و نصب Google API Ruby Client
اگر هنوز آن را نصب نکردهاید، 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
سپس میتوانید مشتری مجاز AdExchange Buyer خود را بااستفاده از اعتبارنامه ایجاد کنید:
# 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
برای اطلاعات دقیقتر درباره استفاده از Real-time Bidding API با Ruby، به فایل README در نمونههای Real-time Bidding API مراجعه کنید.
Ad Exchange Buyer API II
جاوا
/* * 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'; } }
دات نت
/* 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. */ 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 { /// <summary> /// Retrieves the bidder-level filter sets for the given bidder resource ID. /// </summary> public class ListBidderLevelFilterSets : ExampleBase { /// <summary> /// Main method, to run this code example as a standalone application. /// </summary> /// <param name="args">The command line arguments</param> public static void Main(string[] args) { AdExchangeBuyerIIService service = Utilities.GetV2Service(); ExampleBase example = new ListBidderLevelFilterSets(); Console.WriteLine(example.Description); example.Run(service); } /// <summary> /// Returns a description about the code example. /// </summary> public override string Description { get { return "This code example lists all bidder-level filter sets for the given " + "bidder resource ID."; } } /// <summary> /// Runs the code example. /// </summary> /// <param name="service">An authenticated AdExchangeBuyerIIService</param> public override void Run(BaseClientService service) { AdExchangeBuyerIIService adXService = (AdExchangeBuyerIIService)service; string bidderResourceId = "INSERT_BIDDER_RESOURCE_ID_HERE"; string ownerName = String.Format("bidders/{0}", bidderResourceId); ListFilterSetsResponse response = adXService.Bidders.FilterSets.List(ownerName) .Execute(); Console.WriteLine("========================================\n"); Console.WriteLine("Listing of filter sets associated with owner name \"{0}\"", ownerName); Console.WriteLine("========================================\n"); if (response.FilterSets.Count == 0) { Console.WriteLine("No 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); } IList<String> 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); } IList<string> platforms = filterSet.Platforms; if (platforms != null) { Console.WriteLine("\tPlatforms:"); foreach (string platform in platforms) { Console.WriteLine("\t\t{0}", platform); } } IList<int?> 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
مراحل بعدی
راهنمای پسزمینه را بخوانید تا درباره نمونهها و گزینههای دردسترس برای توسعه راهحل خود بیشتر بدانید.
پساز راهاندازی کتابخانه کارخواه، سعی کنید نمونههای کد را برای برآورده کردن نیازهایتان گسترش دهید.
برای کسب اطلاعات بیشتر درباره میانای برنامهسازی کاربردی، به اسناد مرجع مربوط به نسخهای که با آن کار میکنید مراجعه کنید.
اگر به راهنمایی نیاز دارید، به تالار گفتمان مراجعه کنید.
اگر انتظار میرود برنامه شما مناقصه همزمان انجام دهد، اسناد پروتکل مناقصه همزمان را بخوانید.
نکات عملکرد را مرور کنید.
در نظرسنجی شرکت کنید
به ما کمک کنید این سند را بهبود بخشیم: با تکمیل کردن نظرسنجی سریع، به ما بگویید چه چیزی خوب بود و چه چیزی را ازقلم انداختهایم.