تعيين الاستهداف

تُستخدَم خدمات خيارات الاستهداف و خيارات الاستهداف المحدّدة و العناصر معًا لضبط استهداف العناصر في واجهة برمجة التطبيقات في "مساحة العرض والفيديو 360". توضّح هذه الصفحة أمثلة على كيفية العثور على خيارات الاستهداف المتاحة وتخصيص خيارات الاستهداف للعناصر، وتنفيذ عمليات مجمّعة على العناصر لعرض خيارات الاستهداف المخصّصة وتعديلها.

العثور على خيارات الاستهداف المتاحة

تستخدِم خيارات الاستهداف إمّا متغيّرات يحدّدها المستخدِم أو كائنات قابلة للاستهداف حالية أو خيارات حالية لتحديد الجمهور المستهدَف المطلوب. يتم تحديد الخيارات الحالية باستخدام قيم التعداد أو معرّفات خيارات الاستهداف، وذلك استنادًا إلى نوع الاستهداف. يتم تحديد الكيانات التي يمكن استهدافها باستخدام معرّفات الكيانات. يمكن العثور على أرقام تعريف خيارات الاستهداف وأرقام تعريف الكيانات باستخدام واجهة برمجة التطبيقات Display & Video 360 API.

استخدام قيم التعداد المحدّدة

يتمّ تحديد خيارات الاستهداف لأنواع الاستهداف التالية باستخدام أنواع محدّدة من النماذج المحدّدة:

TargetingType تعداد
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

يمكن استخدام نسخة سلسلة من قيمة القائمة المحدّدة ذات الصلة لتحديد موارد AssignedTargetingOption الحالية لأنواع الاستهداف هذه، وهي متوفرة في حقل assignedTargetingOptionIdAlias. يمكنك استخدام قيمة الاسم المعرِّف هذا بدلاً من assignedTargetingOptionId عند استرداد خيارات الاستهداف المحدّدة أو حذفها.

استرداد أرقام تعريف خيارات الاستهداف

يتمّ تحديد أنواع الاستهداف التي تستخدِم خيارات حالية باستخدام معرّفات خيارات الاستهداف المقابلة.

على سبيل المثال، هناك عدد محدود من المواضع على الشاشة التي يمكن استهدافها باستخدام نوع الاستهداف TARGETING_TYPE_ON_SCREEN_POSITION. ولكلّ من هذه المواضع معرّف خيار استهداف مناظر.

يمكن استرداد أرقام تعريف خيارات الاستهداف هذه من خلال خدمة خيارات الاستهداف. استنادًا إلى نوع الاستهداف، يتم الاسترجاع بطريقتَين:

  • الاسترداد الفردي أو القائمة الشاملة: يمكن استرداد خيارات معظم أنواع الاستهداف باستخدام الطريقتَين get وlist. استخدِم targetingTypes.targetingOptions.get لاسترداد تفاصيل خيار استهداف محدّد بنوع استهداف ورقم تعريف خيار استهداف. استخدِم رمز targetingTypes.targetingOptions.list لعرض كل خيارات ال targeting المتاحة لنوع استهداف معيّن.
  • البحث: يجب استرداد خيارات أنواع الاستهداف المستندة إلى الموقع الجغرافي (TARGETING_TYPE_GEO_REGION وTARGETING_TYPE_POI و TARGETING_TYPE_BUSINESS_CHAIN) باستخدام الطريقة search. استخدِم targetingTypes.targetingOptions.search لاسترداد خيارات استهداف من نوع معيّن تتطابق مع سلاسل طلبات البحث المحدّدة.

في ما يلي مثال على كيفية استرداد قائمة بأحد خيارات الاستهداف المحتمَلة لنوع الاستهداف 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
);

إدراج الكيانات القابلة للاستهداف

لاستهداف عنصر سطر باستخدام كيان قابل للاستهداف حالي، تحتاج إلى معرفة معرّف هذا الكيان. يمكن استرداد الكيانات التي يمكن استهدافها، مثل القنوات، شرائح الجمهور المجمّعة، مجموعات مصادر المستودع، من خلال خدماتها الخاصة في واجهة برمجة التطبيقات Display & Video 360 API.

ولكل خدمة طريقتَا get وlist. استخدِم طريقة get لتأكيد توفّر كيان ضمن معلِن معيّن. استخدِم list الطريقة لاكتشاف جميع كيانات نوع المورد هذا المتوفّرة لصنّاع إعلان معيّنين، وبالتالي يمكن استخدامها في تحديد الاستهداف لأحد العناصر ضمن هذا المعلِن.

