הטמעה של בידינג בהתאמה אישית

תצוגה ו עם Video 360 API אפשר לנהל באופן מלא בידינג בהתאמה אישית בפועל. אפשר ליצור אלגוריתמים של בידינג בהתאמה אישית, להעלות ולאמת את הנתונים סקריפטים נפרדים ולהקצות אלגוריתם ספציפי למשאב בתור הבידינג שלו את האסטרטגיה שלנו.

בדף הזה מוסבר איך ליצור, לעדכן ולהקצות אלגוריתמים של בידינג בהתאמה אישית עם רשת המדיה Video 360 API כל קטע מספק דוגמת קוד.

יצירת אלגוריתם של הצעות מחיר מותאמות אישית

אובייקט CustomBiddingAlgorithm מייצג אדם פרטי שאפשר להקצות לפריט כדי להשתמש בו בשיטת הבידינג שלו. הזה לאובייקט יש פרטים על האלגוריתם, כמו customBiddingAlgorithmType ו- entityStatus, וגם readinessState ו-suspensionState עבור שכל מפרסם רלוונטי יצר. אפשר ליצור CustomBiddingScript ו- CustomBiddingAlgorithmRules אובייקטים כמשאבי צאצא של שבו צריך להשתמש.

לפניכם דוגמה ליצירת אלגוריתם של בידינג בהתאמה אישית שמבוסס על סקריפטים:

Java

// Create the custom bidding algorithm structure.
CustomBiddingAlgorithm customBiddingAlgorithm =
    new CustomBiddingAlgorithm()
        .setAdvertiserId(advertiser-id)
        .setDisplayName(display-name)
        .setEntityStatus("ENTITY_STATUS_ACTIVE")
        .setCustomBiddingAlgorithmType("SCRIPT_BASED");

// Configure the create request.
CustomBiddingAlgorithms.Create request =
    service.customBiddingAlgorithms().create(customBiddingAlgorithm);

// Create the custom bidding algorithm.
CustomBiddingAlgorithm response = request.execute();

// Display the new custom bidding algorithm name.
System.out.printf(
    "Custom bidding algorithm %s was created.%n",
    response.getName()
);

Python

# Create a custom bidding algorithm object.
custom_bidding_algorithm_obj = {
    'advertiserId': advertiser-id,
    'displayName': display-name,
    'entityStatus': 'ENTITY_STATUS_ACTIVE',
    'customBiddingAlgorithmType': 'SCRIPT_BASED'
}

# Create the custom bidding algorithm.
response = service.customBiddingAlgorithms().create(
    body=custom_bidding_algorithm_obj
).execute()

# Display the new custom bidding algorithm.
print(f'The following Custom Bidding Algorithm was created: {response}')

PHP

// Create a custom bidding algorithm object.
$customBiddingAlgorithm =
    new Google_Service_DisplayVideo_CustomBiddingAlgorithm();
$customBiddingAlgorithm->setAdvertiserId(advertiser-id);
$customBiddingAlgorithm->setDisplayName(display-name);
$customBiddingAlgorithm->setEntityStatus('ENTITY_STATUS_ACTIVE');
$customBiddingAlgorithm->setCustomBiddingAlgorithmType('SCRIPT_BASED');

// Create the custom bidding algorithm.
$result =
    $this->service->customBiddingAlgorithms->create($customBiddingAlgorithm);

// Display the new custom bidding algorithm name.
printf('Custom Bidding Algorithm %s was created.\n', $result['name']);

ניהול הגישה לאלגוריתם

האלגוריתמים של הבידינג בהתאמה אישית יכולים להיות בבעלות של שותף או מפרסם. אלגוריתמים שנמצאים בבעלות שותף, השותפים יכולים לגשת ולשנות אותם, גם השותף וגם כל ילד מפרסמים שרשומים בשדה sharedAdvertiserIds. אפשר לגשת לאלגוריתמים שבבעלות המפרסם ולשנות אותם את המפרסם והשותף ההורה שלו, אבל לא ניתן לשתף אותו עם מפרסמים אחרים.

