Ustaw kierowanie

Usługi Opcje kierowania, Przypisane opcje kierowaniaElementy zamówienia są używane w połączeniu z kierowaniem elementu zamówienia w interfejsie Display & Video 360 API. Na tej stronie znajdziesz opis i przykłady znajdowania dostępnych opcji kierowania, przypisywania ich do elementów zamówienia oraz wykonywania operacji zbiorczych na elementach zamówienia w celu wyświetlania i edytowania przypisanych opcji kierowania.

Dostępne opcje kierowania

Opcje kierowania używają zmiennych określonych przez użytkownika, dotychczasowych elementów docelowych lub wcześniej zdefiniowanych opcji, aby określić pożądaną grupę odbiorców. Dotychczasowe opcje są identyfikowane za pomocą wartości z listy lub identyfikatorów opcji kierowania, w zależności od typu kierowania. Elementy, które można kierować, są identyfikowane za pomocą ich identyfikatorów. Identyfikatory opcji kierowania i identyfikatory jednostek można znaleźć w interfejsie Display & Video 360 API.

Używanie wartości typu wyliczeniowego

Opcje kierowania dla tych typów kierowania są przypisywane za pomocą określonych typów wyliczenia:

TargetingType Typ wyliczeniowy
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

Wersja ciągu znaków odpowiedniej wartości z układu może służyć do identyfikowania istniejących zasobów AssignedTargetingOption tych typów kierowania. Jest ona dostępna w polu assignedTargetingOptionIdAlias. Możesz używać tej wartości aliasu zamiast wartości assignedTargetingOptionId podczas pobierania lub usuwania przypisanych opcji kierowania.

Pobieranie identyfikatorów opcji kierowania

Typy kierowania, które korzystają z dotychczasowych opcji, są przypisywane za pomocą odpowiednich identyfikatorów opcji kierowania.

Na przykład za pomocą typu kierowania TARGETING_TYPE_ON_SCREEN_POSITION można kierować reklamy na ograniczoną liczbę pozycji na ekranie. Każda z tych pozycji ma odpowiedni identyfikator opcji kierowania.

Te identyfikatory opcji kierowania można pobrać za pomocą usługi Opcje kierowania. W zależności od typu kierowania wyszukiwanie odbywa się na 2 sposoby:

  • Pojedyncze wyszukiwanie lub pełna lista: opcji dla większości typów kierowania można szukać, używając metod getlist. Użyj polecenia targetingTypes.targetingOptions.get, aby pobrać szczegóły opcji kierowania zidentyfikowanej przez typ kierowania i identyfikator opcji kierowania. Aby wyświetlić wszystkie dostępne opcje kierowania danego typu, użyj polecenia targetingTypes.targetingOptions.list.
  • Wyszukiwanie: opcje typów kierowania na lokalizację (TARGETING_TYPE_GEO_REGION, TARGETING_TYPE_POITARGETING_TYPE_BUSINESS_CHAIN) należy pobierać za pomocą metody search. Użyj targetingTypes.targetingOptions.search, aby pobrać opcje kierowania danego typu, które pasują do podanych ciągów zapytań.

Oto przykład sposobu uzyskiwania listy możliwych opcji kierowania dla typu kierowania 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
);

Wyświetlenie listy encji docelowych

Aby kierować element zamówienia za pomocą dotychczasowego elementu docelowego, musisz podać jego identyfikator. Elementy, na które można kierować reklamy, np. kanały, połączone listy odbiorców i grupy źródeł zasobów reklamowych, można pobierać za pomocą własnych usług w interfejsie Display & Video 360 API.

Każda usługa ma własne metody get i list. Aby potwierdzić, że dany element jest dostępny dla danego reklamodawcy, użyj metody get. Użyj metody list, aby znaleźć wszystkie elementy danego typu zasobu, które są dostępne dla danego reklamodawcy, a więc mogą być używane do przypisywania kierowania do elementu zamówienia należącego do tego reklamodawcy.