يمكن أيضًا إدارة مجموعة فرعية من الكيانات التي يمكن استهدافها من خلال واجهة برمجة التطبيقات. ويتم ذلك من خلال الطريقتَين create وpatch في الخدمة المقابلة، بالإضافة إلى خدمات القيم الفردية المدرَجة في الكيانات، مثل مصادر المستودع و الكلمات الرئيسية السلبية و المواقع الجغرافية.

إنشاء أرقام تعريف خيارات استهداف نقاط الاهتمام

يمكن retrieving options targeting points of interest named، ضمن TARGETING_TYPE_POI باستخدام targetingTypes.targetingOptions.search. بالإضافة إلى ذلك، يمكنك إنشاء أرقام تعريف مخصّصة لخيار استهداف TARGETING_TYPE_POI بهدف targetingإحصاءات إحداثيات خطوط العرض والطول المحدّدة.

اتّبِع الخطوات التالية لإنشاء معرّف خيار استهداف نقاط الاهتمام:

  1. استرداد إحداثيات خط العرض وخط الطول (مثل "40.7414691, -74.003387")
  2. تقريب قيم الإحداثيات إلى أقرب منزلة عشرية سادسة (مثل "40.741469، -74.003387")
  3. أزِل الكسور العشرية من قيم التنسيق (مثل "40741469، -74003387").
  4. اربط القيمتَين لإنشاء سلسلة واحدة مفصولة بفاصلة منقوطة (مثلاً: "40741469;-74003387").

يمكن استخدام السلسلة الناتجة كtargetingOptionId عند إنشاء خيار استهداف مخصّص TARGETING_TYPE_POI.

عند الإنشاء، سيتم تعديل الحقلين targetingOptionId وassignedTargetingOptionId في مورد خيار الاستهداف المحدّد، مع إلحاق فاصلة منقوطة ورمز تجزئة أبجدي رقمي.

تحديد خيار استهداف

يتم تمثيل الاستهداف الذي تمّ تعيينه لعنصر في شكل خيار استهداف تمّ تعيينه. يمكنك إدارة هذه الكيانات باستخدام خدمة "خيارات الاستهداف المحدّدة". يؤدي إنشاء خيار استهداف مخصّص إلى تطبيق تفاصيل الاستهداف هذه على العنصر الرئيسي. يؤدي حذف خيار استهداف حالي إلى إزالة هذا الاستهداف.

استخدِم advertisers.lineItems.targetingTypes.assignedTargetingOptions.create لإنشاء خيارات استهداف مخصّصة. حدِّد مَعلمات الاستهداف في حقل details لمورد خيار الاستهداف المحدّد الذي يتوافق مع نوع الاستهداف المقصود.

في ما يلي مثال على كيفية إنشاء خيار استهداف مخصّص من نوع الاستهداف 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']
);

الأخطاء

أخطاء في إعدادات الاستهداف

هناك عدد من القواعد المعقدة المتعلّقة بالاستهداف في "مساحة العرض والفيديو 360". ويتم فرض هذه القيود في واجهة برمجة التطبيقات في "مساحة العرض والفيديو 360" من خلال الأخطاء التي يتم عرضها عند إنشاء خيار الاستهداف المحدّد. ستحدّد رسالة الخطأ التي تعرضها واجهة برمجة التطبيقات الانتهاك.

تحدث الأخطاء في الغالب بسبب الاستهداف الحالي الذي تمّ تعيينه لعنصر في الصفحة. استخدِم رمز السهم المتّجه للأعلى advertisers.lineItems.targetingTypes.assignedTargetingOptions.list لاسترداد جميع خيارات الاستهداف لنوع استهداف معيّن تمّ تعيينه لعنصر الخط، وتقييم ما إذا كان الاستهداف المطلوب ممكنًا في ظلّ القيود، واستخدِم رمز السهم المتّجه للأسفل advertisers.lineItems.targetingTypes.assignedTargetingOptions.delete لإزالة أي استهداف غير مرغوب فيه قبل محاولة إنشاء خيار الاستهداف المطلوب الذي تمّ تعيينه مرة أخرى.

أخطاء استهداف YouTube والشركاء

لا يمكن تعديل الاستهداف المخصّص لـ "حملات YouTube والشركاء" باستخدام Display & Video 360 API، وستؤدي محاولة إجراء ذلك إلى ظهور خطأ.

يتألّف استهداف YouTube والشركاء من جميع الاستهدافات التي تمّ تعيينها مباشرةً لعناصر YouTube والشركاء والمجموعات الإعلانية، بالإضافة إلى أيّ استهداف لأنواع الاستهداف التالية:

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