אם אתם משתמשים באלגוריתם רק למפרסם אחד, יש להקצות את המפרסם כבעלים עם השדה advertiserId. לחלופין, אפשר להקצות את השותף הראשי של המפרסמים כבעלים של partnerId, ולתת למפרסמים גישה באמצעות שדה sharedAdvertiserIds.

העלאת לוגיקת האלגוריתם

בהתאם לסוג של האלגוריתם של הבידינג בהתאמה אישית, בשלב הבא צריך ליצור אובייקט סקריפט או כללים, שבהם אפשר מספקת את הלוגיקה שבה האלגוריתם ישתמש.

העלאת סקריפט

אלגוריתמים של בידינג בהתאמה אישית שמבוססים על סקריפטים מתבססים על פרטים שהמשתמשים סיפקו scripts כדי להעריך את הערך של חשיפה. דוגמאות של סקריפטים פשוטים ורשימה של שדות מתקדמים זמינים דרך תצוגה ו מרכז העזרה של Video 360.

בקטעים הבאים מוסבר איך להוסיף סקריפט חדש או מעודכן לסקריפט בהתאמה אישית של אלגוריתם הבידינג.

אחזור מיקום משאב של סקריפט

קודם כול, מאחזרים מיקום משאב זמין במסגרת הבידינג בהתאמה אישית של האלגוריתם customBiddingAlgorithms.uploadScript. הזה הבקשה מחזירה אובייקט CustomBiddingScriptRef עם שם המשאב. אפשר להעלות את קובץ הסקריפט למיקום שנקבע על ידי שם המשאב. לאחר מכן, משתמשים באובייקט ההפניה לסקריפט של הצעת המחיר המותאמת אישית כדי ליצור משאב של סקריפטים.

הדוגמה הבאה ממחישה איך לאחזר מיקום משאב זמין:

Java

// Retrieve a usable custom bidding script
// reference.
CustomBiddingScriptRef scriptRef =
    service
        .customBiddingAlgorithms()
        .uploadScript(custom-bidding-algorithm-id)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the custom bidding script reference resource path.
System.out.printf(
    "The script can be uploaded to the following resource path: %s%n",
    scriptRef.getResourceName()
);

Python

# Retrieve a usable custom bidding script reference
# object.
custom_bidding_script_ref = service.customBiddingAlgorithms().uploadScript(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id
).execute()

# Display the new custom bidding script reference object.
print('The following custom bidding script reference object was retrieved:'
      f'{custom_bidding_script_ref}')

PHP

// Set parent advertiser ID of custom bidding
// algorithm in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);

// Retrieve a usable custom bidding script reference.
$scriptRefResponse = $this->service->customBiddingAlgorithms->uploadScript(
    custom-bidding-algorithm-id,
    $optParams
);

// Display the new custom bidding script reference object.
printf(
    'The script can be uploaded to the following resource path: %s\n',
    $scriptRefResponse->getResourceName()
);

העלאת קובץ סקריפט

לאחר אחזור של מיקום משאב זמין, מעלים את קובץ הסקריפט אליו במיקום ברשת המדיה מערכת Video 360 עם media.upload. השיטה הזאת תומכת העלאה פשוטה שמחייבת את פרמטר השאילתה uploadType=media.

דוגמה לאופן שבו מעלים קובץ סקריפט עם נתונים מותאמים אישית שאוחזרו אובייקט עזר לסקריפט לבידינג:

Java

// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);

// Create input stream for the script file.
InputStreamContent scriptFileStream =
    new InputStreamContent(
        null, new FileInputStream(script-path));

// Create media.upload request.
Media.Upload uploadRequest =
        service
            .media()
            .upload(
                resource-name,
                media,
                scriptFileStream);

// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);

// Execute the upload using an Upload URL with the destination resource
// name.
uploader
    .upload(
        new GenericUrl(
            "https://displayvideo.googleapis.com/upload/media/"
                + resource-name));

