Ustaw kierowanie

Do konfigurowania kierowania elementów zamówienia w interfejsie Display & Video 360 API służą opcje kierowania, opcje kierowania przypisanych i usługi elementy zamówienia. Na tej stronie opisujemy i przedstawiamy przykłady, jak znajdować dostępne opcje kierowania, przypisywać opcje kierowania do elementów zamówienia i wykonywać na nich operacje zbiorcze w celu wyświetlania i edytowania przypisanych opcji kierowania.

Znajdowanie dostępnych opcji kierowania

Aby określić docelowych odbiorców, opcje kierowania korzystają ze zmiennych określonych przez użytkownika, istniejących elementów, na które można kierować reklamy, lub dotychczasowych opcji. Istniejące opcje są rozpoznawane na podstawie wartości wyliczeniowych lub identyfikatorów opcji kierowania, w zależności od typu kierowania. Jednostki, na które można kierować reklamy, są rozpoznawane na podstawie ich identyfikatorów. Identyfikatory opcji kierowania i jednostek znajdziesz za pomocą interfejsu Display & Video 360 API.

Używanie ustawionych wartości wyliczeniowych

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

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

Wersja ciągu znaków odpowiedniej wartości wyliczenia może posłużyć do zidentyfikowania istniejących zasobów AssignedTargetingOption tego typu kierowania. Jest ona dostępna w polu assignedTargetingOptionIdAlias. Możesz użyć tej wartości aliasu zamiast assignedTargetingOptionId podczas pobierania lub usuwania przypisanych opcji kierowania.

Pobieranie identyfikatorów opcji kierowania

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

Na przykład jest ograniczona liczba pozycji na ekranie, na które można kierować reklamy, korzystając z typu kierowania TARGETING_TYPE_ON_SCREEN_POSITION. Każdej z tych pozycji odpowiada odpowiadający jej identyfikator opcji kierowania.

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

  • Wyszukiwanie indywidualnych lub wyczerpująca lista: opcje pobierania większości typów kierowania można pobierać za pomocą metod get i list. Za pomocą targetingTypes.targetingOptions.get możesz pobierać szczegóły opcji kierowania określonej przez typ i identyfikator opcji kierowania. Użyj właściwości targetingTypes.targetingOptions.list, aby wymienić wszystkie dostępne opcje kierowania danego typu kierowania.
  • Wyszukiwanie: opcje typów kierowania na podstawie lokalizacji (TARGETING_TYPE_GEO_REGION, TARGETING_TYPE_POI i TARGETING_TYPE_BUSINESS_CHAIN) należy pobrać za pomocą metody search. Użyj narzędzia targetingTypes.targetingOptions.search, aby pobrać opcje kierowania danego typu, które pasują do podanych ciągów zapytań.

Oto przykład, jak pobrać listę dostępnych 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świetl listę jednostek, na które można kierować reklamy

Aby kierować element zamówienia za pomocą istniejącego obiektu, na który można kierować reklamy, potrzebujesz jego identyfikatora. Elementy, na które można kierować reklamy, takie jak kanały, połączone listy odbiorców i grupy źródeł zasobów reklamowych, można pobierać za pomocą własnych usług dostępnych w interfejsie Display & Video 360 API.

Każda usługa ma własne metody get i list. Metoda get pozwala sprawdzić, czy element jest dostępny w ramach danego reklamodawcy. Metoda list służy do wykrywania wszystkich elementów tego typu zasobów, które są dostępne dla danego reklamodawcy, dzięki czemu można ich użyć do przypisywania kierowania do elementu zamówienia tego reklamodawcy.

Podzbiorem jednostek, na które można kierować reklamy, można też zarządzać za pomocą interfejsu API. Możesz to zrobić za pomocą metod create i patch w poszczególnych usługach, a także usług dla poszczególnych wartości wymienionych w elementach, takich jak źródła zasobów reklamowych, wykluczające słowa kluczowe i lokalizacje.

Utwórz identyfikatory opcji kierowania ciekawych miejsc

Opcje kierowania na ciekawe miejsca w polu TARGETING_TYPE_POI można wyszukać za pomocą narzędzia targetingTypes.targetingOptions.search. Możesz też utworzyć niestandardowe identyfikatory opcji kierowania na TARGETING_TYPE_POI, aby kierować reklamy na konkretne współrzędne szerokości i długości geograficznej.

Aby utworzyć identyfikator opcji kierowania ciekawych miejsc, wykonaj te czynności:

  1. Pobierz współrzędne szerokości i długości geograficznej (np. „40.7414691, -74.003387”)
  2. Wartości współrzędnych zaokrąglonych do szóstego 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 oddzielony średnikiem (np. „40741469;-74003387”)

Powstały w ten sposób ciąg znaków możesz wykorzystać jako targetingOptionId podczas tworzenia opcji kierowania przypisanej do TARGETING_TYPE_POI.