أخطاء التوافق

سيؤدي محاولة تعديل إعدادات أو استهداف عنصر واحد من خلال طلبات متعدّدة متزامنة إلى حدوث خطأ.

إذا كنت بحاجة إلى إضافة أو إزالة خيارات استهداف مُحدّدة متعددة لجدول ميزانية واحد في الوقت نفسه، عليك استخدام طلب تعديل مجمّع. إذا كنت تريد تعديل إعدادات ومقاصد advertisers.lineItems.patch العنصر، عليك إرسال طلب advertisers.lineItems.patch وطلب الاستهداف ذي الصلة بشكلٍ متتالي لضمان عدم إرسال طلب advertisers.lineItems.patch الثاني إلى أن يعرض الطلب الأول استجابةً.

عمليات الاستهداف المجمّعة وعلى مستوى الموارد

يمكنك استخدام طرق الاستهداف بشكل مجمّع وعلى مستوى المورد لإدارة خيارات الاستهداف المحدّدة على مستوى أنواع الاستهداف:

  • استخدِم طرق الاستهداف المجمّعة لاسترداد خيارات الاستهداف أو تعديلها على مستوى أنواع استهداف متعدّدة وضمن موارد متعدّدة. يمكنك استرداد إعدادات الاستهداف الكاملة لتفاصيل إعلانات متعددة باستخدام advertisers.lineItems.bulkListAssignedTargetingOptions أو إجراء تعديلات متطابقة على الاستهداف على مستوى تفاصيل إعلانات متعددة باستخدام advertisers.lineItems.bulkEditAssignedTargetingOptions. لا تتوفّر هذه الميزة إلا في خدمة advertisers.lineItems.
  • استخدِم طرق الاستهداف على مستوى المورد لاسترداد خيارات الاستهداف أو تعديلها على مستوى أنواع استهداف متعددة ضمن مورد واحد. تتوفّر هذه الميزة في خدمات partners وadvertisers ويُطلق عليها اسم listAssignedTargetingOptions أو editAssignedTargetingOptions.

إذا كنت تريد عرضًا كاملاً للاستهداف الحالي لعنصر، أو كنت تريد تطبيق إعدادات استهداف مُعدّة مسبقًا على عنصر، أو كنت بحاجة إلى إجراء تغييرات متعدّدة على استهداف عنصر في الوقت نفسه، ننصحك باستخدام طرق الاستهداف التالية.

استهداف بطاقات البيانات بشكلٍ مجمّع

advertisers.lineItems.bulkListAssignedTargetingOptions يوفّر طريقة للاطّلاع على جميع الاستهدافات التي تمّ تعيينها لعنصر واحد أو أكثر على مستوى أنواع الاستهداف المختلفة. وتعمل هذه الطريقة بشكل مشابه لأي طريقة أخرى من list طُرق. يمكنك استخدام مَعلمة طلب البحث filter لفلترة النتائج حسب TargetingType أو Inheritance.

في ما يلي مثال على كيفية إدراج جميع خيارات الاستهداف المحدّدة لبند إعلاني يتم اكتسابها من الشريك الرئيسي أو المعلِن:

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

تعديل الاستهداف بشكلٍ مجمّع

advertisers.lineItems.bulkEditAssignedTargetingOptions توفّر طريقة لإضافة وإزالة خيارات استهداف متعددة من أنواع مختلفة من الاستهداف من عنصر واحد أو أكثر من عناصر الإعلانات في الوقت نفسه.

تأخذ الطريقة قائمة بمثيلات DeleteAssignedTargetingOptionsRequests وقائمة بمثيلات CreateAssignedTargetingOptionsRequests. يمكن أن يمثّل عنصر طلب واحد حذف خيارات استهداف متعدّدة تمّ تعيينها من نوع الاستهداف نفسه أو إنشائها.

إذا أدّت محاولة حذف خيار استهداف محدّد أو إنشائه إلى حدوث خطأ في أحد تفاصيل الإعلان، يتمّ إلغاء الإجراء المجمّع لتلك التفاصيل. يعرض الطلب قائمة بالعناصر التي تم تعديلها بنجاح، بالإضافة إلى قوائم العناصر التي تعذّر تعديلها والأخطاء ذات الصلة.

في ما يلي مثال على كيفية إجراء تعديل مجمّع على خيارات الاستهداف المحدّدة لعنصر سطر واحد أو أكثر، مع مراعاة قوائم خيارات الاستهداف المحدّدة لحذفها وخيارات الاستهداف لإنشائها:

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