Python

# Create a media upload object.
media = MediaFileUpload(script-path)

# Create upload request.
upload_request = service.media().upload(
    resourceName=resource-name, media_body=media)

# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc

# Upload script to resource location given in retrieved custom bidding
# script reference object.
upload_request.execute()

PHP

// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);

// Set parameters for upload request.
$optParams = array(
    'data' => file_get_contents(script-path),
    'uploadType' => 'media',
    'resourceName' => resource-name
);

// Upload script file to given resource location.
$this->service->media->upload(
    resource-name,
    $mediaBody,
    $optParams
);

cURL

curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media' 
  -H 'authorization: Bearer access-token'
  -H 'Content-Type: text/plain'
  --data-binary @script-path

יצירת אובייקט סקריפט

לאחר ההעלאה של קובץ הסקריפט, יש ליצור משאב של סקריפטים של בידינג בהתאמה אישית עם השיטה customBiddingAlgorithms.scripts.create. האובייקט CustomBiddingScript שמועבר בבקשה צריך רק כוללים את האובייקט CustomBiddingScriptRef שהוקצה של השדה script. פעולה זו משייכת את קובץ סקריפט עם משאב הסקריפט החדש.

דוגמה ליצירת משאב של סקריפט:

Java

// Create the custom bidding script structure.
CustomBiddingScript customBiddingScript =
    new CustomBiddingScript()
        .setScript(custom-bidding-script-ref);

// Create the custom bidding script.
CustomBiddingScript response =
    service
        .customBiddingAlgorithms()
        .scripts()
        .create(custom-bidding-algorithm-id, customBiddingScript)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the new script resource name
System.out.printf(
    "The following script was created: %s%n",
    response.getName());

Python

# Create a custom bidding script object.
script_obj = {
    'script': custom-bidding-script-ref
}

# Create the custom bidding script.
response = service.customBiddingAlgorithms().scripts().create(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id,
    body=script_obj).execute()

# Display the new custom bidding script object.
print(f'The following custom bidding script was created: {response}')

PHP

// Create the custom bidding script object.
$customBiddingScript =
    new Google_Service_DisplayVideo_CustomBiddingScript();
$customBiddingScript->setScript(custom-bidding-script-ref);

// Set parameters for create script request.
$optParams = array(
    'advertiserId' => advertiser-id
);

// Create the custom bidding script.
$result = $this->service->customBiddingAlgorithms_scripts->create(
    custom-bidding-algorithm-id,
    $customBiddingScript,
    $optParams
);

// Display the new script resource name.
printf('The following script was created: %s.\n', $result->getName());

אחרי שיוצרים משאב בסקריפט של בידינג בהתאמה אישית, קמפיינים לרשת המדיה מערכת Video 360 מעבדת את כדי לוודא שאפשר להשתמש בו כדי לדרג חשיפות. מאחזרים את המצב של העיבוד הזה באמצעות אובייקט הסקריפט state. לאחר שהסקריפט החדש מתקבל, הפרמטר המותאם אישית האלגוריתם של הבידינג מתחיל להשתמש בסקריפט כדי לדרג ערכי חשיפות. הזה קורה באופן מיידי, לכן ודאו שאתם רוצים לעדכן את האלגוריתם לפני ויוצר משאב חדש של סקריפטים.

כללי העלאה

אלגוריתמים של בידינג בהתאמה אישית שמבוססים על כללים משתמשים בלוגיקה שמסופקת אובייקט AlgorithmRules כדי להעריך את ערך החשיפה.

מתבצעת העלאה של AlgorithmRules אובייקטים לקובץ JSON, ואז שמשויכים לאלגוריתם של בידינג בהתאמה אישית באמצעות אובייקט CustomBiddingAlgorithmRules.

אחזור מיקום משאב של כללים

