Tetapkan Penargetan

Layanan Penargetan Penargetan, Opsi Penargetan yang Ditetapkan, dan Item baris semuanya digunakan bersama untuk menetapkan penargetan item baris di Display & Video 360 API. Halaman ini menjelaskan dan memberikan contoh cara menemukan opsi penargetan yang tersedia, menetapkan opsi penargetan ke item baris, dan menjalankan operasi massal pada item baris untuk mencantumkan dan mengedit opsi penargetan yang ditetapkan.

Menemukan opsi penargetan yang tersedia

Opsi penargetan menggunakan variabel yang ditentukan pengguna, entitas yang dapat ditargetkan, atau opsi yang sudah ada sebelumnya untuk menentukan target audiens yang diinginkan. Opsi yang sudah ada diidentifikasi menggunakan nilai enum atau ID opsi penargetan, bergantung pada jenis penargetan. Entitas yang dapat ditargetkan diidentifikasi menggunakan ID entitasnya. ID opsi penargetan dan ID entitas dapat ditemukan menggunakan Display & Video 360 API.

Menggunakan nilai enum yang ditetapkan

Opsi penargetan untuk jenis penargetan berikut ditetapkan menggunakan jenis enum tertentu:

TargetingType Enum
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

Versi string dari nilai enum yang relevan dapat digunakan untuk mengidentifikasi resource AssignedTargetingOption yang ada dari jenis penargetan ini dan tersedia di kolom assignedTargetingOptionIdAlias. Anda dapat menggunakan nilai alias ini sebagai pengganti assignedTargetingOptionId saat mengambil atau menghapus opsi penargetan yang ditetapkan.

Ambil ID opsi penargetan

Jenis penargetan yang menggunakan opsi yang sudah ada akan ditetapkan menggunakan ID opsi penargetan yang sesuai.

Misalnya, ada jumlah posisi di layar terbatas yang dapat ditargetkan menggunakan jenis penargetan TARGETING_TYPE_ON_SCREEN_POSITION. Masing-masing posisi ini memiliki ID opsi penargetan yang sesuai.

ID opsi penargetan ini dapat diambil melalui layanan Opsi Penargetan. Bergantung pada jenis penargetan, pengambilan dilakukan dengan salah satu dari dua cara berikut:

  • Pengambilan individual atau daftar lengkap: Pengambilan opsi untuk sebagian besar jenis penargetan dapat dilakukan menggunakan metode get dan list. Gunakan targetingTypes.targetingOptions.get untuk mengambil detail opsi penargetan yang diidentifikasi oleh jenis penargetan dan ID opsi penargetan. Gunakan targetingTypes.targetingOptions.list untuk mencantumkan semua opsi penargetan yang tersedia dari jenis penargetan tertentu.
  • Penelusuran: Opsi untuk jenis penargetan berbasis lokasi (TARGETING_TYPE_GEO_REGION, TARGETING_TYPE_POI, dan TARGETING_TYPE_BUSINESS_CHAIN) harus diambil menggunakan metode search. Gunakan targetingTypes.targetingOptions.search untuk mengambil opsi penargetan dari jenis tertentu yang cocok dengan string kueri yang ditentukan.

Berikut adalah contoh cara mengambil daftar opsi penargetan yang mungkin untuk jenis penargetan 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
);

Mencantumkan entity yang dapat ditarget

Untuk menargetkan item baris menggunakan entitas yang dapat ditargetkan, Anda memerlukan ID entitas tersebut. Entitas yang dapat ditargetkan, seperti saluran, audiens gabungan, dan grup sumber inventaris, dapat diambil melalui layanannya sendiri di Display & Video 360 API.

Setiap layanan memiliki metode get dan list-nya sendiri. Gunakan metode get untuk mengonfirmasi bahwa entitas tersedia di bawah pengiklan tertentu. Gunakan metode list untuk menemukan semua entity dari jenis resource tersebut yang tersedia bagi pengiklan tertentu, dan oleh karena itu, dapat digunakan dalam menetapkan penargetan ke item baris dalam pengiklan tersebut.

Subset entity yang dapat ditargetkan juga dapat dikelola melalui API. Hal ini dilakukan melalui metode create dan patch di layanan yang sesuai, serta layanan untuk masing-masing nilai yang tercantum dalam entity, seperti sumber inventaris, kata kunci negatif, dan lokasi.

ID opsi penargetan POI build

Opsi penargetan lokasi menarik yang bernama, di bagian TARGETING_TYPE_POI dapat diambil menggunakan targetingTypes.targetingOptions.search. Selain itu, Anda dapat membuat ID opsi penargetan TARGETING_TYPE_POI khusus untuk menargetkan koordinat garis lintang dan garis bujur tertentu.

Ikuti langkah-langkah berikut untuk membuat ID opsi penargetan POI:

  1. Mengambil koordinat garis lintang dan bujur (mis: "40.7414691, -74.003387")
  2. Nilai koordinat pembulatan ke angka desimal keenam (contoh: "40.741469, -74.003387")
  3. Hapus tempat desimal dari nilai koordinat (misalnya: "40741469, -74003387")
  4. Gabungkan kedua nilai tersebut untuk membuat satu string, yang dipisahkan dengan titik koma (contoh: "40741469;-74003387")

