ターゲティングを設定

ターゲティング オプション 割り当てられたターゲティング オプション 広告申込情報サービスはすべて、 ディスプレイ &ビデオ 360 でVideo 360 API。このページでは、その例について 利用可能なターゲティング オプションの確認、ターゲティング オプションを広告申込情報に割り当てる方法 割り当て、広告申込情報に対する一括操作を実行して、割り当てられた さまざまなオプションが用意されています

利用可能なターゲティング オプションを確認する

ターゲティング オプションでは、ユーザー指定の変数か、既存のターゲット可能な変数を使用します。 エンティティ、または既存のオプションを使用して、目的のターゲット オーディエンスを定義します。 既存のオプションは、列挙値またはターゲティング オプションを使用して識別されます です。ターゲット設定可能なエンティティの識別には、 関連付けられていますターゲティング オプション ID とエンティティ ID は、 ディスプレイとVideo 360 API。

列挙値の設定を使用する

以下のターゲティング タイプのターゲティング オプションは、以下を使用して割り当てます 特定の列挙型:

TargetingType 列挙型
TARGETING_TYPE_AGE_RANGE AgeRange
TARGETING_TYPE_CONTENT_INSTREAM_POSITION ContentInstreamPosition
TARGETING_TYPE_CONTENT_OUTSTREAM_POSITION ContentOutstreamPosition
TARGETING_TYPE_DEVICE_TYPE DeviceType
TARGETING_TYPE_DIGITAL_CONTENT_LABEL_EXCLUSION ContentRatingTier
TARGETING_TYPE_ENVIRONMENT Environment
TARGETING_TYPE_EXCHANGE Exchange
TARGETING_TYPE_GENDER Gender
TARGETING_TYPE_HOUSEHOLD_INCOME HouseholdIncome
TARGETING_TYPE_NATIVE_CONTENT_POSITION NativeContentPosition
TARGETING_TYPE_OMID Omid
TARGETING_TYPE_PARENTAL_STATUS ParentalStatus
TARGETING_TYPE_SENSITIVE_CATEGORY_EXCLUSION SensitiveCategory
TARGETING_TYPE_VIDEO_PLAYER_SIZE VideoPlayerSize
TARGETING_TYPE_VIEWABILITY Viewability

関連する列挙値の文字列バージョンを使用すると、 これらのターゲティング タイプの AssignedTargetingOption リソースと、 assignedTargetingOptionIdAlias フィールドで確認できます。Google Chat では assignedTargetingOptionId の代わりにこのエイリアス値を使用する 割り当てたターゲティング オプションの取得や削除ができます。

ターゲティング オプション ID を取得する

既存のオプションを使用するターゲティング タイプは、対応する ターゲティング オプション ID

たとえば、画面上の場所が有限です。 ターゲティング タイプ TARGETING_TYPE_ON_SCREEN_POSITION を使用してターゲットに設定できます。各 対応するターゲティング オプション ID があります。

これらのターゲティング オプション ID は、 ターゲティング オプション サービス。影響 次の 2 つの方法のいずれかで取得が行われます。

  • 個々の取得または網羅リスト: エンティティのオプションの取得 ほとんどのターゲティング タイプは、get メソッドと list メソッドを使って設定できます。 targetingTypes.targetingOptions.get を使用して、リソースの詳細を取得します。 ターゲティング タイプとターゲティング オプション ID によって識別されるターゲティング オプション。使用 targetingTypes.targetingOptions.list: 利用可能なすべてのイベントをリストします ターゲティングオプションごとに ターゲティングオプションを定義します
  • 検索: 地域ベースのターゲティング タイプのオプション (TARGETING_TYPE_GEO_REGIONTARGETING_TYPE_POITARGETING_TYPE_BUSINESS_CHAIN など)は、search メソッドを使用して取得する必要があります。 targetingTypes.targetingOptions.search を使用して取得します。 指定したクエリ文字列に一致する特定のタイプのターゲティング オプション。
で確認できます。

ターゲティングの候補リストを取得する方法の例 ターゲティング タイプ TARGETING_TYPE_BROWSER のオプション:

Java

// Configure the list request.
TargetingOptions.List request =
   service
       .targetingTypes()
       .targetingOptions()
       .list("TARGETING_TYPE_BROWSER")
       .setAdvertiserId(advertiser-id);

// Create the response and nextPageToken variables.
ListTargetingOptionsResponse response;
String nextPageToken = null;

do {
 // Create and execute the list request.
 response = request.setPageToken(nextPageToken).execute();

 // Check if the response is empty.
 if (response.isEmpty()) {
   System.out.print("List request returned no Targeting Options");
   break;
 }

 // Iterate over retrieved targeting options.
 for (TargetingOption option : response.getTargetingOptions()) {
   System.out.printf(
       "Targeting Option ID: %s, Browser Display Name: '%s'\n",
       option.getTargetingOptionId(), option.getBrowserDetails().getDisplayName());
 }

 // Update the next page token.
 nextPageToken = response.getNextPageToken();
} while (!Strings.isNullOrEmpty(nextPageToken));

Python

# Create the page token variable.
next_page_token = ""

while True:
  # Request the targeting options list.
  response = service.targetingTypes() \
    .targetingOptions().list(
      advertiserId=advertiser-id,
      targetingType="TARGETING_TYPE_BROWSER",
      pageToken=next_page_token
  ).execute()

  # Check if response is empty.
  if not response:
    print("List request returned no Targeting Options")
    break

  # Iterate over retrieved targeting options.
  for option in response['targetingOptions']:
    print("Targeting Option ID: %s, Browser Display Name: %s"
          % (option['targetingOptionId'], option['browserDetails']['displayName']))

  # Break out of loop if there is no next page.
  if 'nextPageToken' not in response:
    break

  # Update the next page token.
  next_page_token = response['nextPageToken']

PHP

// Create the page token variable.
$nextPageToken = null;

do {
    // Build the query parameters object for the request.
    $optParams = array(
        'advertiserId' => advertiser-id,
        'pageToken' => $nextPageToken
    );

    // Call the API, getting the browser targeting options for the
    // identified advertiser.
    $response = $this
        ->service
        ->targetingTypes_targetingOptions
        ->listTargetingTypesTargetingOptions(
            'TARGETING_TYPE_BROWSER',
            $optParams
        );

    // Print the resulting targeting options.
    if (!empty($response->getTargetingOptions())) {
        foreach ($response->getTargetingOptions() as $option) {
            printf(
                'Targeting Option ID: %s, Browser Display Name: %s\n',
                $option['targetingOptionId'],
                $option['browserDetails']['displayName']
            );
        }
    } else {
        print('No targeting options returned\n');
    }

    // Update the next page token.
    $nextPageToken = $response->getNextPageToken();
} while (
    !empty($response->getTargetingOptions())
    && $nextPageToken
);

ターゲット設定可能なエンティティを一覧表示する

既存のターゲット設定可能なエンティティを使用して広告申込情報のターゲット設定を行うには、以下が必要です。 そのエンティティの ID。ターゲット設定可能なエンティティ(channel など) 統合オーディエンス 広告枠ソースグループは ディスプレイ &ビデオ 360 でVideo 360 API。

サービスごとに、独自の get メソッドと list メソッドがあります。get メソッドを使用して以下を行います。 特定の広告主の下でエンティティが使用可能であることを確認する。list を使用する メソッドを使用して、リソースで使用可能なリソースタイプのすべてのエンティティを検出し、 広告主へのターゲティングの割り当てに使用できます。 その広告主の広告申込情報を選択します

ターゲット設定可能なエンティティのサブセットは、API を使用して管理することもできます。これは、 対応するサービスの create メソッドと patch メソッドを介して行います。 エンティティにリストされている個々の値に対応するサービス 広告枠ソース 除外キーワード 場所

スポットのターゲティング オプション ID を作成する