קודם כול, מאחזרים מיקום משאב זמין במסגרת הבידינג בהתאמה אישית של האלגוריתם customBiddingAlgorithms.uploadRules. הזה הבקשה מחזירה אובייקט CustomBiddingAlgorithmsRulesRef עם שם משאב. אפשר להעלות את הכללים למיקום שנקבע על ידי שם המשאב. לאחר מכן להשתמש באובייקט העזר של כללי האלגוריתם של בידינג בהתאמה אישית כדי ליצור כללים משאב.

הדוגמה הבאה ממחישה איך לאחזר מיקום משאב זמין:

Java

// Create the custom bidding algorithm structure.
CustomBiddingAlgorithmRulesRef rulesRef =
    service
        .customBiddingAlgorithms()
        .uploadRules(custom-bidding-algorithm-id)
        .setAdvertiserId(advertiser-id)
        .execute();

System.out.printf(
    "The rules can be uploaded to the following resource path: %s%n",
    rulesRef.getResourceName()
);

Python

# Retrieve a usable custom bidding algorithm rules reference
# object.
custom_bidding_algorithm_rules_ref = service.customBiddingAlgorithms().uploadRules(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id
).execute()

# Display the new custom bidding algorithm rules reference object.
print('The following custom bidding algorithm rules reference object was retrieved:'
      f' {custom_bidding_algorithm_rules_ref}')

PHP

// Set parent advertiser ID of custom bidding algorithm
// in optional parameters array for request.
$optParams = array('advertiserId' => advertiser-id);

// Retrieve a usable custom bidding algorithm rules reference.
$rulesRefResponse = $this->service->customBiddingAlgorithms->uploadRules(
    custom-bidding-algorithm-id,
    $optParams
);

// Display the new custom bidding algorithm rules reference object resource path.
printf(
    'The rules can be uploaded to the following resource path: %s\n',
    $rulesRefResponse->getResourceName()
);

העלאת קובץ AlgorithmRules

אחרי אחזור של מיקום משאב זמין, מעלים את קובץ הכללים אליו במיקום ברשת המדיה מערכת Video 360 עם media.upload. השיטה הזאת תומכת העלאה פשוטה שמחייבת את פרמטר השאילתה uploadType=media.

הנה דוגמה לאופן שבו מעלים קובץ AlgorithmRules בהינתן קובץ שאוחזר כללי אלגוריתם של בידינג בהתאמה אישית מפנים לאובייקט:

Java

// Create media object.
GoogleBytestreamMedia media = new GoogleBytestreamMedia();
media.setResourceName(resource-name);

// Create input stream for the rules file.
InputStreamContent rulesFileStream =
    new InputStreamContent(
        null, new FileInputStream(rules-file-path));

// Create media.upload request.
 Media.Upload uploadRequest =
    service
        .media()
        .upload(
            resource-name,
            media,
            rulesFileStream);

// Retrieve uploader from the request and set it to us a simple
// upload request.
MediaHttpUploader uploader = uploadRequest.getMediaHttpUploader();
uploader.setDirectUploadEnabled(true);

// Execute the upload using an Upload URL with the destination resource
// name.
uploader
    .upload(
        new GenericUrl(
            "https://displayvideo.googleapis.com/upload/media/"
                + resource-name));

Python

# Create a media upload object.
media = MediaFileUpload(rules-file-path)

# Create upload request.
upload_request = service.media().upload(
    resourceName=resource-name, media_body=media)

# Override response handler to expect null response.
upload_request.postproc = HttpRequest.null_postproc

# Upload rules file to resource location given in retrieved custom bidding
# algorithm rules reference object.
upload_request.execute()

PHP

// Create a media object.
$mediaBody = new Google_Service_DisplayVideo_GoogleBytestreamMedia();
$mediaBody->setResourceName(resource-name);

// Set parameters for upload request.
$optParams = array(
    'data' => file_get_contents(rules-file-path),
    'uploadType' => 'media',
    'resourceName' => resource-name
);