Za pomocą interfejsu API możesz też zarządzać podzbiorem elementów docelowych. Można to zrobić za pomocą metod create i patch w odpowiedniej usłudze, a także usług dla poszczególnych wartości wymienionych w elementach, takich jak źródła asortymentu, kluczowe słowa odrzucone i lokalizacje.

Tworzenie identyfikatorów opcji kierowania na punkty POI

Nazwane opcje kierowania na ważne miejsca w sekcji TARGETING_TYPE_POI można pobrać za pomocą targetingTypes.targetingOptions.search. Dodatkowo możesz tworzyć niestandardowe identyfikatory opcji kierowania TARGETING_TYPE_POI, aby kierować reklamy na określone współrzędne geograficzne.

Aby utworzyć identyfikator opcji kierowania na punkty docelowego:

  1. Pobierz współrzędne szerokości i długości geograficznej (np. „40.7414691, -74.003387”).
  2. Zaokrąglaj wartości współrzędnych do 6 miejsca po przecinku (np. „40.741469, -74.003387”).
  3. Usuń miejsca dziesiętne z wartości współrzędnych (np. „40741469, -74003387”).
  4. Połącz te 2 wartości, aby utworzyć jeden ciąg znaków rozdzielony średnikiem (np. „40741469;-74003387”).

Uzyskany ciąg znaków można użyć jako targetingOptionId podczas tworzenia opcji kierowania z przypisanym TARGETING_TYPE_POI.

Po utworzeniu pola targetingOptionIdassignedTargetingOptionId przypisanego zasobu opcji kierowania zostaną zaktualizowane przez dodanie średnika i znaku heksadecymalnego.

Przypisywanie opcji kierowania

Kierowanie przypisane do elementu zamówienia jest wyświetlane jako przypisana opcja kierowania. Tymi elementami możesz zarządzać za pomocą usługi Przypisane opcje kierowania. Utworzenie przypisanej opcji kierowania powoduje zastosowanie tych szczegółów kierowania do nadrzędnego elementu zamówienia. Usunięcie przypisanej opcji kierowania spowoduje usunięcie tego kierowania.

Użyj opcji advertisers.lineItems.targetingTypes.assignedTargetingOptions.create, aby utworzyć przypisane opcje kierowania. W przypadku przypisanego zasobu opcji kierowania określ parametry kierowania w polu details, które odpowiadają wybranemu typowi kierowania.

Oto przykład utworzenia opcji kierowania przypisanej do typu kierowania 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']
);

Błędy

Błędy konfiguracji kierowania

W Display & Video 360 obowiązuje wiele skomplikowanych zasad dotyczących kierowania. Są one egzekwowane w interfejsie Display & Video 360 API za pomocą błędów zwracanych podczas tworzenia przypisanej opcji kierowania. Błąd zwrócony przez interfejs API będzie wskazywać naruszenie.

Błędy są najczęściej spowodowane przez istniejące ustawienia kierowania przypisane do elementu zamówienia. Użyj opcji advertisers.lineItems.targetingTypes.assignedTargetingOptions.list, aby pobrać wszystkie opcje kierowania danego typu przypisane do elementu zamówienia, ocenić, czy wybrane kierowanie jest możliwe z uwagi na ograniczenia, a potem użyj opcji advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete, aby usunąć niechciane kierowanie, zanim ponownie spróbujesz utworzyć wybraną opcję kierowania.

Błędy kierowania na YouTube i sieć partnerów

Kierowania na kampanie w YouTube i sieci partnerów wideo Google nie można aktualizować za pomocą interfejsu API Display & Video 360. Próba wykonania tej czynności spowoduje wystąpienie błędu.

Kierowanie typu „YouTube i sieć partnerów” obejmuje wszystkie ustawienia kierowania przypisane bezpośrednio do elementów zamówienia typu „YouTube i sieć partnerów” oraz grup reklam, a także wszelkie ustawienia kierowania tych typów:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