名前付きスポット ターゲティング オプション(TARGETING_TYPE_POI で以下を使用) targetingTypes.targetingOptions.search を使用して取得します。イン さらに、独自の TARGETING_TYPE_POI ターゲティング オプション ID を作成して、 緯度と経度の座標をターゲットに指定できます。

スポットのターゲティング オプション ID を作成する手順は次のとおりです。

  1. 緯度と経度の座標を取得する(例: 「40.7414691, -74.003387」)
  2. 座標値を小数点第 6 位で四捨五入します(例: 「40.741469, -74.003387」)
  3. 座標値から小数点以下の桁数を削除してください(例: 「40741469、 -74003387」)
  4. 2 つの値を連結して、セミコロンで区切った 1 つの文字列を作成する (例: 「40741469;-74003387」)

結果の文字列は、作成時に targetingOptionId として使用できます。 TARGETING_TYPE_POI にターゲティング オプションを割り当てました。

作成時に、次の targetingOptionId フィールドと assignedTargetingOptionId フィールドが 割り当てられたターゲティング オプション リソースが更新され、セミコロンが追加されます。 英数字のハッシュを使用できます。

ターゲティング オプションを割り当てる

広告申込情報に割り当てられているターゲティングは、 割り当てられたターゲティング オプション。これらのエンティティは 割り当てられたターゲティング オプション サービス。 割り当てられたターゲティング オプションを作成すると、そのターゲティングの詳細が クリックします割り当てられている既存のターゲティング オプションを削除すると、 ターゲティングできます

使用 advertisers.lineItems.targetingTypes.assignedTargetingOptions.create 割り当てられるターゲティング オプションを作成します。ターゲティングパラメータを 割り当てられたターゲティング オプション リソースの details フィールド 対応するターゲティングタイプに 対応している必要があります

割り当てられたターゲティング オプションの作成方法の例 ターゲティング タイプ TARGETING_TYPE_BROWSER の場合:

Java

// Create an AssignedTargetingOption object of the
// browser targeting type.
AssignedTargetingOption assignedTargetingOption =
   new AssignedTargetingOption()
       .setBrowserDetails(
           new BrowserAssignedTargetingOptionDetails()
               .setTargetingOptionId(targeting-option-id));

// Configure the create request.
AssignedTargetingOptions.Create request =
   service
       .advertisers()
       .lineItems()
       .targetingTypes()
       .assignedTargetingOptions()
       .create(
           advertiser-id,
           line-item-id,
           "TARGETING_TYPE_BROWSER",
           assignedTargetingOption);

// Send the request.
AssignedTargetingOption response = request.execute();

// Display the new assigned targeting option.
System.out.printf("AssignedTargetingOption %s was created.",
   response.getName());

Python

# Create a assigned targeting option object.
assigned_targeting_option_obj = {
    'browserDetails': {
        'targetingOptionId': targeting-option-id
    }
}

# Create the assigned targeting option.
assigned_targeting_option = service.advertisers().lineItems()\
  .targetingTypes().assignedTargetingOptions().create(
    advertiserId=advertiser-id,
    lineItemId=line-item-id,
    targetingType="TARGETING_TYPE_BROWSER",
    body=assigned_targeting_option_obj
).execute()

# Display the new assigned targeting option.
print("Assigned Targeting Option %s was created."
      % assigned_targeting_option["name"])

PHP

// Create a assigned targeting option object.
$assignedTargetingOption =
    new Google_Service_DisplayVideo_AssignedTargetingOption();

// Create and set browser details.
$details =
    new Google_Service_DisplayVideo_BrowserAssignedTargetingOptionDetails();
$details->setTargetingOptionId(targeting-option-id);
$assignedTargetingOption->setBrowserDetails($details);

// Call the API, creating the browser assigned targeting option for the
// given line item.
$result = $this
    ->service
    ->advertisers_lineItems_targetingTypes_assignedTargetingOptions
    ->create(
        advertiser-id,
        line-item-id,
        'TARGETING_TYPE_BROWSER',
        $assignedTargetingOption
    );

printf(
    'Assigned Targeting Option %s was created.\n',
    $result['name']
);

エラー

ターゲティング設定のエラー