// Upload rules file to given resource location.
$this->service->media->upload(
    resource-name,
    $mediaBody,
    $optParams
);

cURL

curl --request POST 'https://displayvideo.googleapis.com/upload/media/resource-name?uploadType=media' 
  -H 'authorization: Bearer access-token'
  -H 'Content-Type: text/plain'
  --data-binary @rules-file-path

יצירת אובייקט של כללים

אחרי שמעלים את קובץ ה-JSON AlgorithmRules, יוצרים בידינג בהתאמה אישית של האלגוריתם customBiddingAlgorithms.rules.create. האובייקט CustomBiddingAlgorithmRules שמועבר בבקשה צריך יש לכלול רק את האובייקט CustomBiddingAlgorithmRulesRef בתור הערך שהוקצה לשדה rules. פעולה זו משייכת את הועלה קובץ JSON אחד (AlgorithmRules) עם משאב הכללים החדש.

דוגמה ליצירת משאב של כללים:

Java

// Create the custom bidding algorithm rules structure.
CustomBiddingAlgorithmRules customBiddingAlgorithmRules =
    new CustomBiddingAlgorithmRules()
        .setRules(custom-bidding-algorithm-rules-ref);

// Create the rules resource.
CustomBiddingAlgorithmRules response =
    service
        .customBiddingAlgorithms()
        .rules()
        .create(custom-bidding-algorithm-id, customBiddingAlgorithmRules)
        .setAdvertiserId(advertiser-id)
        .execute();

// Display the new rules resource name.
System.out.printf(
    "The following custom bidding algorithm rules object was created: %s%n",
    response.getName());

Python

# Create the custom bidding algorithm rules object.
rules_obj = {
    'rules': custom-bidding-algorithm-rules-ref
}

# Create the rules resource.
response = service.customBiddingAlgorithms().rules().create(
    customBiddingAlgorithmId=custom-bidding-algorithm-id,
    advertiserId=advertiser-id,
    body=rules_obj).execute()

# Display the new custom bidding algorithm rules object.
print(f'The following custom bidding algorithm rules resource was created: {response}')

PHP

// Create the custom bidding algorithm rules object.
$customBiddingAlgorithmRules =
    new Google_Service_DisplayVideo_CustomBiddingAlgorithmRules();
$customBiddingAlgorithmRules->setRules(custom-bidding-algorithm-rules-ref);

// Set parameters for create rules request.
$optParams = array(
    'advertiserId' => advertiser-id
);

// Create the custom bidding algorithm rules resource.
$result = $this->service->customBiddingAlgorithms_rules->create(
    custom-bidding-algorithm-id,
    $customBiddingAlgorithmRules,
    $optParams
);

// Display the new custom bidding algorithm rules resource name.
printf('The following rules resource was created: %s.\n', $result->getName());

אחרי שיוצרים משאב של כללים, מערכת Display & מערכת Video 360 מעבדת את ערכת הכללים כדי לבצע אפשר לוודא שאפשר להשתמש בו כדי לצבור חשיפות. אחזור המצב של העיבוד הזה דרך השדה state של אובייקט הכללים. אחרי אישור הכללים החדשים, האלגוריתם של הבידינג בהתאמה אישית יתחיל להשתמש כדי לדרג ערכי חשיפות באופן מיידי.

אם הכללים נדחו, יש לאחזר את הסיבה לדחייה מהכללים error של האובייקט. במקרה של דחייה, יש לעדכן את הפרטים הבאים: AlgorithmRules כדי לתקן את השגיאה ולחזור על תהליך ההעלאה החל מאחזור האובייקט של הכללים שמפנים.

הקצאת אלגוריתם של בידינג מותאם אישית

אחרי שיוצרים אלגוריתם לבידינג בהתאמה אישית, מעלים לוגיקה קבילה ועומדים את הדרישות המתאימות, אפשר להקצות ללקוחות אלגוריתם של בידינג לשיטת הבידינג של פריט או הזמנת קמפיין.