String yang dihasilkan dapat digunakan sebagai targetingOptionId saat membuat opsi penargetan yang ditetapkan ke TARGETING_TYPE_POI.

Setelah dibuat, kolom targetingOptionId dan assignedTargetingOptionId resource opsi penargetan yang ditetapkan akan diperbarui, dengan menambahkan hash alfanumerik dan titik koma.

Menetapkan opsi penargetan

Penargetan yang ditetapkan ke item baris direpresentasikan sebagai Opsi Penargetan yang Ditetapkan. Anda dapat mengelola entitas ini menggunakan layanan Opsi Penargetan yang Ditetapkan. Membuat opsi penargetan yang ditetapkan akan menerapkan detail penargetan tersebut ke item baris induk. Menghapus opsi penargetan yang ditetapkan dan sudah ada akan menghapus penargetan tersebut.

Gunakan advertisers.lineItems.targetingTypes.assignedTargetingOptions.create untuk membuat opsi penargetan yang ditetapkan. Tentukan parameter penargetan di kolom details dari resource opsi penargetan yang ditetapkan yang sesuai dengan jenis penargetan yang diinginkan.

Berikut adalah contoh cara membuat opsi penargetan yang ditetapkan untuk jenis penargetan 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']
);

Error

Error konfigurasi penargetan

Ada sejumlah aturan rumit terkait penargetan di Display & Video 360. Hal ini diterapkan di Display & Video 360 API melalui error yang ditampilkan saat pembuatan opsi penargetan yang ditetapkan. Error yang ditampilkan oleh API akan menyebutkan pelanggaran.

Error sebagian besar disebabkan oleh penargetan yang sudah ada yang ditetapkan ke item baris. Gunakan advertisers.lineItems.targetingTypes.assignedTargetingOptions.list untuk mengambil semua opsi penargetan dari jenis penargetan tertentu yang ditetapkan ke item baris, menilai apakah penargetan yang diinginkan memungkinkan dengan mempertimbangkan batasan, dan gunakan advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete untuk menghapus penargetan yang tidak diinginkan sebelum mencoba lagi membuat opsi penargetan yang ditetapkan yang diinginkan.

Error penargetan YouTube & Partner

Penargetan khusus untuk kampanye YouTube & Partner tidak dapat diperbarui menggunakan Display & Video 360 API dan mencoba melakukannya akan menghasilkan error.

Penargetan YouTube & Partners terdiri dari semua penargetan yang ditetapkan langsung ke Item Baris dan Grup Iklan YouTube & Partners, serta penargetan apa pun dari jenis penargetan berikut:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

Error serentak

Mencoba memperbarui setelan atau penargetan satu item baris melalui beberapa permintaan serentak akan mengakibatkan error.

Jika perlu menambahkan atau menghapus beberapa opsi penargetan yang ditetapkan untuk satu item baris sekaligus, Anda harus menggunakan permintaan edit massal. Jika Anda ingin memperbarui setelan dan penargetan item baris, buat permintaan advertisers.lineItems.patch dan permintaan penargetan yang relevan secara berurutan untuk memastikan permintaan kedua tidak dikirim sampai yang pertama menampilkan respons.

Operasi penargetan massal dan seluruh resource

Anda dapat menggunakan metode penargetan bulk dan resource-wide untuk mengelola opsi penargetan yang ditetapkan di seluruh jenis penargetan:

Jika Anda ingin gambaran lengkap tentang penargetan item baris saat ini, ingin menerapkan konfigurasi penargetan yang telah ditetapkan ke item baris, atau perlu membuat beberapa perubahan pada penargetan item baris secara bersamaan, pertimbangkan untuk menggunakan metode penargetan ini.

Cantumkan penargetan secara massal

advertisers.lineItems.bulkListAssignedTargetingOptions menyediakan cara untuk melihat semua penargetan yang ditetapkan ke satu atau beberapa item baris di berbagai jenis penargetan. Metode ini beroperasi mirip dengan metode list lainnya. Anda dapat menggunakan parameter kueri filter untuk memfilter hasil menurut TargetingType atau Inheritance.

Berikut adalah contoh cara menampilkan daftar semua opsi penargetan yang ditetapkan ke item baris yang diwarisi oleh partner induk atau pengiklan:

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);

Mengedit penargetan secara massal

advertisers.lineItems.bulkEditAssignedTargetingOptions menyediakan cara untuk menambahkan dan menghapus beberapa opsi penargetan berbagai jenis penargetan dari satu atau beberapa item baris secara bersamaan.

Metode ini mengambil daftar DeleteAssignedTargetingOptionsRequests dan daftar CreateAssignedTargetingOptionsRequests. Satu objek permintaan dapat mewakili penghapusan atau pembuatan beberapa opsi penargetan yang ditetapkan dari jenis penargetan yang sama.

Jika percobaan penghapusan atau pembuatan opsi penargetan yang ditetapkan menyebabkan error untuk item baris, tindakan massal akan diabaikan untuk item baris tersebut. Permintaan tersebut menampilkan daftar item baris yang berhasil diperbarui, serta daftar item baris yang gagal diperbarui dan error yang relevan.

Berikut adalah contoh cara mengedit massal opsi penargetan yang ditetapkan untuk satu atau beberapa item baris berdasarkan daftar opsi penargetan yang telah ditetapkan untuk dihapus dan opsi penargetan untuk dibuat:

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');
}