ファイアウォール ルールについては、 ディスプレイ &ビデオ 360 でのターゲティング動画 360これらは ディスプレイと割り当てられたターゲティング オプションの作成時に返されるエラーを通じて Video 360 API。 API から返されるエラーは違反を示します。

エラーのほとんどは、広告申込情報に割り当てられている既存のターゲティングが原因で発生します。使用 advertisers.lineItems.targetingTypes.assignedTargetingOptions.list 行に割り当てられた特定のターゲティング タイプのすべてのターゲティング オプションを取得する 制限を考慮して目的のターゲティングが可能かどうかを評価します。 使用し、 advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete 不要なターゲティングを削除してから、必要な 割り当てられるターゲティング オプションです。

YouTube /パートナーのターゲティングに関するエラー

YouTube とパートナーのキャンペーンは、 ディスプレイとVideo 360 API を使用してアクセスしようとすると、エラーが発生します。

YouTube /パートナーのターゲティングは、 YouTube /広告グループ、パートナーの広告申込情報、 以下のターゲティング タイプのすべてのターゲティング:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

同時実行エラー

1 つの広告申込情報の設定またはターゲティングを 同時に複数のリクエストを行うとエラーになります。

1 つのキャンペーンに対して複数のターゲティング オプションを割り当てたり削除したりする必要がある場合 両方を同時に使用する場合は 一括編集リクエストをお寄せください。広告申込情報の配信頻度を 必要に応じて、advertisers.lineItems.patch 関連するターゲット設定のリクエストを連続的に実行して、 最初のリクエストがレスポンスを返すまで、リクエストは送信されません。

一括およびリソース全体のターゲティング オペレーション

一括またはリソース全体のターゲティング方法を使用して、割り当てられた さまざまなターゲティング オプションを利用できます。

広告申込情報の現在のターゲティングをすべて確認するには、 ターゲティング設定を広告申込情報に事前設定しているか、複数の変更が必要な場合 広告申込情報のターゲティングに 同時に追加することをおすすめします あります。

リスト ターゲティングの一括処理

advertisers.lineItems.bulkListAssignedTargetingOptions 1 つまたは複数の広告申込情報に割り当てられているすべてのターゲティングを確認できる。 さまざまなターゲティングタイプで使用できます他の list と同様に動作します。 メソッドを呼び出します。filter クエリ パラメータを使用すると、 TargetingType または Inheritance

以下は、広告申込情報に割り当てられているすべてのターゲティング オプションを一覧表示する方法の例です 親パートナーまたは親広告主に継承された

Java

// Configure the bulk list request.
LineItems.BulkListAssignedTargetingOptions request =
    service.advertisers().lineItems()
        .bulkListAssignedTargetingOptions(advertiser-id);

// Set Line Items to retrieve targeting for.
request.setLineItemIds(line-item-ids);

// Set filter to only return inherited assigned targeting options.
request.setFilter(
    "inheritance=\"INHERITED_FROM_ADVERTISER\" OR inheritance=\"INHERITED_FROM_PARTNER\"");

// Create the response and nextPageToken variables.
BulkListAssignedTargetingOptionsResponse response;
String nextPageToken = null;

do {
  // Set page token and execute the list request.
  response = request.setPageToken(nextPageToken).execute();

  // Check if the response is empty.
  if (response.isEmpty()) {
    System.out.print("Bulk list request returned no Assigned Targeting Options");
    break;
  }

  // Iterate over retrieved line item assigned targeting option wrapper objects.
  for (LineItemAssignedTargetingOption lineItemAssignedTargetingOption
      : response.getLineItemAssignedTargetingOptions()) {
    System.out.printf(
        "Assigned Targeting Option %s found\n",
        lineItemAssignedTargetingOption.getAssignedTargetingOption().getName());
  }

  // Update the next page token.
  nextPageToken = response.getNextPageToken();
} while (!Strings.isNullOrEmpty(nextPageToken));

Python

# Create the page token variable.
next_page_token = ""