אפשר להשתמש באלגוריתמים של בידינג בהתאמה אישית למקסם את ההוצאות וגם שיטות בידינג לפי יעדי ביצועים על ידי הקצאה של BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO ואת מזהה האלגוריתם לבידינג מותאם אישית performanceGoalType וגם customBiddingAlgorithmId שדות, בהתאמה. בהתאם לשיטת הבידינג, פרמטרים אחרים של הצעת מחיר עשויים להיות זמינים, או נדרש.

דוגמה לעדכון של פריט כך שיוגדר בו הצעת מחיר למיקסום ההוצאות עם אלגוריתם נתון של בידינג בהתאמה אישית:

Java

// Create the line item structure.
LineItem lineItem = new LineItem();

// Create and set the bidding strategy structure.
BiddingStrategy biddingStrategy = new BiddingStrategy();
MaximizeSpendBidStrategy maxSpendBidStrategy =
    new MaximizeSpendBidStrategy()
        .setPerformanceGoalType(
            "BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO")
        .setCustomBiddingAlgorithmId(custom-bidding-algorithm-id);
biddingStrategy.setMaximizeSpendAutoBid(maxSpendBidStrategy);
lineItem.setBidStrategy(biddingStrategy);

// Configure the patch request and set update mask to only update
// the bid strategy.
LineItems.Patch request =
    service
        .advertisers()
        .lineItems()
        .patch(advertiser-id, line-item-id, lineItem)
        .setUpdateMask("bidStrategy");

// Update the line item.
LineItem response = request.execute();

// Display the custom bidding algorithm ID used in the new
// bid strategy.
System.out.printf(
    "LineItem %s now has a bid strategy utilizing custom "
        + "bidding algorithm %s%n",
    response.getName(),
    response
        .getBidStrategy()
        .getMaximizeSpendAutoBid()
        .getCustomBiddingAlgorithmId());

Python

# Create the new bid strategy object.
bidding_strategy = {
    'maximizeSpendAutoBid': {
        'performanceGoalType':
            'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO',
        'customBiddingAlgorithmId': custom-bidding-algorithm-id
    }
}

# Create a line item object assigning the new bid strategy.
line_item_obj = {'bidStrategy': bidding_strategy}

# Update the line item with a new bid strategy.
response = service.advertisers().lineItems().patch(
    advertiserId=advertiser-id,
    lineItemId=line-item-id,
    updateMask='bidStrategy',
    body=line_item_obj).execute()

# Display the line item's new bid strategy
print(f'Line Item {response["name"]} is now using the following bid'
     f' strategy: {response["bidStrategy"]}.')

PHP

// Create the line item structure.
$lineItem = new Google_Service_DisplayVideo_LineItem();

// Create and set the bidding strategy structure.
$biddingStrategy =  new Google_Service_DisplayVideo_BiddingStrategy();
$maximizeSpendBidStrategy =
    new Google_Service_DisplayVideo_MaximizeSpendBidStrategy();
$maximizeSpendBidStrategy->setPerformanceGoalType(
    'BIDDING_STRATEGY_PERFORMANCE_GOAL_TYPE_CUSTOM_ALGO'
);
$maximizeSpendBidStrategy->setCustomBiddingAlgorithmId(
    custom-bidding-algorithm-id
);
$biddingStrategy->setMaximizeSpendAutoBid($maximizeSpendBidStrategy);
$lineItem->setBidStrategy($biddingStrategy);

// Set update mask.
$optParams = array('updateMask' => 'bidStrategy');

// Update the line item.
$result = $this->service->advertisers_lineItems->patch(
    advertiser-id,
    line-item-id,
    $lineItem,
    $optParams
);

// Display the custom bidding algorithm ID used in the new bid strategy.
printf(
    'Line Item %s now has a bid strategy utilizing custom bidding algorithm %s.\n',
    $result['name'],
    $result['bidStrategy']['maximizeSpendBidStrategy']['customBiddingAlgorithmId']
);