Po utworzeniu pola targetingOptionId i assignedTargetingOptionId przypisanego zasobu opcji kierowania zostaną zaktualizowane i dołączone do niej średnik i alfanumeryczny hasz.

Przypisywanie opcji kierowania

Kierowanie przypisane do elementu zamówienia jest reprezentowane jako przypisana opcja kierowania. Tymi jednostkami możesz zarządzać w usłudze przypisanych opcji kierowania. Utworzenie przypisanej opcji kierowania powoduje zastosowanie tych szczegółów do nadrzędnego elementu zamówienia. Usunięcie przypisanej opcji kierowania spowoduje usunięcie tego kierowania.

Aby utworzyć przypisane opcje kierowania, użyj właściwości advertisers.lineItems.targetingTypes.assignedTargetingOptions.create. Określ parametry kierowania w polu details przypisanego zasobu opcji kierowania, który odpowiada docelowemu typowi kierowania.

Oto przykład tworzenia przypisanej opcji kierowania typu 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

Jeśli chodzi o kierowanie w Display & Video 360, istnieje wiele złożonych reguł. Są one egzekwowane w interfejsie Display & Video 360 API przez błędy zwracane podczas tworzenia przypisanych opcji kierowania. Naruszenie zasadne będzie wskazane w błędzie zwróconym przez interfejs API.

Błędy są najczęściej spowodowane istniejącymi ustawieniami kierowania przypisanymi do elementu zamówienia. Użyj advertisers.lineItems.targetingTypes.assignedTargetingOptions.list, aby pobrać wszystkie opcje kierowania danego typu kierowania przypisanego do elementu zamówienia, sprawdź, czy odpowiednie kierowanie jest możliwe przy uwzględnieniu ograniczeń, i użyj advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete, aby usunąć niepożądane ustawienia kierowania, zanim spróbujesz ponownie utworzyć wybraną opcję kierowania.

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

Nie można aktualizować kierowania w kampaniach YouTube i sieć partnerów wideo Google za pomocą interfejsu Display & Video 360 API, a próba zmiany tej opcji spowoduje błąd.

Kierowanie na YouTube i sieć partnerów wideo Google obejmuje kierowanie bezpośrednio przypisane do elementów zamówienia YouTube i sieć partnerów wideo Google oraz grupy reklam, a także z dowolnego innego typu kierowania:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

Błędy równoczesności

Próba zaktualizowania ustawień lub kierowania jednego elementu zamówienia w ramach wielu żądań równoczesnych zakończy się błędem.

Jeśli w jednym elemencie zamówienia chcesz dodać lub usunąć jednocześnie wiele przypisanych opcji kierowania, użyj prośby o zbiorczą edycję. Jeśli chcesz zaktualizować ustawienia i kierowanie elementu zamówienia, wysyłaj kolejno żądanie advertisers.lineItems.patch i odpowiednie żądanie kierowania, aby mieć pewność, że drugie żądanie nie zostanie wysłane, dopóki pierwsze z nich nie zwróci odpowiedzi.

Operacje zbiorcze i operacje kierowania na poziomie zasobów

Aby zarządzać przypisanymi opcjami kierowania w różnych typach kierowania, możesz używać metod kierowania zbiorczego i na poziomie całego zasobu:

Jeśli chcesz mieć pełny obraz bieżących ustawień kierowania elementu zamówienia, zastosować do niego wstępnie ustawioną konfigurację kierowania lub wprowadzić wiele zmian w kierowaniu elementu zamówienia jednocześnie, możesz skorzystać z tych metod kierowania.

Zbiorcze kierowanie na listy

advertisers.lineItems.bulkListAssignedTargetingOptions zapewnia wgląd we wszystkie ustawienia kierowania przypisane do co najmniej jednego elementu zamówienia o różnych typach kierowania. Działa ona podobnie do każdej innej metody list. Za pomocą parametru zapytania filter możesz filtrować wyniki według tych kryteriów: TargetingType lub Inheritance.

Oto przykład listy wszystkich opcji kierowania przypisanych do elementu zamówienia dziedziczonych przez partnera lub reklamodawcę nadrzędnego:

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.bulkEditAssignedTargetingOptions umożliwia dodawanie i usuwanie wielu opcji kierowania różnego typu w jednym lub wielu elementach zamówienia jednocześnie.

Metoda pobiera listę obiektów DeleteAssignedTargetingOptionsRequests i CreateAssignedTargetingOptionsRequests. Pojedynczy obiekt żądania może reprezentować usunięcie lub utworzenie 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 dotyczące tego elementu zostanie przerwane. Żądanie zwraca listę pomyślnie zaktualizowanych elementów zamówienia, a także listy elementów zamówienia, których nie udało się zaktualizować, oraz odpowiednich błędów.

Oto przykład zbiorczego edytowania przypisanych opcji kierowania co najmniej jednego elementu zamówienia z listą przypisanych opcji kierowania do usunięcia i opcji kierowania, które można utworzyć:

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