while True:
  # Execute the list request.
  response = service.advertisers().lineItems() \
    .bulkListAssignedTargetingOptions(
      advertiserId=advertiser-id,
      lineItemIds=line-item-ids,
      filter="inheritance=\"INHERITED_FROM_ADVERTISER\" OR "
             "inheritance=\"INHERITED_FROM_PARTNER\"",
      pageToken=next_page_token
  ).execute()

  # Check if response is empty.
  if not response:
    print("Bulk list request returned no Assigned Targeting Options")
    break

  # Iterate over retrieved assigned targeting options.
  for lineItemAssignedTargetingOption in response['lineItemAssignedTargetingOptions']:
    print("Assigned Targeting Option %s found"
          % (lineItemAssignedTargetingOption['assignedTargetingOption']['name']))

  # Break out of loop if there is no next page.
  if 'nextPageToken' not in response:
    break

  # Update the next page token.
  next_page_token = response['nextPageToken']

PHP

// Create the page token variable.
$nextPageToken = null;

do {
    // Build the query parameters object for the request.
    $optParams = array(
        'lineItemIds' => line-item-ids,
        'filter' => "inheritance=\"INHERITED_FROM_ADVERTISER\" OR "
            . "inheritance=\"INHERITED_FROM_PARTNER\"",
        'pageToken' => $nextPageToken
    );

    // Call the API, getting all the assigned targeting options for the
    // identified line item.
    $response = $service
        ->advertisers_lineItems
        ->bulkListAssignedTargetingOptions(
            advertiser-id,
            $optParams
    );

    // Print the returned assigned targeting options.
    if (!empty($response->getLineItemAssignedTargetingOptions())) {
        foreach ($response->getLineItemAssignedTargetingOptions() as $option) {
            printf('Assigned Targeting Option %s found\n', $option->getAssignedTargetingOption()['name']);
        }
    } else {
        print('No targeting options returned\n');
    }

    // Update the next page token.
    $nextPageToken = $response->getNextPageToken();
} while (
    !empty($response->getLineItemAssignedTargetingOptions())
    && $nextPageToken);

ターゲティングを一括編集する

advertisers.lineItems.bulkEditAssignedTargetingOptions さまざまなターゲット設定の複数のターゲット設定オプションを追加、削除できる 同時に 1 つまたは複数の広告申込情報から タイプを選択して追加することもできます

このメソッドは、 DeleteAssignedTargetingOptionsRequests とリスト CreateAssignedTargetingOptionsRequests。単一のリクエスト オブジェクトは、割り当てられた複数のターゲティングの削除または作成を表すことができます。 同じターゲティングタイプのオプションを 含めることができます

割り当てられたターゲティング オプションを削除または作成しようとしたときに、 エラーが発生すると、その広告申込情報の一括操作は破棄されます。「 リクエストにより、正常に更新された行のリストが返されます。 失敗した広告申込情報の一覧 最新情報と関連する情報 エラーがあります

1 つ以上のキャンペーンに割り当てられたターゲティング オプションを一括編集する例 割り当てられたターゲティング オプションのリストが表示された広告申込情報 次のオプションを作成できます。

Java

// Create a bulk edit request.
BulkEditAssignedTargetingOptionsRequest requestContent =
    new BulkEditAssignedTargetingOptionsRequest();

// Set line item IDs in edit request.
requestContent.setLineItemIds(line-item-ids);

// Build delete request list.
ArrayList<DeleteAssignedTargetingOptionsRequest> deleteRequests =
    new ArrayList<DeleteAssignedTargetingOptionsRequest>();

// Add browser assigned targeting option IDs to delete request list.
deleteRequests.add(new DeleteAssignedTargetingOptionsRequest()
    .setTargetingType("TARGETING_TYPE_BROWSER")
    .setAssignedTargetingOptionIds(delete-browser-assigned-targeting-ids));

// Add device make or model assigned targeting option IDs to delete request list.
deleteRequests.add(new DeleteAssignedTargetingOptionsRequest()
    .setTargetingType("TARGETING_TYPE_DEVICE_MAKE_MODEL")
    .setAssignedTargetingOptionIds(
        delete-device-make-model-assigned-targeting-ids));