Błędy dotyczące współbieżności

Próba zaktualizowania ustawień lub kierowania pojedynczego elementu zamówienia za pomocą wielu równoczesnych żądań spowoduje błąd.

Jeśli chcesz dodać lub usunąć kilka przypisanych opcji kierowania w ramach jednego elementu zamówienia jednocześnie, prześlij prośbę o edytowanie zbiorcze. Jeśli chcesz zaktualizować ustawienia i kierowanie elementu zamówienia, wyślij kolejno żądanie advertisers.lineItems.patch i odpowiednie żądanie kierowania, aby mieć pewność, że drugie żądanie nie zostanie wysłane, dopóki pierwsze nie zwróci odpowiedzi.

Operacje zbiorcze i kierowanie na zasoby

Aby zarządzać przypisanymi opcjami kierowania w ramach różnych typów kierowania, możesz używać metod kierowania zbiorczegona poziomie zasobu:

  • Użyj metod kierowania zbiorczego, aby pobierać i edytować opcje kierowania w różnych rodzajach kierowania i w różnych zasobach. Za pomocą elementu advertisers.lineItems.bulkListAssignedTargetingOptions możesz pobrać pełne konfiguracje kierowania wielu elementów zamówienia lub za pomocą elementu advertisers.lineItems.bulkEditAssignedTargetingOptions wprowadzić identyczne zmiany w kierowaniu wielu elementów zamówienia. Te funkcje są dostępne tylko w usłudze advertisers.lineItems.
  • Używaj metod kierowania na zasób, aby pobierać i edytować opcje kierowania w ramach różnych typów kierowania w ramach jednego zasobu. Są one dostępne w usługach partnersadvertisers i mają nazwy listAssignedTargetingOptions lub editAssignedTargetingOptions.

Jeśli chcesz uzyskać pełny widok bieżącego kierowania elementu zamówienia, zastosować wstępnie skonfigurowane ustawienia kierowania w elemencie zamówienia lub wprowadzić jednocześnie wiele zmian w kierowaniu elementu zamówienia, możesz skorzystać z tych metod kierowania.

Kierowanie na listy zbiorczo

advertisers.lineItems.bulkListAssignedTargetingOptionsumożliwia przeglądanie wszystkich ustawień kierowania przypisanych do co najmniej 1 elementu zamówienia w ramach różnych typów kierowania. Działa ona podobnie do innych metod list. Parametr zapytania filter możesz użyć do filtrowania wyników według TargetingType lub Inheritance.

Oto przykład wylistowania wszystkich opcji kierowania przypisanych do elementu zamówienia, które są dziedziczone przez nadrzędnego partnera lub reklamodawcę:

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

Zbiorcze edytowanie kierowania

advertisers.lineItems.bulkEditAssignedTargetingOptionsumożliwia jednoczesne dodawanie i usuwanie wielu opcji kierowania różnych typów do jednego lub większej liczby elementów zamówienia.

Metoda przyjmuje listę DeleteAssignedTargetingOptionsRequests i listę CreateAssignedTargetingOptionsRequests. Pojedynczy obiekt żądania może odpowiadać usunięciu lub utworzeniu wielu przypisanych opcji kierowania tego samego typu.

Jeśli próba usunięcia lub utworzenia przypisanej opcji kierowania spowoduje błąd w elemencie zamówienia, działanie zbiorcze zostanie anulowane. Żądanie zwraca listę elementów zamówienia, które zostały zaktualizowane, a także listy elementów zamówienia, których nie udało się zaktualizować, oraz odpowiednie błędy.

Oto przykład zbiorczej edycji przypisanych opcji kierowania w przypadku co najmniej 1 elementu zamówienia, biorąc pod uwagę listy przypisanych opcji kierowania do usunięcia i opcji kierowania do utworzenia:

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