디맨드젠 광고 게재는 상위 파트너, 광고주, 광고 항목, 광고 그룹에 할당된 타겟팅을 사용하여 제어됩니다.
디맨드젠 캠페인 광고 항목 및 광고 그룹에 할당된 타겟팅을 사용하여 이상적인 고객에게 도달하고 캠페인 실적을 개선하세요.
타겟팅을 할당할 위치 결정
타겟팅은 디맨드젠 캠페인 광고 항목과 광고 그룹 모두에 할당할 수 있습니다.
타겟팅이 해당 광고 항목에 게재되는 모든 광고에 적용되도록 하려면 디맨드젠 캠페인 광고 항목에 타겟팅을 할당하세요. 그렇지 않으면 개별 광고 그룹에 타겟팅을 할당합니다.
디맨드젠 캠페인 리소스 유형별 타겟팅 지원
각 리소스 유형은 특정 유형의 타겟팅을 지원합니다.
다음은 디맨드젠 캠페인 광고 항목에서 지원하는 타겟팅 유형의 목록입니다.
TARGETING_TYPE_CARRIER_AND_ISPTARGETING_TYPE_DAY_AND_TIMETARGETING_TYPE_DEVICE_MAKE_MODELTARGETING_TYPE_DEVICE_TYPETARGETING_TYPE_GEO_REGIONTARGETING_TYPE_KEYWORDTARGETING_TYPE_LANGUAGETARGETING_TYPE_NEGATIVE_KEYWORD_LISTTARGETING_TYPE_OPERATING_SYSTEMTARGETING_TYPE_POI
다음은 디맨드젠 광고 그룹에서 지원하는 타겟팅 유형의 목록입니다.
TARGETING_TYPE_AGE_RANGETARGETING_TYPE_APPTARGETING_TYPE_APP_CATEGORYTARGETING_TYPE_AUDIENCE_GROUPTARGETING_TYPE_CATEGORYTARGETING_TYPE_GENDERTARGETING_TYPE_GEO_REGIONTARGETING_TYPE_HOUSEHOLD_INCOMETARGETING_TYPE_KEYWORDTARGETING_TYPE_LANGUAGETARGETING_TYPE_PARENTAL_STATUSTARGETING_TYPE_URLTARGETING_TYPE_YOUTUBE_CHANNELTARGETING_TYPE_YOUTUBE_VIDEO
TARGETING_TYPE_GEO_REGION, TARGETING_TYPE_POI, TARGETING_TYPE_LANGUAGE의 지원은 상위 LineItem 리소스의
demandGenSettings.geoLanguageTargetingEnabled 필드
설정에 따라 다릅니다. 필드가 true이면 위치 및 언어 타겟팅을 상위 광고 항목에만 할당할 수 있습니다. 필드가 false이면 이 타겟팅을 개별 광고 그룹에만 할당할 수 있습니다.
사용 가능한 타겟팅 옵션 찾기
타겟팅은 유형에 따라 식별됩니다. 다음 방법 중 하나를 사용하여 타겟팅 옵션을 식별합니다.
- 관련 enum 값을 사용합니다. 예를 들어 enum 유형
AgeRange또는Exchange와 함께 사용합니다. - 관련 서비스를 사용하여 채널 또는 위치 목록과 같은 타겟팅 가능한 항목을 검색합니다.
- 타겟팅 유형의 타겟팅 옵션 ID를
list및search메서드를 사용하여 검색합니다.
기존 타겟팅 검색
기존 타겟팅은 광고 항목 또는 광고 그룹에 추가할 수 있는 타겟팅을 제한합니다.
디맨드젠 캠페인 광고 항목 및 광고 그룹에는 상속된 TARGETING_TYPE_KEYWORD 타겟팅만 표시됩니다. 즉, 광고 게재에 영향을 미치는 모든 타겟팅을 완전히 파악하려면 광고주, 광고 항목, 광고 그룹의 타겟팅을 검색해야 합니다.
일괄 목록 요청을 사용하여 타겟팅 유형 전반에서 기존 타겟팅을 검색합니다.
기존 파트너 및 광고주 타겟팅 검색
상속된 파트너 타겟팅을 포함하여 광고주의 기존 타겟팅을 가져오는 방법은 다음과 같습니다.
자바
// Provide the ID of the advertiser. long advertiserId = advertiser-id; // Configure the list request. Advertisers.ListAssignedTargetingOptions request = service.advertisers().listAssignedTargetingOptions(advertiserId); // Create the response and nextPageToken variables. BulkListAdvertiserAssignedTargetingOptionsResponse response; String nextPageToken = null; do { // Create and execute the list request. response = request.setPageToken(nextPageToken).execute(); // Check if response is empty. if (response.isEmpty()) { System.out.printf( "No targeting is currently assigned to advertiser ID '%s'", advertiserId); break; } // Iterate over retrieved assigned targeting options. for (AssignedTargetingOption assignedTargetingOption : response.getAssignedTargetingOptions()) { System.out.printf( "Assigned Targeting Option %s found.%n", assignedTargetingOption.getName()); } // Update the next page token. nextPageToken = response.getNextPageToken(); } while (!Strings.isNullOrEmpty(nextPageToken));
Python
# Provide the ID of the advertiser. advertiser_id = advertiser-id # Create the page token variable. next_page_token = "" while True: # Execute the list request. response = ( service.advertisers() .listAssignedTargetingOptions( advertiserId=advertiser_id, pageToken=next_page_token, ) .execute() ) # If response is not empty, display the retrieved assigned targeting # options. if response: for assigned_targeting_option in response.get( "assignedTargetingOptions", [] ): ato_name = assigned_targeting_option.get( "name", None ) if ato_name: print(f"Assigned Targeting Option {ato_name}.") else: print(f"No targeting is currently assigned to {advertiser_id}.") sys.exit(1) # Update the next page token. # Break out of loop if there is no next page. if "nextPageToken" in response: next_page_token = response["nextPageToken"] else: break
PHP
// Provide the ID of the advertiser. $advertiserId = advertiser-id; $retrievedTargeting = array(); $response = null; $nextPageToken = null; do { $optParams = array( 'pageToken' => $nextPageToken ); // Call the API, getting all the assigned targeting options for the // identified advertiser. try { $response = $this ->service ->advertisers ->listAssignedTargetingOptions( $advertiserId, $optParams ); } catch (\Exception $e) { $this->renderError($e); return; } if (!empty($response->getAssignedTargetingOptions())) { $retrievedTargeting = array_merge( $retrievedTargeting, $response->getAssignedTargetingOptions() ); } // Update the next page token. $nextPageToken = $response->getNextPageToken(); } while ( !empty($response->getAssignedTargetingOptions()) && !empty($nextPageToken) ); // Print information returned by the bulk list request. if (!empty($retrievedTargeting)) { printf( "<p>The following targeting was retrieved for advertiser ID %s:</p><ul>", $advertiserId); foreach ($retrievedTargeting as $assignedTargetingOption) { printf( "<li>Assigned Targeting Option %s found.</li>", $assignedTargetingOption->getName()); } print("</ul>"); } else { printf( "<p>No targeting is currently assigned to advertiser ID %s.</p>", $advertiserId); }
기존 광고 항목 타겟팅 검색
광고 항목에 직접 할당된 기존 타겟팅을 가져오는 방법은 다음과 같습니다.
자바
// Provide the ID of the advertiser. long advertiserId = advertiser-id; // Provide the ID of the line item. long lineItemId = line-item-id; // Configure the list request. LineItems.BulkListAssignedTargetingOptions request = service .advertisers() .lineItems() .bulkListAssignedTargetingOptions(advertiserId) .setLineItemIds(Arrays.asList(lineItemId)); // Create the response and nextPageToken variables. BulkListAssignedTargetingOptionsResponse response; String nextPageToken = null; do { // Create and execute the list request. response = request.setPageToken(nextPageToken).execute(); // Check if response is empty. if (response.isEmpty()) { System.out.printf( "No targeting is currently assigned to '%s'", lineItemId); break; } // Iterate over retrieved assigned targeting options. for (LineItemAssignedTargetingOption liAssignedOption : response.getLineItemAssignedTargetingOptions()) { System.out.printf( "Assigned Targeting Option %s found.%n", liAssignedOption.getAssignedTargetingOption().getName()); } // Update the next page token. nextPageToken = response.getNextPageToken(); } while (!Strings.isNullOrEmpty(nextPageToken));
Python
# Provide the ID of the parent advertiser. advertiser_id = advertiser-id # Provide the ID of the line item. line_item_id = line-item-id # 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_id], pageToken=next_page_token, ) .execute() ) # If response is not empty, display the retrieved assigned targeting # options line items. if response: for assigned_option in response.get( "lineItemAssignedTargetingOptions", [] ): ato_name = assigned_option.get("assignedTargetingOption", {}).get( "name", None ) if ato_name: print(f"Assigned Targeting Option {ato_name} found.") else: print(f"No targeting is currently assigned to {line_item_id}.") sys.exit(1) # Update the next page token. # Break out of loop if there is no next page. if "nextPageToken" in response: next_page_token = response["nextPageToken"] else: break
PHP
// Provide the ID of the advertiser. $advertiserId = advertiser-id; // Provide the ID of the line item. $lineItemId = line-item-id; $retrievedLineItemTargeting = array(); $response = null; $nextPageToken = null; do { $optParams = array( 'lineItemIds' => array($lineItemId), 'filter' => $filter, 'pageToken' => $nextPageToken ); // Call the API, getting all the assigned targeting options for the // identified line item. try { $response = $this ->service ->advertisers_lineItems ->bulkListAssignedTargetingOptions( $advertiserId, $optParams ); } catch (\Exception $e) { $this->renderError($e); return; } if (!empty($response->getLineItemAssignedTargetingOptions())) { $retrievedLineItemTargeting = array_merge( $retrievedLineItemTargeting, $response->getLineItemAssignedTargetingOptions() ); } // Update the next page token. $nextPageToken = $response->getNextPageToken(); } while ( !empty($response->getLineItemAssignedTargetingOptions()) && !empty($nextPageToken) ); // Print information returned by the bulk list request. if (!empty($retrievedLineItemTargeting)) { printf( "<p>The following targeting was retrieved for line item ID %s:</p><ul>", $lineItemId); foreach ($retrievedLineItemTargeting as $assignedTargetingOption) { printf( "<li>Assigned Targeting Option %s found.</li>", $assignedTargetingOption->getAssignedTargetingOption()->getName()); } print("</ul>"); } else { printf( "<p>No targeting is currently assigned to line item ID %s.</p>", $lineItemId); }
기존 광고 그룹 타겟팅 검색
광고 그룹에 직접 할당된 기존 타겟팅을 가져오는 방법은 다음과 같습니다.
자바
// Provide the ID of the parent advertiser. long advertiserId = advertiser-id; // Provide the ID of the ad group. long adGroupId = ad-group-id; // Configure the list request. AdGroups.BulkListAssignedTargetingOptions request = service .advertisers() .adGroups() .bulkListAssignedTargetingOptions(advertiserId) .setAdGroupIds(Arrays.asList(adGroupId)); // Create the response and nextPageToken variables. BulkListAdGroupAssignedTargetingOptionsResponse response; String nextPageToken = null; do { // Create and execute the list request. response = request.setPageToken(nextPageToken).execute(); // Check if response is empty. if (response.isEmpty()) { System.out.printf( "No targeting is currently assigned to '%s'", adGroupId); break; } // Iterate over retrieved assigned targeting options. for (AdGroupAssignedTargetingOption adGroupAssignedOption : response.getAdGroupAssignedTargetingOptions()) { System.out.printf( "Assigned Targeting Option %s found.%n", adGroupAssignedOption.getAssignedTargetingOption().getName()); } // Update the next page token. nextPageToken = response.getNextPageToken(); } while (!Strings.isNullOrEmpty(nextPageToken));
Python
# Provide the ID of the parent advertiser. advertiser_id = advertiser-id # Provide the ID of the ad group. ad_group_id = ad-group-id # Create the page token variable. next_page_token = "" while True: # Execute the list request. response = ( service.advertisers() .adGroups() .bulkListAssignedTargetingOptions( advertiserId=advertiser_id, adGroupIds=[ad_group_id], pageToken=next_page_token, ) .execute() ) # If response is not empty, display the retrieved assigned targeting # options line items. if response: for assigned_option in response.get( "adGroupAssignedTargetingOptions", [] ): ato_name = assigned_option.get("assignedTargetingOption", {}).get( "name", None ) if ato_name: print(f"Assigned Targeting Option {ato_name} found.") else: print(f"No targeting is currently assigned to {ad_group_id}.") sys.exit(1) # Update the next page token. # Break out of loop if there is no next page. if "nextPageToken" in response: next_page_token = response["nextPageToken"] else: break
PHP
// Provide the ID of the parent advertiser. $advertiserId = advertiser-id; // Provide the ID of the ad group. $adGroupId = line-item-id; $retrievedAdGroupTargeting = array(); $response = null; $nextPageToken = null; do { $optParams = array( 'adGroupIds' => array($adGroupId), 'pageToken' => $nextPageToken ); // Call the API, getting all the assigned targeting options for the // identified ad group. try { $response = $this ->service ->advertisers_adGroups ->bulkListAssignedTargetingOptions( $advertiserId, $optParams ); } catch (\Exception $e) { $this->renderError($e); return; } if (!empty($response->getAdGroupAssignedTargetingOptions())) { $retrievedAdGroupTargeting = array_merge( $retrievedAdGroupTargeting, $response->getAdGroupAssignedTargetingOptions() ); } // Update the next page token. $nextPageToken = $response->getNextPageToken(); } while ( !empty($response->getAdGroupAssignedTargetingOptions()) && !empty($nextPageToken) ); // Print information returned by the bulk list request. if (!empty($retrievedAdGroupTargeting)) { printf( "<p>The following targeting was retrieved for ad group ID %s:</p><ul>", $adGroupId); foreach ($retrievedAdGroupTargeting as $assignedTargetingOption) { printf( "<li>Assigned Targeting Option %s found.</li>", $assignedTargetingOption->getAssignedTargetingOption()->getName()); } print(""); } else { printf( "<p>No targeting is currently assigned to ad group ID %s.</p>", $adGroupId); }
리소스에 타겟팅 할당
광고 항목 및 광고 그룹 타겟팅을 업데이트하려면 별도의 요청을 해야 합니다.
광고 항목 타겟팅 할당
광고 항목에 다음 타겟팅 로직을 추가하는 방법은 다음과 같습니다.
- 컴퓨터에만 광고를 게재합니다.
'아이스크림' 키워드와 일치하는 콘텐츠와 함께 게재되는 인벤토리에 입찰하지 않습니다.
자바
// Provide the ID of the parent advertiser. long advertiserId = advertiser-id; // Provide the ID of the line item. long lineItemId = line-item-id; // Build list of targeting delete requests. List<DeleteAssignedTargetingOptionsRequest> deleteRequests = new ArrayList<>(); // Build delete targeting request for device types to remove from targeting // in order to only target computer devices. List<String> deviceTypesToDelete = Arrays.asList( "DEVICE_TYPE_CONNECTED_TV", "DEVICE_TYPE_SMART_PHONE", "DEVICE_TYPE_TABLET"); DeleteAssignedTargetingOptionsRequest deleteDeviceTypeRequest = new DeleteAssignedTargetingOptionsRequest() .setTargetingType("TARGETING_TYPE_DEVICE_TYPE") .setAssignedTargetingOptionIds(deviceTypesToDelete); deleteRequests.add(deleteDeviceTypeRequest); // Build list of targeting create requests. List<CreateAssignedTargetingOptionsRequest> createRequests = new ArrayList<>(); // Build the "ice cream" negative keyword assigned targeting option. AssignedTargetingOption keywordAssignedTargetingOption = new AssignedTargetingOption() .setKeywordDetails( new KeywordAssignedTargetingOptionDetails() .setKeyword("ice cream") .setNegative(true)); createRequests.add( new CreateAssignedTargetingOptionsRequest() .setTargetingType("TARGETING_TYPE_KEYWORD") .setAssignedTargetingOptions( Arrays.asList(keywordAssignedTargetingOption))); // Build the bulk edit targeting request. BulkEditAssignedTargetingOptionsRequest bulkEditTargetingRequest = new BulkEditAssignedTargetingOptionsRequest() .setLineItemIds(Arrays.asList(lineItemId)) .setCreateRequests(createRequests) .setDeleteRequests(deleteRequests); // Execute the bulk edit targeting request. BulkEditAssignedTargetingOptionsResponse response = service .advertisers() .adGroups() .bulkEditAssignedTargetingOptions( advertiserId, bulkEditTargetingRequest ) .execute(); // Display API response information. if (response.getUpdatedLineItemIds() != null && !response.getUpdatedLineItemIds().isEmpty()) { System.out.printf( "Targeting configurations for %s were successfully updated.%n", response.getUpdatedLineItemIds().get(0)); } if (response.getFailedLineItemIds() != null && !response.getFailedLineItemIds().isEmpty()) { System.out.printf( "Targeting configurations for %s failed to update.%n", response.getFailedLineItemIds().get(0)); } if (response.getErrors() != null && !response.getErrors().isEmpty()) { System.out.println("The failed updates were caused by the following errors:"); for (Status error : response.getErrors()) { System.out.printf("Code %s: %s%n", error.getCode(), error.getMessage()); } } else { System.out.println("No successful or failed updates were reported."); }
Python
# Provide the ID of the parent advertiser. advertiser_id = advertiser-id # Provide the ID of the line item. line_item_id = line-item-id # Build the "ice cream" negative keyword assigned targeting option. keyword_assigned_targeting_option = { "keywordDetails": {"keyword": "ice cream", "negative": True} } # Build the delete request for device type targeting to remove all device # types to only target computers. device_type_delete_request = { "targetingType": "TARGETING_TYPE_DEVICE_TYPE", "assignedTargetingOptionIds": [ "DEVICE_TYPE_SMART_PHONE", "DEVICE_TYPE_CONNECTED_TV", "DEVICE_TYPE_TABLET" ], } # Create a bulk edit request. bulk_edit_targeting_request = { "lineItemIds": [line_item_id], "createRequests": [ { "targetingType": "TARGETING_TYPE_KEYWORD", "assignedTargetingOptions": [ keyword_assigned_targeting_option ], } ], "deleteRequests": [ device_type_delete_request ] } # Build and execute request. response = ( service.advertisers() .lineItems() .bulkEditAssignedTargetingOptions( advertiserId=advertiser_id, body=bulk_edit_targeting_request ) .execute() ) # Print the request results. if ( "updatedLineItemIds" in response and len(response["updatedLineItemIds"]) != 0 ): print( f'Targeting configurations for {response["updatedLineItemIds"][0]} ' "were successfully updated." ) elif ( "failedLineItemIds" in response and len(response["failedLineItemIds"]) != 0 ): print( f'Targeting configurations for {response["failedLineItemIds"][0]} ' "failed to update." ) if "errors" in response and len(response["errors"]) != 0: print("The failed updates were caused by the following errors:") for error in response["errors"]: print(f'Code {error["code"]}: {error["message"]}') else: print("No successful or failed updates were reported.")
PHP
// Provide the ID of the parent advertiser. $advertiserId = advertiser-id; // Provide the ID of the line item. $lineItemId = line-item-id; $deleteRequests = array(); // Build request to delete all other existing device type targeting // options to only target computer devices. $deleteDeviceTypeAssignedTargetingOption = new Google_Service_DisplayVideo_DeleteAssignedTargetingOptionsRequest(); $deleteDeviceTypeAssignedTargetingOption->setTargetingType( 'TARGETING_TYPE_DEVICE_TYPE' ); $deleteDeviceTypeAssignedTargetingOption->setAssignedTargetingOptionIds( array( 'DEVICE_TYPE_CONNECTED_TV', 'DEVICE_TYPE_SMART_PHONE', 'DEVICE_TYPE_TABLET' ) ); $deleteRequests[] = $deleteDeviceTypeAssignedTargetingOption; $createRequests = array(); // Build the "ice cream" negative keyword assigned targeting option. $keywordDetails = new Google_Service_DisplayVideo_KeywordAssignedTargetingOptionDetails(); $keywordDetails->setKeyword('ice cream'); $keywordDetails->setNegative(true); $keywordAssignedTargetingOption = new Google_Service_DisplayVideo_AssignedTargetingOption(); $keywordAssignedTargetingOption->setKeywordDetails($keywordDetails); $createKeywordAssignedTargetingOption = new Google_Service_DisplayVideo_CreateAssignedTargetingOptionsRequest(); $createKeywordAssignedTargetingOption->setTargetingType( 'TARGETING_TYPE_KEYWORD' ); $createKeywordAssignedTargetingOption->setAssignedTargetingOptions( array($keywordAssignedTargetingOption) ); $createRequests[] = $createKeywordAssignedTargetingOption; $body = new Google_Service_DisplayVideo_BulkEditAssignedTargetingOptionsRequest(); $body->setLineItemIds(array($lineItemId)); $body->setCreateRequests($createRequests); $body->setDeleteRequests($deleteRequests); // Call the API, editing the assigned targeting options for the // identified line item. try { $response = $this ->service ->advertisers_lineItems ->bulkEditAssignedTargetingOptions( $advertiserId, $body ); } catch (\Exception $e) { $this->renderError($e); return; } // Print information returned by the bulk edit request. // List updated line item IDs. if (empty($response->getUpdatedLineItemIds())) { print '<p>No line items were successfully updated.</p>'; } else { print '<p>The targeting of the following line item IDs were ' . 'updated:</p><ul>'; foreach ($response->getUpdatedLineItemIds() as $id) { printf('<li>%s</li>',$id); } print '</ul>'; } // List line item IDs that failed to update. if (empty($response->getFailedLineItemIds())) { print '<p>No line items failed to update.</p>'; } else { print 'The targeting of the following line item IDs failed to '
. 'update:</p><ul>'; foreach ($response->getFailedLineItemIds() as $id) { printf('<li>%s</li>',$id); } print '</ul>'; } // List the errors thrown when the targeting was updated. if (empty($response->getErrors())) { print '<p>No errors were thrown.</p>'; } else { print '<p>The following errors were thrown when attempting to ' . 'update the targeting:</p><ul>'; foreach ($response->getErrors() as $error) { printf( '<li>%s: %s</li>', $error->getCode(), $error->getMessage() ); } print '</ul>'; }
광고 그룹 타겟팅 할당
광고 그룹에 다음 타겟팅 로직을 추가하는 방법은 다음과 같습니다.
- 부모에게만 게재합니다.
제공된 YouTube 채널에 대해 게재하지 않습니다.
자바
// Provide the ID of the parent advertiser. long advertiserId = advertiser-id; // Provide the ID of the ad group. long adGroupId = ad-group-id; // Provide the YouTube channel ID to negatively target. String youtubeChannelId = youtube-channel-id; // Build list of targeting create requests. List<CreateAssignedTargetingOptionsRequest> createRequests = new ArrayList<>(); // Build YouTube channel assigned targeting option. AssignedTargetingOption youtubeChannelAssignedTargetingOption = new AssignedTargetingOption() .setYoutubeChannelDetails( new YoutubeChannelAssignedTargetingOptionDetails() .setChannelId(youtubeChannelId) .setNegative(true)); createRequests.add( new CreateAssignedTargetingOptionsRequest() .setTargetingType("TARGETING_TYPE_YOUTUBE_CHANNEL") .setAssignedTargetingOptions( Arrays.asList(youtubeChannelAssignedTargetingOption))); // Build parental status assigned targeting option. AssignedTargetingOption parentalStatusAssignedTargetingOption = new AssignedTargetingOption() .setParentalStatusDetails( new ParentalStatusAssignedTargetingOptionDetails() .setParentalStatus("PARENTAL_STATUS_PARENT")); createRequests.add( new CreateAssignedTargetingOptionsRequest() .setTargetingType("TARGETING_TYPE_PARENTAL_STATUS") .setAssignedTargetingOptions( Arrays.asList(parentalStatusAssignedTargetingOption))); // Create a bulk edit request. BulkEditAdGroupAssignedTargetingOptionsRequest bulkEditTargetingRequest = new BulkEditAdGroupAssignedTargetingOptionsRequest() .setAdGroupIds(Arrays.asList(adGroupId)) .setCreateRequests(createRequests); // Configure the list request. BulkEditAdGroupAssignedTargetingOptionsResponse response = service .advertisers() .adGroups() .bulkEditAssignedTargetingOptions( advertiserId, bulkEditTargetingRequest ) .execute(); // Display API response information. if (response.getUpdatedAdGroupIds() != null && !response.getUpdatedAdGroupIds().isEmpty()) { System.out.printf( "Targeting configurations for %s were successfully updated.%n", response.getUpdatedAdGroupIds().get(0)); } if (response.getFailedAdGroupIds() != null && !response.getFailedAdGroupIds().isEmpty()) { System.out.printf( "Targeting configurations for %s failed to update.%n", response.getFailedAdGroupIds().get(0)); } if (response.getErrors() != null && !response.getErrors().isEmpty()) { System.out.println("The failed updates were caused by the following errors:"); for (Status error : response.getErrors()) { System.out.printf("Code %s: %s%n", error.getCode(), error.getMessage()); } } else { System.out.println("No successful or failed updates were reported."); }
Python
# Provide the ID of the parent advertiser. advertiser_id = advertiser-id # Provide the ID of the ad group. ad_group_id = ad-group-id # Provide the YouTube channel ID to negatively target. yt_channel_id = youtube-channel-id # Build the assigned targeting option to negatively target the given YouTube # channel. youtube_channel_assigned_targeting_options = [ { "youtubeChannelDetails": { "channelId": yt_channel_id, "negative": True } }, ] # Build the assigned targeting options to target only parents. parental_status_assigned_targeting_options = [ { "parentalStatusDetails": { "parentalStatus": "PARENTAL_STATUS_PARENT" } }, ] # Create a bulk edit request. bulk_edit_targeting_request = { "adGroupIds": [ad_group_id], "createRequests": [ { "targetingType": "TARGETING_TYPE_YOUTUBE_CHANNEL", "assignedTargetingOptions": ( youtube_channel_assigned_targeting_options ) }, { "targetingType": "TARGETING_TYPE_PARENTAL_STATUS", "assignedTargetingOptions": ( parental_status_assigned_targeting_options ), } ] } # Build and execute request. response = ( service.advertisers() .adGroups() .bulkEditAssignedTargetingOptions( advertiserId=advertiser_id, body=bulk_edit_targeting_request ) .execute() ) # Print the request results. if ( "updatedAdGroupIds" in response and len(response["updatedAdGroupIds"]) != 0 ): print( f'Targeting configurations for {response["updatedAdGroupIds"][0]} ' "were successfully updated." ) elif ( "failedAdGroupIds" in response and len(response["failedAdGroupIds"]) != 0 ): print( f'Targeting configurations for {response["failedAdGroupIds"][0]} ' "failed to update." ) if "errors" in response and len(response["errors"]) != 0: print("The failed updates were caused by the following errors:") for error in response["errors"]: print(f'Code {error["code"]}: {error["message"]}') else: print("No successful or failed updates were reported.")
PHP
// Provide the ID of the parent advertiser. $advertiserId = advertiser-id; // Provide the ID of the ad group. $adGroupId = ad-group-id; // Provide the YouTube channel ID to negatively target. $youtubeChannelId = youtube-channel-id; $createRequests = array(); // Build YouTube channel assigned targeting option and add to create // requests. $youtubeChannelDetails = new Google_Service_DisplayVideo_YoutubeChannelAssignedTargetingOptionDetails(); $youtubeChannelDetails->setChannelId($youtubeChannelId); $youtubeChannelDetails->setNegative(true); $youtubeChannelAssignedTargetingOption = new Google_Service_DisplayVideo_AssignedTargetingOption(); $youtubeChannelAssignedTargetingOption->setYoutubeChannelDetails( $youtubeChannelDetails ); $createYoutubeChannelAssignedTargetingOption = new Google_Service_DisplayVideo_CreateAssignedTargetingOptionsRequest(); $createYoutubeChannelAssignedTargetingOption->setTargetingType( 'TARGETING_TYPE_YOUTUBE_CHANNEL' ); $createYoutubeChannelAssignedTargetingOption ->setAssignedTargetingOptions( array($youtubeChannelAssignedTargetingOption) ); $createRequests[] = $createYoutubeChannelAssignedTargetingOption; // Build parental status assigned targeting option and add to create // requests. $parentalStatusDetails = new Google_Service_DisplayVideo_ParentalStatusAssignedTargetingOptionDetails(); $parentalStatusDetails->setParentalStatus('PARENTAL_STATUS_PARENT'); $parentalStatusAssignedTargetingOption = new Google_Service_DisplayVideo_AssignedTargetingOption(); $parentalStatusAssignedTargetingOption->setParentalStatusDetails( $parentalStatusDetails ); $createParentalStatusAssignedTargetingOption = new Google_Service_DisplayVideo_CreateAssignedTargetingOptionsRequest(); $createParentalStatusAssignedTargetingOption->setTargetingType( 'TARGETING_TYPE_PARENTAL_STATUS' ); $createParentalStatusAssignedTargetingOption ->setAssignedTargetingOptions( array($parentalStatusAssignedTargetingOption) ); $createRequests[] = $createParentalStatusAssignedTargetingOption; $body = new Google_Service_DisplayVideo_BulkEditAdGroupAssignedTargetingOptionsRequest(); $body->setAdGroupIds(array($adGroupId)); $body->setCreateRequests($createRequests); // Call the API, editing the assigned targeting options for the // identified ad group. try { $response = $this ->service ->advertisers_adGroups ->bulkEditAssignedTargetingOptions( $advertiserId, $body ); } catch (\Exception $e) { $this->renderError($e); return; } // Print information returned by the bulk edit request. // List updated ad group IDs. if (empty($response->getUpdatedAdGroupIds())) { print '<p>No ad groups were successfully updated.</p>'; } else { print '<p>The targeting of the following ad group IDs were ' . 'updated:</p><ul>'; foreach ($response->getUpdatedAdGroupIds() as $id) { printf('<li>%s</li>',$id); } print '</ul>'; } // List ad group IDs that failed to update. if (empty($response->getFailedAdGroupIds())) { print '<p>No ad groups failed to update.</p>'; } else { print '<p>The targeting of the following ad group IDs failed to ' . 'update:</p><ul>'; foreach ($response->getFailedAdGroupIds() as $id) { printf('<li>%s</li>',$id); } print '</ul>'; } // List the errors thrown when the targeting was updated. if (empty($response->getErrors())) { print '<p>No errors were thrown.</p>'; } else { print '<p>The following errors were thrown when attempting to ' . 'update the targeting:</p><ul>'; foreach ($response->getErrors() as $error) { printf( '<li>%s: %s</li>', $error->getCode(), $error->getMessage() ); } print '</ul>'; }