// Set delete requests in edit request.
requestContent.setDeleteRequests(deleteRequests);

// Build create request list.
ArrayList<CreateAssignedTargetingOptionsRequest> createRequests =
    new ArrayList<CreateAssignedTargetingOptionsRequest>();

// Create browser assigned targeting option create request.
CreateAssignedTargetingOptionsRequest createBrowserTargetingRequest =
    new CreateAssignedTargetingOptionsRequest();
createBrowserTargetingRequest.setTargetingType("TARGETING_TYPE_BROWSER");

// Create and set list of browser assigned targeting options.
ArrayList<AssignedTargetingOption> createBrowserAssignedTargetingOptions =
    new ArrayList<AssignedTargetingOption>();
for (String targetingOptionId : create-browser-assigned-targeting-ids) {
  createBrowserAssignedTargetingOptions.add(new AssignedTargetingOption()
      .setBrowserDetails(
          new BrowserAssignedTargetingOptionDetails()
              .setTargetingOptionId(targetingOptionId)));
}
createBrowserTargetingRequest
    .setAssignedTargetingOptions(createBrowserAssignedTargetingOptions);

// Add browser assigned targeting options to list of create requests.
createRequests.add(createBrowserTargetingRequest);

// Set create requests in edit request.
requestContent.setCreateRequests(createRequests);

// Configure the bulk edit request.
LineItems.BulkEditAssignedTargetingOptions request =
    service.advertisers().lineItems()
        .bulkEditAssignedTargetingOptions(
            advertiser-id,
            requestContent);

// Execute bulk edit request.
BulkEditAssignedTargetingOptionsResponse response = request.execute();

// Check if any line items updated successfully.
if (response.getUpdatedLineItemIds() == null || response.getUpdatedLineItemIds().isEmpty()) {
  System.out.println("No line items were updated successfully.");
} else {
  System.out.printf(
      "Targeting configurations for the following line item IDs were updated: %s.\n",
      Arrays.toString(response.getUpdatedLineItemIds().toArray()));
}

// Check if any line items failed to update.
if (response.getFailedLineItemIds() == null || response.getFailedLineItemIds().isEmpty()) {
  System.out.println("No line items failed to update.");
} else {
  // Print the line items that failed to update.
  System.out.printf(
      "Targeting configurations for the following line item IDs failed to update: %s.\n",
      Arrays.toString(response.getFailedLineItemIds().toArray()));

  // Print errors thrown for failed updates.
  System.out.println("The failed updates were caused by the following errors:");
  for (Status error : response.getErrors()) {
    System.out.printf("Error Code: %s, Message: %s\n", error.getCode(), error.getMessage());
  }
}

Python

# Build assigned targeting option objects to create.
createBrowserAssignedTargetingOptions = []
for targeting_id in create-browser-assigned-targeting-ids:
  createBrowserAssignedTargetingOptions.append(
      {'browserDetails': {'targetingOptionId': targeting_id}}
  )

# Create a bulk edit request.
bulk_edit_line_item_request = {
    'lineItemIds': line-item-ids,
    'deleteRequests': [
        {
            'targetingType': 'TARGETING_TYPE_BROWSER',
            'assignedTargetingOptionIds':
              delete-browser-assigned-targeting-ids
        },
        {
            'targetingType': 'TARGETING_TYPE_DEVICE_MAKE_MODEL',
            'assignedTargetingOptionIds':
              delete-device-make-model-assigned-targeting-ids
        }
    ],
    'createRequests': [
        {
            'targetingType': 'TARGETING_TYPE_BROWSER',
            'assignedTargetingOptions':
              createBrowserAssignedTargetingOptions
        }
    ]
}

# Edit the line item targeting.
response = service.advertisers().lineItems()\
  .bulkEditAssignedTargetingOptions(
    advertiserId=advertiser-id,
    body=bulk_edit_line_item_request
).execute()

# Print successfully updated line items.
if 'updatedLineItemIds' not in response:
  print("No line items were updated successfully.")
