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

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

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

تستخدم خيارات الاستهداف إما متغيرات يحددها المستخدم أو متغيرات حالية قابلة للاستهداف أو الكيانات الموجودة مسبقًا لتحديد الجمهور المستهدف المطلوب. تمّ تحديد الخيارات السابقة باستخدام إما قيم التعداد أو خيار الاستهداف. الأرقام التعريفية حسب نوع الاستهداف. يتم تحديد الكيانات القابلة للاستهداف باستخدام معرفات الكيانات الخاصة بها. يمكن العثور على أرقام تعريف خيارات الاستهداف وأرقام تعريف الكيانات باستخدام العرض Video 360 API:

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

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

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

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

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

يتم تعيين أنواع الاستهداف التي تستخدم خيارات موجودة مسبقًا باستخدام خيارات أرقام تعريف خيارات الاستهداف:

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

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

  • قائمة شاملة أو استرجاعية فردية: يمكنك استرداد خيارات يمكن تنفيذ معظم أنواع الاستهداف باستخدام الطريقتين get وlist. استخدام targetingTypes.targetingOptions.get لاسترداد تفاصيل خيار استهداف يتم تحديده من خلال نوع الاستهداف ورقم تعريف خيار الاستهداف. استخدام targetingTypes.targetingOptions.list لعرض كل الخيارات المتاحة خيارات الاستهداف لنوع معيّن من الاستهداف.
  • البحث: خيارات لأنواع الاستهداف المستندة إلى الموقع الجغرافي (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
);

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

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

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

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

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

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

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

  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. يتم فرض هذه في الشاشة Video 360 API خلال الأخطاء التي نتجت عن إنشاء خيار الاستهداف المعيّن. سيحدِّد الخطأ الذي تعرضه واجهة برمجة التطبيقات نوع الانتهاك.

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

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

استهداف YouTube تحديدًا لا يمكن تعديل حملات الشركاء باستخدام الشاشة وستؤدي Video 360 API ومحاولة إجراء ذلك إلى حدوث خطأ.

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

  • TARGETING_TYPE_SESSION_POSITION
  • TARGETING_TYPE_YOUTUBE_CHANNEL
  • TARGETING_TYPE_YOUTUBE_VIDEO

أخطاء التزامن

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

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

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

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

  • استخدِم طرق الاستهداف المجمَّع لاسترداد خيارات الاستهداف أو تعديلها على مستوى أنواع استهداف متعددة وضمن موارد متعددة. يمكنك استرداد تكوينات الاستهداف الكاملة لعناصر متعددة باستخدام advertisers.lineItems.bulkListAssignedTargetingOptions أو إجراء تحديثات متطابقة للاستهداف على مستوى عناصر متعددة باستخدام advertisers.lineItems.bulkEditAssignedTargetingOptions تتوفّر هذه الميزة فقط في advertisers.lineItems. خدمة ما.
  • استخدم طرق الاستهداف على مستوى الموارد لاسترداد خيارات الاستهداف أو تعديلها. عبر أنواع استهداف متعددة ضمن مورد واحد. هذه متاحة في partners، advertisers، advertisers.campaigns، advertisers.insertionOrders الخدمات ويكون اسمها 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');
}