Les services Options de ciblage, Options de ciblage attribuées et Éléments de campagne permettent tous de définir le ciblage des éléments de campagne dans l'API Display & Video 360. Cette page décrit et fournit des exemples illustrant comment trouver les options de ciblage disponibles, les attribuer à des éléments de campagne et exécuter des opérations groupées sur ces éléments afin de lister et de modifier les options de ciblage attribuées.
Trouver les options de ciblage disponibles
Les options de ciblage utilisent des variables spécifiées par l'utilisateur, des entités pouvant être ciblées existantes ou des options préexistantes pour définir l'audience ciblée souhaitée. Les options préexistantes sont identifiées à l'aide de valeurs d'énumération ou d'ID d'options de ciblage, selon le type de ciblage. Les entités pouvant être ciblées sont identifiées à l'aide de leurs ID d'entité. Vous pouvez obtenir les ID d'option de ciblage et les ID d'entité à l'aide de l'API Display & Video 360.
Utiliser des valeurs d'énumération définies
Les options de ciblage des types de ciblage suivants sont attribuées à l'aide de types d'énumération spécifiques:
TargetingType |
Énumération |
---|---|
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 |
Une version de chaîne de la valeur d'énumération appropriée peut être utilisée pour identifier les ressources AssignedTargetingOption
existantes de ces types de ciblage. Elle est disponible dans le champ assignedTargetingOptionIdAlias
. Vous pouvez utiliser cette valeur d'alias à la place de assignedTargetingOptionId
lorsque vous récupérez ou supprimez des options de ciblage attribuées.
Récupérer les ID d'option de ciblage
Les types de ciblage qui utilisent des options préexistantes sont attribués à l'aide des ID d'option de ciblage correspondants.
Par exemple, il existe un nombre limité de positions à l'écran qui peuvent être ciblées à l'aide du type de ciblage TARGETING_TYPE_ON_SCREEN_POSITION
. Chacune de ces positions est associée à un ID d'option de ciblage.
Ces ID d'option de ciblage peuvent être récupérés via le service Options de ciblage. Selon le type de ciblage, la récupération s'effectue de l'une des deux manières suivantes:
- Récupération individuelle ou liste exhaustive: vous pouvez récupérer les options pour la majorité des types de ciblage à l'aide des méthodes
get
etlist
. UtiliseztargetingTypes.targetingOptions.get
pour récupérer les détails d'une option de ciblage identifiée par un type de ciblage et un ID d'option de ciblage. UtiliseztargetingTypes.targetingOptions.list
pour lister toutes les options de ciblage disponibles pour un type de ciblage donné. - Rechercher: les options pour un type de ciblage basé sur l'emplacement (
TARGETING_TYPE_GEO_REGION
,TARGETING_TYPE_POI
etTARGETING_TYPE_BUSINESS_CHAIN
) doivent être récupérées à l'aide de la méthodesearch
. UtiliseztargetingTypes.targetingOptions.search
pour récupérer les options de ciblage d'un type donné qui correspondent à des chaînes de requête données.
Voici un exemple de récupération de la liste des options de ciblage possibles pour le type de ciblage 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 );
Lister les entités pouvant être ciblées
Pour cibler un élément de campagne à l'aide d'une entité existante pouvant être ciblée, vous avez besoin de l'ID de cette entité. Les entités pouvant être ciblées, telles que les canaux, les audiences combinées et les groupes de sources d'inventaire, peuvent être récupérées via leurs propres services dans l'API Display & Video 360.
Chaque service possède ses propres méthodes get
et list
. Utilisez la méthode get
pour vérifier qu'une entité est disponible pour un annonceur donné. Utilisez la méthode list
pour découvrir toutes les entités de ce type de ressource qui sont disponibles pour un annonceur donné et, par conséquent, pouvant être utilisées pour attribuer un ciblage à un élément de campagne de cet annonceur.
Un sous-ensemble d'entités pouvant être ciblées peut également être géré via l'API. Pour ce faire, vous devez utiliser les méthodes create
et patch
du service correspondant, ainsi que des services pour les valeurs individuelles répertoriées dans les entités, tels que les sources d'inventaire, les mots clés à exclure et les zones géographiques.
Créer des ID d'option de ciblage des POI
Les options de ciblage par points d'intérêt nommés, sous TARGETING_TYPE_POI
, peuvent être récupérées à l'aide de targetingTypes.targetingOptions.search
. En outre, vous pouvez créer des ID d'option de ciblage TARGETING_TYPE_POI
personnalisés pour cibler des coordonnées de latitude-longitude spécifiques.
Pour créer un ID d'option de ciblage de POI, procédez comme suit:
- Récupérer des coordonnées de latitude-longitude (par exemple, "40.7414691, -74.003387")
- Arrondir les valeurs des coordonnées à la sixième décimale (par exemple, "40.741469, -74.003387")
- Supprimez les décimales des valeurs des coordonnées (par exemple, "40741469, -74003387").
- Concaténez les deux valeurs pour créer une seule chaîne, séparée par un point-virgule (par exemple, "40741469;-74003387")
La chaîne obtenue peut être utilisée en tant que targetingOptionId
lors de la création d'une option de ciblage attribuée à l'TARGETING_TYPE_POI
.
Lors de la création, les champs targetingOptionId
et assignedTargetingOptionId
de la ressource d'option de ciblage attribuée sont mis à jour, avec un point-virgule et un hachage alphanumérique.
Attribuer une option de ciblage
Le ciblage attribué à un élément de campagne est représenté par une option de ciblage attribuée. Vous pouvez gérer ces entités à l'aide du service Assigned Targeting Options (Options de ciblage attribuées). Lorsque vous créez une option de ciblage attribuée, ces informations sont appliquées à l'élément de campagne parent. Si vous supprimez une option de ciblage attribuée, le ciblage sera supprimé.
Utilisez advertisers.lineItems.targetingTypes.assignedTargetingOptions.create
pour créer des options de ciblage attribuées. Spécifiez les paramètres de ciblage dans le champ details
de la ressource d'options de ciblage attribuée qui correspond au type de ciblage souhaité.
Voici un exemple de création d'une option de ciblage attribuée de type de ciblage 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'] );
Erreurs
Erreurs de configuration du ciblage
Il existe un certain nombre de règles complexes concernant le ciblage dans Display & Video 360. Ces règles sont appliquées dans l'API Display & Video 360 via des erreurs renvoyées lors de la création d'une option de ciblage attribuée. L'erreur renvoyée par l'API spécifie le cas de non-respect.
Les erreurs sont principalement causées par un ciblage existant attribué à un élément de campagne. Utilisez advertisers.lineItems.targetingTypes.assignedTargetingOptions.list
pour récupérer toutes les options de ciblage d'un type de ciblage donné attribuées à un élément de campagne, déterminez si le ciblage souhaité est possible compte tenu des limites et utilisez advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete
pour supprimer tout ciblage indésirable avant de réessayer de créer l'option de ciblage attribuée.
Erreurs de ciblage YouTube et partenaires
Le ciblage spécifique aux campagnes YouTube et partenaires ne peut pas être modifié à l'aide de l'API Display & Video 360. Si vous tentez de le faire, une erreur se produira.
Le ciblage YouTube et partenaires comprend tous les ciblages directement attribués aux éléments de campagne et aux groupes d'annonces YouTube et partenaires, ainsi qu'aux types de ciblage suivants:
TARGETING_TYPE_SESSION_POSITION
TARGETING_TYPE_YOUTUBE_CHANNEL
TARGETING_TYPE_YOUTUBE_VIDEO
Erreurs de simultanéité
Toute tentative de mise à jour des paramètres ou du ciblage d'un seul élément de campagne via plusieurs requêtes simultanées entraînera une erreur.
Pour ajouter ou supprimer plusieurs options de ciblage attribuées à un même élément de campagne à la fois, envoyez une demande de modification groupée. Si vous souhaitez mettre à jour les paramètres et le ciblage d'un élément de campagne, effectuez la demande advertisers.lineItems.patch
et la demande de ciblage pertinente de manière consécutive pour vous assurer que la seconde demande n'est envoyée que lorsque la première renvoie une réponse.
Opérations de ciblage groupées et à l'échelle des ressources
Vous pouvez utiliser des méthodes de ciblage groupées et à l'échelle d'une ressource pour gérer les options de ciblage attribuées sur tous les types de ciblage:
- Utilisez les méthodes de ciblage groupées afin de récupérer ou de modifier les options de ciblage pour plusieurs types de ciblage et pour plusieurs ressources. Vous pouvez récupérer les configurations de ciblage complètes de plusieurs éléments de campagne à l'aide de
advertisers.lineItems.bulkListAssignedTargetingOptions
ou effectuer des mises à jour identiques du ciblage de plusieurs éléments de campagne à l'aide deadvertisers.lineItems.bulkEditAssignedTargetingOptions
. Celles-ci ne sont disponibles que dans le serviceadvertisers.lineItems
. - Utilisez les méthodes de ciblage au niveau de la ressource pour récupérer ou modifier les options de ciblage de plusieurs types de ciblage au sein d'une même ressource. Elles sont disponibles dans les services
partners
,advertisers
,advertisers.campaigns
etadvertisers.insertionOrders
, et sont nomméeslistAssignedTargetingOptions
oueditAssignedTargetingOptions
.
Envisagez d'utiliser ces méthodes de ciblage si vous souhaitez obtenir une vue complète du ciblage actuel d'un élément de campagne, appliquer une configuration de ciblage prédéfinie à un élément de campagne ou apporter plusieurs modifications simultanées au ciblage d'un élément de campagne.
Ciblage par liste de manière groupée
advertisers.lineItems.bulkListAssignedTargetingOptions
permet d'examiner l'ensemble du ciblage attribué à un ou plusieurs éléments de campagne pour différents types de ciblage. Elle fonctionne de la même manière que toute autre méthode list
. Vous pouvez utiliser le paramètre de requête filter
pour filtrer les résultats par TargetingType
ou Inheritance
.
Voici un exemple de liste de toutes les options de ciblage attribuées à un élément de campagne et héritées par le partenaire parent ou l'annonceur:
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);
Modifier le ciblage de manière groupée
advertisers.lineItems.bulkEditAssignedTargetingOptions
permet d'ajouter et de supprimer plusieurs options de ciblage de différents types dans un ou plusieurs éléments de campagne simultanément.
La méthode utilise une liste de DeleteAssignedTargetingOptionsRequests
et une liste de CreateAssignedTargetingOptionsRequests
. Un objet de requête unique peut représenter la suppression ou la création de plusieurs options de ciblage attribuées du même type de ciblage.
Si la tentative de suppression ou de création d'une option de ciblage attribuée provoque une erreur pour un élément de campagne, l'action groupée est abandonnée pour cet élément. La requête renvoie la liste des éléments de campagne mis à jour avec succès, ainsi que les éléments de campagne dont la mise à jour a échoué et les erreurs pertinentes.
Voici un exemple de modification groupée des options de ciblage attribuées pour un ou plusieurs éléments de campagne à l'aide de listes d'options de ciblage attribuées à supprimer et d'options de ciblage à créer:
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'); }