else:
  print("Targeting configurations for the following line item IDs were updated: %s"
        % response['updatedLineItemIds'])

# Print line items that failed to update.
if 'failedLineItemIds' not in response:
  print("No line items failed to update.")
else:
  print("Targeting configurations for the following line item IDs failed to update: %s"
        % response['failedLineItemIds'])
  if 'errors' in response:
    print("The failed updates were caused by the following errors:")
    for error in response["errors"]:
      print("Error code: %s, Message: %s" % (error["code"], error["message"]))

PHP

// Create delete request list.
$deleteRequests = array();

// Create and add browser assigned targeting option IDs to delete request list.
$deleteBrowserTargetingRequest =
    new Google_Service_DisplayVideo_DeleteAssignedTargetingOptionsRequest();
$deleteBrowserTargetingRequest->setTargetingType(
    "TARGETING_TYPE_BROWSER"
);
$deleteBrowserTargetingRequest->setAssignedTargetingOptionIds(
    delete-browser-assigned-targeting-ids
);
$deleteRequests[] = $deleteBrowserTargetingRequest;

// Create and add device assigned targeting option IDs to delete request list.
$deleteDeviceTargetingRequest =
    new Google_Service_DisplayVideo_DeleteAssignedTargetingOptionsRequest();
$deleteDeviceTargetingRequest->setTargetingType(
    "TARGETING_TYPE_DEVICE_MAKE_MODEL"
);
$deleteDeviceTargetingRequest->setAssignedTargetingOptionIds(
    delete-device-make-model-assigned-targeting-ids
);
$deleteRequests[] = $deleteDeviceTargetingRequest;

// Create create request list.
$createRequests = array();

// Create and populate list of browser assigned targetion options to create.
$createBrowserAssignedTargetingOptions = array();
foreach (create-browser-assigned-targeting-ids as $optionId) {
    $option = new Google_Service_DisplayVideo_AssignedTargetingOption();
    $details =
        new Google_Service_DisplayVideo_BrowserAssignedTargetingOptionDetails();
    $details->setTargetingOptionId($optionId);

    $option->setBrowserDetails($details);
    $createBrowserAssignedTargetingOptions[] = $option;
}

// Create and add browser assigned targeting option create request to create
// request list.
$createBrowserTargetingRequest =
    new Google_Service_DisplayVideo_CreateAssignedTargetingOptionsRequest();
$createBrowserTargetingRequest->setTargetingType(
    "TARGETING_TYPE_BROWSER"
);
$createBrowserTargetingRequest->setAssignedTargetingOptions(
    $createBrowserAssignedTargetingOptions
);
$createRequests[] = $createBrowserTargetingRequest;

// Create a bulk edit request and assign create and delete request lists.
$body =
    new Google_Service_DisplayVideo_BulkEditAssignedTargetingOptionsRequest();
$body->setLineItemIds(line-item-ids);
$body->setCreateRequests($createRequests);
$body->setDeleteRequests($deleteRequests);

// Call the API, editing the assigned targeting options for the identified
// line item.
$response = $service
    ->advertisers_lineItems
    ->bulkEditAssignedTargetingOptions(
        advertiser-id,
        $body
    );

// Print successfully updated line items.
if (!empty($response->getUpdatedLineItemIds())) {
    printf('Targeting configurations for the following line item IDs were updated:\n');
    foreach ($response->getUpdatedLineItemIds() as $id) {
        printf('%s\n', $id);
    }
} else {
    print('No line items were updated successfully.\n');
}

// Print line items that failed to update.
if (!empty($response->getFailedLineItemIds())) {
    print('Targeting configurations for the following line item IDs failed to update:\n');
    foreach ($response->getFailedLineItemIds() as $id) {
        printf('%s\n', $id);
    }
    print('The failed updates were caused by the following errors:\n');
    foreach ($response->getErrors() as $error) {
        printf('Error Code: %s, Message: %s\n', $error->getCode(), $error->getMessage());
    }
} else {
    print('No line items failed to update.\n');
}