Hedeflemeyi Ayarlayın

Hedefleme Seçenekleri, Atanan Hedefleme Seçenekleri ve Satır öğeleri hizmetleri, Display & Video 360 API'de satır öğesi hedeflemeyi ayarlamak için birlikte kullanılır. Bu sayfada, kullanılabilir hedefleme seçeneklerinin nasıl bulunacağı, satır öğelerine hedefleme seçeneklerinin nasıl atanacağı ve atanan hedefleme seçeneklerini listelemek ve düzenlemek için satır öğelerinde toplu işlemler yürütmeye yönelik örnekler açıklanmakta ve örnekler verilmektedir.

Mevcut hedefleme seçeneklerini bulma

Hedefleme seçenekleri, istenen hedef kitleyi tanımlamak için kullanıcı tarafından belirtilen değişkenleri, mevcut hedeflenebilir varlıkları veya önceden var olan seçenekleri kullanır. Önceden mevcut olan seçenekler, hedefleme türüne bağlı olarak enum değerleri veya hedefleme seçeneği kimlikleri kullanılarak tanımlanır. Hedeflenebilir varlıklar, varlık kimlikleri kullanılarak tanımlanır. Hedefleme seçeneği kimlikleri ve varlık kimlikleri, Display & Video 360 API'yi kullanarak bulunabilir.

Ayarlanan enum değerlerini kullan

Aşağıdaki hedefleme türlerine ilişkin hedefleme seçenekleri, belirli enum türleri kullanılarak atanır:

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

İlgili enum değerinin dize sürümü, bu hedefleme türlerinin mevcut AssignedTargetingOption kaynaklarını tanımlamak için kullanılabilir ve assignedTargetingOptionIdAlias alanında kullanılabilir. Atanan hedefleme seçeneklerini alırken veya silerken assignedTargetingOptionId yerine bu takma ad değerini kullanabilirsiniz.

Hedefleme seçeneği kimliklerini alma

Önceden mevcut seçenekleri kullanan hedefleme türleri, karşılık gelen hedefleme seçeneği kimlikleri kullanılarak atanır.

Örneğin, TARGETING_TYPE_ON_SCREEN_POSITION hedefleme türü kullanılarak hedeflenebilecek ekrandaki konum sayısı sınırlıdır. Bu konumların her birine karşılık gelen bir hedefleme seçeneği kimliği vardır.

Bu hedefleme seçeneği kimlikleri, Hedefleme Seçenekleri hizmeti aracılığıyla alınabilir. Hedefleme türüne bağlı olarak alma işlemi iki yöntemden biriyle yapılır:

  • Bağımsız alma veya kapsamlı liste: Hedefleme türlerinin çoğu için seçenekler get ve list yöntemleri kullanılarak alınabilir. Hedefleme türüne ve hedefleme seçeneği kimliğine göre tanımlanan bir hedefleme seçeneğinin ayrıntılarını almak için targetingTypes.targetingOptions.get aracını kullanın. Belirli bir hedefleme türündeki tüm kullanılabilir hedefleme seçeneklerini listelemek için targetingTypes.targetingOptions.list simgesini kullanın.
  • Arama: Konuma dayalı hedefleme türleri (TARGETING_TYPE_GEO_REGION, TARGETING_TYPE_POI ve TARGETING_TYPE_BUSINESS_CHAIN) için seçenekler search yöntemi kullanılarak alınmalıdır. Belirli bir sorgu dizeleriyle eşleşen hedefleme seçeneklerini almak için targetingTypes.targetingOptions.search aracını kullanın.

Aşağıda, TARGETING_TYPE_BROWSER hedefleme türü için olası hedefleme seçeneklerinin listesini nasıl alacağınıza dair bir örnek verilmiştir:

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

Hedeflenebilir varlıkları listeleyin

Mevcut bir hedeflenebilir varlığı kullanarak bir satır öğesini hedeflemek için söz konusu varlığın kimliğine ihtiyacınız vardır. Kanallar, birleşik kitleler ve envanter kaynağı grupları gibi hedeflenebilir varlıklar, Display & Video 360 API'deki kendi hizmetleri üzerinden alınabilir.

Her hizmetin kendi get ve list yöntemleri vardır. Bir varlığın belirli bir reklamveren altında bulunduğunu onaylamak için get yöntemini kullanın. Belirli bir reklamveren tarafından kullanılabilen ve dolayısıyla, bu reklamveren altındaki bir satır öğesine hedefleme atamak için kullanılabilen kaynak türünde tüm varlıkları keşfetmek için list yöntemini kullanın.

Hedeflenebilir varlıkların bir kısmı API aracılığıyla da yönetilebilir. Bu işlem, ilgili hizmetteki create ve patch yöntemlerinin yanı sıra envanter kaynakları, negatif anahtar kelimeler ve konumlar gibi varlıklarda listelenen bağımsız değerlere yönelik hizmetler aracılığıyla gerçekleştirilir.

ÖY hedefleme seçeneği kimlikleri oluşturma

TARGETING_TYPE_POI altındaki adlandırılmış önemli yerler hedefleme seçenekleri targetingTypes.targetingOptions.search kullanılarak alınabilir. Ek olarak, belirli enlem-boylam koordinatlarını hedeflemek için özel TARGETING_TYPE_POI hedefleme seçeneği kimlikleri oluşturabilirsiniz.

ÖY hedefleme seçeneği kimliği oluşturmak için aşağıdaki adımları uygulayın:

  1. Enlem-boylam koordinatlarını al (ör: "40.7414691, -74.003387")
  2. Koordinat değerlerini altıncı ondalık basamağa yuvarlama (ör. "40.741469, -74.003387")
  3. Koordinat değerlerindeki ondalık basamakları kaldırın (ör. "40741469, -74003387")
  4. Noktalı virgülle ayrılmış tek bir dize oluşturmak için iki değeri birleştirin (ör. "40741469;-74003387")

Ortaya çıkan dize, TARGETING_TYPE_POI atanmış hedefleme seçeneği oluştururken targetingOptionId olarak kullanılabilir.

Oluşturulduğunda, atanan hedefleme seçeneği kaynağının targetingOptionId ve assignedTargetingOptionId alanları güncellenerek noktalı virgül ve alfanümerik karma eklenir.

Hedefleme seçeneği atama

Bir satır öğesine atanan hedefleme, Atanan Hedefleme Seçeneği olarak temsil edilir. Atanan Hedefleme Seçenekleri hizmetini kullanarak bu varlıkları yönetebilirsiniz. Atanmış hedefleme seçeneği oluşturulduğunda, bu hedefleme ayrıntıları üst satır öğesine uygulanır. Mevcut bir atanmış hedefleme seçeneğini sildiğinizde hedefleme kaldırılır.

Atanmış hedefleme seçenekleri oluşturmak için advertisers.lineItems.targetingTypes.assignedTargetingOptions.create aracını kullanın. Atanan hedefleme seçeneği kaynağının details alanında, amaçlanan hedefleme türüne karşılık gelen hedefleme parametrelerini belirtin.

Aşağıda, TARGETING_TYPE_BROWSER hedefleme türünde atanmış hedefleme seçeneğinin nasıl oluşturulacağına dair bir örnek verilmiştir:

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

Hatalar

Hedefleme yapılandırma hataları

Display & Video 360'ta hedefleme ile ilgili bir dizi karmaşık kural vardır. Bunlar, atanan hedefleme seçeneği oluşturulurken döndürülen hatalarla Display & Video 360 API'de zorunlu kılınır. API'nin döndürdüğü hata, ihlali belirtir.

Hataların nedeni çoğunlukla bir satır öğesine atanmış mevcut hedeflemedir. advertisers.lineItems.targetingTypes.assignedTargetingOptions.list Bir satır öğesine atanmış belirli bir hedefleme türündeki tüm hedefleme seçeneklerini almak, istenen hedeflemenin sınırlamalara göre mümkün olup olmadığını değerlendirmek ve advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete istenen hedeflemeyi tekrar atamadan önce istenmeyen hedeflemeyi tekrar atamadan önce kullanılan hedeflemeyi kullanın. seçeneğini kullanın.

YouTube ve İş Ortakları hedefleme hataları

Özel olarak YouTube ve İş Ortakları kampanyaları için hedefleme, Display & Video 360 API kullanılarak güncellenemez ve yapmaya çalışmak hataya neden olur.

YouTube ve İş Ortakları hedefleme, doğrudan YouTube ve İş Ortakları Satır Öğeleri ve Reklam Grupları'na atanan tüm hedeflemenin yanı sıra aşağıdaki hedefleme türlerinin herhangi bir hedeflemesinden oluşur:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

Eşzamanlılık hataları

Tek bir satır öğesinin ayarlarını veya hedeflemesini birden fazla eşzamanlı istekle güncellemeye çalışmak hatayla sonuçlanır.

Tek bir satır öğesi için aynı anda birden çok atanmış hedefleme seçeneğini eklemeniz veya kaldırmanız gerekiyorsa toplu düzenleme isteğini kullanmanız gerekir. Bir satır öğesinin ayarlarını ve hedeflemesini güncellemek istiyorsanız ilk kullanıcı bir yanıt verene kadar ikinci isteğin gönderilmemesi için advertisers.lineItems.patch isteğini ve ilgili hedefleme isteğini art arda yapın.

Toplu ve kaynak genelinde hedefleme işlemleri

Hedefleme türleri genelinde atanan hedefleme seçeneklerini yönetmek için toplu ve kaynak genelinde hedefleme yöntemlerini kullanabilirsiniz:

Bir satır öğesinin mevcut hedeflemesinin kapsamlı bir görünümünü elde etmek, satır öğesine önceden ayarlanmış bir hedefleme yapılandırması uygulamak veya bir satır öğesinin hedeflemesinde aynı anda birden çok değişiklik yapmak istiyorsanız bu hedefleme yöntemlerini kullanabilirsiniz.

Toplu liste hedefleme

advertisers.lineItems.bulkListAssignedTargetingOptions, çeşitli hedefleme türlerinde bir veya daha fazla satır öğesine atanmış tüm hedeflemeyi incelemenin bir yolunu sunar. İşleyiş şekli, diğer list yöntemlerine benzer. filter sorgu parametresini kullanarak sonuçları TargetingType veya Inheritance ölçütlerine göre filtreleyebilirsiniz.

Burada, ana iş ortağı veya reklamveren tarafından devralınan bir satır öğesine atanan tüm hedefleme seçeneklerinin nasıl listeleneceğine dair bir örnek gösterilmektedir:

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

Hedeflemeyi toplu olarak düzenleme

advertisers.lineItems.bulkEditAssignedTargetingOptions bir veya daha fazla satır öğesine aynı anda çeşitli hedefleme türlerinde birden fazla hedefleme seçeneği ekleme ve kaldırma yöntemi sunar.

Yöntem, DeleteAssignedTargetingOptionsRequests ve CreateAssignedTargetingOptionsRequests listesini alır. Tek bir istek nesnesi, aynı hedefleme türünde birden fazla atanmış hedefleme seçeneğinin silinmesini veya oluşturulmasını temsil edebilir.

Bir atanmış hedefleme seçeneğini silme veya oluşturma girişimi bir satır öğesinde hataya neden olursa söz konusu satır öğesi için toplu işlem iptal edilir. İstek, başarıyla güncellenen satır öğelerinin listesinin yanı sıra güncellenemeyen satır öğelerinin ve ilgili hataların listelerini döndürür.

Silinecek atanmış hedefleme seçenekleri listesi ve oluşturmak için hedefleme seçenekleri verildiğinde bir veya daha fazla satır öğesi için atanan hedefleme seçeneklerini toplu olarak nasıl düzenleyeceğinize dair bir örneği aşağıda bulabilirsiniz:

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