ภาษา
หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ตัวอย่างนี้แสดงวิธีตั้งค่าโฆษณาที่ตอบสนองสําหรับ Microsoft Audience Network โดยใช้บริการการจัดการแคมเปญ
เคล็ดลับ
ใช้ตัวเลือกภาษาในส่วนหัวของเอกสารประกอบเพื่อเลือก C#, Java, PHP หรือ Python
เมื่อต้องการรับการเข้าถึงและรีเฟรชโทเค็นสําหรับผู้ใช้ Microsoft Advertising ของคุณ และทําการเรียกใช้บริการครั้งแรกของคุณโดยใช้ Bing Ads API ให้ดูคู่มือเริ่มต้นใช้งานด่วน คุณจะต้องตรวจสอบคู่มือเริ่มต้นใช้งานและคําแนะนําสําหรับภาษาที่คุณต้องการ เช่น C#, Java, PHP และ Python
ไฟล์ที่สนับสนุนสําหรับตัวอย่าง C#, Java, PHP และ Python มีอยู่ที่ GitHub คุณสามารถโคลนแต่ละที่เก็บหรือนําส่วนย่อยไปใช้ใหม่ได้ตามต้องการ
using System;
using System.IO;
using System.Linq;
using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.BingAds.V13.CampaignManagement;
using Microsoft.BingAds;
using System.Drawing;
namespace BingAdsExamplesLibrary.V13
{
/// <summary>
/// How to create Responsive Ads with the Campaign Management service.
/// </summary>
public class ResponsiveAds : ExampleBase
{
// To run this example you'll need to provide your own image.
// For required aspect ratios and recommended dimensions please see
// Image remarks at https://go.microsoft.com/fwlink/?linkid=872754.
private const string MediaFilePath = "c:\\dev\\media\\";
private const string ResponsiveAdMediaFileName = "imageresponsivead1200x628.png";
public override string Description
{
get { return "Responsive Ads | Campaign Management V13"; }
}
public async override Task RunAsync(AuthorizationData authorizationData)
{
try
{
ApiEnvironment environment = ((OAuthDesktopMobileAuthCodeGrant)authorizationData.Authentication).Environment;
CampaignManagementExampleHelper CampaignManagementExampleHelper = new CampaignManagementExampleHelper(
OutputStatusMessageDefault: this.OutputStatusMessage);
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData: authorizationData,
environment: environment);
// Add an image to your media library.
// The image asset is needed later to create the responsive ad.
var landscapeImageMedia = GetImageMedia(
"Image191x100",
MediaFilePath + ResponsiveAdMediaFileName,
System.Drawing.Imaging.ImageFormat.Png);
var media = new Media[]
{
landscapeImageMedia,
};
OutputStatusMessage("-----\nAddMedia:");
AddMediaResponse addMediaResponse = await CampaignManagementExampleHelper.AddMediaAsync(
accountId: authorizationData.AccountId,
media: media);
long[] mediaIds = addMediaResponse.MediaIds.ToArray();
OutputStatusMessage("MediaIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(mediaIds);
// Create an Audience campaign with one ad group and a responsive ad.
var campaigns = new[]{
new Campaign
{
BudgetType = BudgetLimitType.DailyBudgetStandard,
// CampaignType must be set for Audience campaigns
CampaignType = CampaignType.Audience,
DailyBudget = 50,
// Languages must be set for Audience campaigns
Languages = new string[] { "All" },
Name = "Everyone's Shoes " + DateTime.UtcNow,
TimeZone = "PacificTimeUSCanadaTijuana",
},
};
OutputStatusMessage("-----\nAddCampaigns:");
AddCampaignsResponse addCampaignsResponse = await CampaignManagementExampleHelper.AddCampaignsAsync(
accountId: authorizationData.AccountId,
campaigns: campaigns);
long?[] campaignIds = addCampaignsResponse.CampaignIds.ToArray();
BatchError[] campaignErrors = addCampaignsResponse.PartialErrors.ToArray();
OutputStatusMessage("CampaignIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(campaignIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(campaignErrors);
// Add an ad group within the campaign.
var adGroups = new[] {
new AdGroup
{
Name = "Everyone's Red Shoe Sale",
StartDate = null,
EndDate = new Date {
Month = 12,
Day = 31,
Year = DateTime.UtcNow.Year + 1
},
CpcBid = new Bid { Amount = 0.09 },
// Network cannot be set for ad groups in Audience campaigns
Network = null,
}
};
OutputStatusMessage("-----\nAddAdGroups:");
AddAdGroupsResponse addAdGroupsResponse = await CampaignManagementExampleHelper.AddAdGroupsAsync(
campaignId: (long)campaignIds[0],
adGroups: adGroups,
returnInheritedBidStrategyTypes: false);
long?[] adGroupIds = addAdGroupsResponse.AdGroupIds.ToArray();
BatchError[] adGroupErrors = addAdGroupsResponse.PartialErrors.ToArray();
OutputStatusMessage("AdGroupIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(adGroupIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(adGroupErrors);
// Add a responsive ad within the ad group.
var ads = new Ad[] {
new ResponsiveAd
{
BusinessName = "Contoso",
CallToAction = CallToAction.AddToCart,
FinalUrls = new[] {
"https://www.contoso.com/womenshoesale"
},
Headline = "Fast & Easy Setup",
Images = new []
{
// You are only required to provide a landscape image asset.
// Optionally you can include additional asset links, i.e., one image asset for each supported sub type.
// For any image asset sub types that you do not explicitly set,
// the service will automatically create image asset links by cropping the LandscapeImageMedia.
new AssetLink
{
Asset = new ImageAsset
{
CropHeight = null,
CropWidth = null,
CropX = null,
CropY = null,
Id = mediaIds[0],
Name = "My LandscapeImageMedia",
SubType = "LandscapeImageMedia",
},
},
},
LongHeadlineString = "Find New Customers & Increase Sales!",
Text = "Find New Customers & Increase Sales! Start Advertising on Contoso Today.",
},
};
OutputStatusMessage("-----\nAddAds:");
AddAdsResponse addAdsResponse = await CampaignManagementExampleHelper.AddAdsAsync(
adGroupId: (long)adGroupIds[0],
ads: ads);
long?[] adIds = addAdsResponse.AdIds.ToArray();
BatchError[] adErrors = addAdsResponse.PartialErrors.ToArray();
OutputStatusMessage("AdIds:");
CampaignManagementExampleHelper.OutputArrayOfLong(adIds);
OutputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.OutputArrayOfBatchError(adErrors);
// Delete the account's media.
OutputStatusMessage("-----\nDeleteMedia:");
await CampaignManagementExampleHelper.DeleteMediaAsync(
accountId: authorizationData.AccountId,
mediaIds: mediaIds);
foreach (var id in mediaIds)
{
OutputStatusMessage(string.Format("Deleted Media Id {0}", id));
}
// Delete the campaign and everything it contains e.g., ad groups and ads.
OutputStatusMessage("-----\nDeleteCampaigns:");
await CampaignManagementExampleHelper.DeleteCampaignsAsync(
accountId: authorizationData.AccountId,
campaignIds: new[] { (long)campaignIds[0] });
OutputStatusMessage(string.Format("Deleted Campaign Id {0}", campaignIds[0]));
}
// Catch authentication exceptions
catch (OAuthTokenRequestException ex)
{
OutputStatusMessage(string.Format("Couldn't get OAuth tokens. Error: {0}. Description: {1}", ex.Details.Error, ex.Details.Description));
}
// Catch Campaign Management service exceptions
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.AdApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.Errors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.ApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (FaultException<Microsoft.BingAds.V13.CampaignManagement.EditorialApiFaultDetail> ex)
{
OutputStatusMessage(string.Join("; ", ex.Detail.OperationErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
OutputStatusMessage(string.Join("; ", ex.Detail.BatchErrors.Select(error => string.Format("{0}: {1}", error.Code, error.Message))));
}
catch (Exception ex)
{
OutputStatusMessage(ex.Message);
}
}
/// <summary>
/// Get image media that can be created via the
/// Campaign Management API.
/// </summary>
/// <param name="mediaType">The media type reflects the aspect ratio.</param>
/// <param name="imageFileName">The file name and path.</param>
/// <param name="imageFormat">For supported image formats see <see href="https://go.microsoft.com/fwlink/?linkid=872754">Image remarks</see>.</param>
/// <returns>A Campaign Management Image object.</returns>
private Microsoft.BingAds.V13.CampaignManagement.Image GetImageMedia(
string mediaType,
string imageFileName,
System.Drawing.Imaging.ImageFormat imageFormat)
{
var image = new Microsoft.BingAds.V13.CampaignManagement.Image();
image.Data = GetBmpBase64String(imageFileName, imageFormat);
image.MediaType = mediaType;
image.Type = "Image";
return image;
}
/// <summary>
/// Get the image media as base64 string.
/// </summary>
/// <param name="imageFileName">The file name and path.</param>
/// <param name="imageFormat">For supported image formats see <see href="https://go.microsoft.com/fwlink/?linkid=872754">Image remarks</see>.</param>
/// <returns></returns>
private string GetBmpBase64String(
string imageFileName,
System.Drawing.Imaging.ImageFormat imageFormat)
{
var bmp = new Bitmap(imageFileName);
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, imageFormat);
byte[] imageBytes = ms.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
}
}
package com.microsoft.bingads.examples.v13;
import com.microsoft.bingads.*;
import com.microsoft.bingads.v13.campaignmanagement.*;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.util.Base64;
import java.util.Calendar;
public class ResponsiveAds extends ExampleBase {
public static void main(java.lang.String[] args) {
// To run this example you'll need to provide your own image.
// For required aspect ratios and recommended dimensions please see
// Image remarks at https://go.microsoft.com/fwlink/?linkid=872754.
java.lang.String MEDIA_FILE_PATH = "c:\\dev\\media\\";
java.lang.String RESPONSIVE_AD_MEDIA_FILE_NAME = "imageresponsivead1200x628.png";
try
{
authorizationData = getAuthorizationData();
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
authorizationData,
API_ENVIRONMENT,
ICampaignManagementService.class);
// Add an image to your media library.
// The image asset is needed later to create the responsive ad.
Image landscapeImageMedia = getImageMedia("Image191x100",
MEDIA_FILE_PATH + RESPONSIVE_AD_MEDIA_FILE_NAME);
ArrayOfMedia addMedia = new ArrayOfMedia();
addMedia.getMedias().add(landscapeImageMedia);
CampaignManagementExampleHelper.outputArrayOfMedia(addMedia);
outputStatusMessage("-----\nAddMedia:");
ArrayOflong mediaIds = CampaignManagementExampleHelper.addMedia(
authorizationData.getAccountId(),
addMedia).getMediaIds();
outputStatusMessage("MediaIds:");
CampaignManagementExampleHelper.outputArrayOflong(mediaIds);
// Create an Audience campaign with one ad group and a responsive ad.
ArrayOfCampaign campaigns = new ArrayOfCampaign();
Campaign campaign = new Campaign();
campaign.setBudgetType(BudgetLimitType.DAILY_BUDGET_STANDARD);
// CampaignType must be set for Audience campaigns
ArrayList<CampaignType> campaignTypes = new ArrayList<CampaignType>();
campaignTypes.add(CampaignType.AUDIENCE);
campaign.setCampaignType(campaignTypes);
campaign.setDailyBudget(50.00);
ArrayOfstring languages = new ArrayOfstring();
languages.getStrings().add("All");
campaign.setLanguages(languages);
campaign.setName("Everyone's Shoes " + System.currentTimeMillis());
campaign.setTimeZone("PacificTimeUSCanadaTijuana");
campaigns.getCampaigns().add(campaign);
outputStatusMessage("-----\nAddCampaigns:");
AddCampaignsResponse addCampaignsResponse = CampaignManagementExampleHelper.addCampaigns(
authorizationData.getAccountId(),
campaigns);
ArrayOfNullableOflong campaignIds = addCampaignsResponse.getCampaignIds();
ArrayOfBatchError campaignErrors = addCampaignsResponse.getPartialErrors();
outputStatusMessage("CampaignIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(campaignIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(campaignErrors);
// Add an ad group within the campaign.
ArrayOfAdGroup adGroups = new ArrayOfAdGroup();
AdGroup adGroup = new AdGroup();
adGroup.setName("Everyone's Red Shoe Sale");
adGroup.setStartDate(null);
Calendar calendar = Calendar.getInstance();
adGroup.setEndDate(new com.microsoft.bingads.v13.campaignmanagement.Date());
adGroup.getEndDate().setDay(31);
adGroup.getEndDate().setMonth(12);
adGroup.getEndDate().setYear(calendar.get(Calendar.YEAR));
Bid CpcBid = new Bid();
CpcBid.setAmount(0.09);
adGroup.setCpcBid(CpcBid);
// Network cannot be set for ad groups in Audience campaigns
adGroup.setNetwork(null);
adGroups.getAdGroups().add(adGroup);
outputStatusMessage("-----\nAddAdGroups:");
AddAdGroupsResponse addAdGroupsResponse = CampaignManagementExampleHelper.addAdGroups(
campaignIds.getLongs().get(0),
adGroups,
false);
ArrayOfNullableOflong adGroupIds = addAdGroupsResponse.getAdGroupIds();
ArrayOfBatchError adGroupErrors = addAdGroupsResponse.getPartialErrors();
outputStatusMessage("AdGroupIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adGroupIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(adGroupErrors);
// Add a responsive ad within the ad group.
ArrayOfAd ads = new ArrayOfAd();
ResponsiveAd responsiveAd = new ResponsiveAd();
responsiveAd.setBusinessName("Contoso");
responsiveAd.setCallToAction(CallToAction.ADD_TO_CART);
ArrayOfstring finalUrls = new ArrayOfstring();
finalUrls.getStrings().add("https://www.contoso.com/womenshoesale");
responsiveAd.setFinalUrls(finalUrls);
responsiveAd.setHeadline("Fast & Easy Setup");
// You are only required to provide a landscape image asset.
// Optionally you can include additional asset links, i.e., one image asset for each supported sub type.
// For any image asset sub types that you do not explicitly set,
// the service will automatically create image asset links by cropping the LandscapeImageMedia.
ArrayOfAssetLink assetLinks = new ArrayOfAssetLink();
AssetLink assetLink = new AssetLink();
ImageAsset imageAsset = new ImageAsset();
imageAsset.setCropHeight(null);
imageAsset.setCropWidth(null);
imageAsset.setCropX(null);
imageAsset.setCropY(null);
imageAsset.setId(mediaIds.getLongs().get(0));
imageAsset.setName("My LandscapeImageMedia");
imageAsset.setSubType("LandscapeImageMedia");
assetLink.setAsset(imageAsset);
assetLinks.getAssetLinks().add(assetLink);
responsiveAd.setImages(assetLinks);
responsiveAd.setLongHeadlineString("Find New Customers & Increase Sales!");
responsiveAd.setText("Find New Customers & Increase Sales! Start Advertising on Contoso Today.");
ads.getAds().add(responsiveAd);
outputStatusMessage("-----\nAddAds:");
AddAdsResponse addAdsResponse = CampaignManagementExampleHelper.addAds(
adGroupIds.getLongs().get(0),
ads);
ArrayOfNullableOflong adIds = addAdsResponse.getAdIds();
ArrayOfBatchError adErrors = addAdsResponse.getPartialErrors();
outputStatusMessage("AdIds:");
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adIds);
outputStatusMessage("PartialErrors:");
CampaignManagementExampleHelper.outputArrayOfBatchError(adErrors);
// Delete the account's media.
outputStatusMessage("-----\nDeleteMedia:");
CampaignManagementExampleHelper.deleteMedia(
authorizationData.getAccountId(),
mediaIds);
for (java.lang.Long id : mediaIds.getLongs())
{
outputStatusMessage(String.format("Deleted Media Id %s", id));
}
// Delete the campaign and everything it contains e.g., ad groups and ads.
outputStatusMessage("-----\nDeleteCampaigns:");
ArrayOflong deleteCampaignIds = new ArrayOflong();
deleteCampaignIds.getLongs().add(campaignIds.getLongs().get(0));
CampaignManagementExampleHelper.deleteCampaigns(
authorizationData.getAccountId(),
deleteCampaignIds);
outputStatusMessage(String.format("Deleted CampaignId %d", deleteCampaignIds.getLongs().get(0)));
}
catch (Exception ex) {
String faultXml = ExampleExceptionHelper.getBingAdsExceptionFaultXml(ex, System.out);
outputStatusMessage(faultXml);
String message = ExampleExceptionHelper.handleBingAdsSDKException(ex, System.out);
outputStatusMessage(message);
}
}
// Get image media that can be managed with the Campaign Management API.
static Image getImageMedia(
java.lang.String mediaType,
java.lang.String imageFileName) throws UnsupportedEncodingException, IOException
{
Image image = new Image();
image.setData(getBmpBase64String(imageFileName));
image.setMediaType(mediaType);
image.setType("Image");
return image;
}
// Get the image media as base64 string.
static java.lang.String getBmpBase64String(
java.lang.String imageFileName) throws UnsupportedEncodingException, IOException
{
File fi = new File(imageFileName);
byte[] imageBytes = Files.readAllBytes(fi.toPath());
java.lang.String base64String = new java.lang.String(Base64.getEncoder().encode(imageBytes), "UTF-8");
return base64String;
}
}
<?php
namespace Microsoft\MsAds\Rest\Test\Services;
use Exception;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AddMediaRequest;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AdGroup;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Bid;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\BudgetLimitType;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Campaign;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\CampaignType;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\Date;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\DeleteMediaRequest;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\LanguageName;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\ResponsiveAd;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\CallToAction;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\AssetLink;
use Microsoft\MsAds\Rest\Model\CampaignManagementService\ImageAsset;
use Microsoft\MsAds\Rest\Test\RestApiTestBase;
class ResponsiveAdsTest extends RestApiTestBase
{
protected string $mediaFilePath = "c:\\dev\\media\\";
protected string $responsiveAdMediaFileName = "imageresponsivead703x368.png";
/**
* Add an image to your media library.
* The image asset is needed later to create the responsive ad.
* @throws Exception
*/
public function testAddMedia()
{
print("-----\r\nAdding Media:\r\n");
$responsiveAdImageMedia = $this->getImageMedia(
"Image191x100",
$this->mediaFilePath.$this->responsiveAdMediaFileName
);
$request = new AddMediaRequest([
'AccountId' => self::CUSTOMER_ACCOUNT_ID,
'Media' => [$responsiveAdImageMedia],
]);
$response = self::$campaignManagementServiceApi->addMedia($request);
$mediaIds = $response->getMediaIds();
print("MediaIds:\r\n");
print_r($mediaIds);
self::assertNotEmpty($mediaIds);
return $mediaIds;
}
/**
* @depends testAddMedia
* @throws Exception
*/
public function testAddCampaign()
{
$campaign = (new Campaign())
->setName("Women's Shoes ".self::generateRandomAlphaNumeric())
->setCampaignType(CampaignType::AUDIENCE)
->setBudgetType(BudgetLimitType::DAILY_BUDGET_STANDARD)
->setDailyBudget(50.00)
->setLanguages(["All"])
->setTimeZone("PacificTimeUSCanadaTijuana");
return self::addCampaignsRequest([$campaign]);
}
/**
* @depends testAddCampaign
* @throws Exception
*/
public function testAddAdGroup(array $campaignIds)
{
$adGroup = (new AdGroup())
->setName("Women's Red Shoe Sale".self::generateRandomAlphaNumeric())
->setCpcBid((new Bid())->setAmount(0.09))
->setStartDate(null)
->setEndDate((new Date())->setDay(31)->setMonth(12)->setYear(date("Y")));
return self::addAdGroupsRequest($campaignIds[0], [$adGroup]);
}
/**
* @depends testAddAdGroup
* @depends testAddMedia
* @throws Exception
*/
public function testAddResponsiveAd(array $adGroupIds, array $mediaIds)
{
print("-----\r\nAdding Responsive Ad:\r\n");
$responsiveAd = (new ResponsiveAd())
->setBusinessName("Contoso")
->setCallToAction(CallToAction::ACT_NOW)
->setCallToActionLanguage(LanguageName::ENGLISH)
->setFinalUrls(["http://www.contoso.com/womenshoesale"])
->setHeadline("Fast & Easy Setup")
->setLongHeadlineString("Find New Customers & Increase Sales!")
->setText("Find New Customers & Increase Sales! Start Advertising on Contoso Today.")
->setImages([
(new AssetLink())->setAsset(
(new ImageAsset())
->setId($mediaIds[0]) // Replace with actual media ID
->setName("My LandscapeImageMedia".self::generateRandomAlphaNumeric())
->setSubType("LandscapeImageMedia")
)
]);
self::addAdsRequest($adGroupIds[0], [$responsiveAd]);
}
/**
* @depends testAddCampaign
* @throws Exception
*/
public function testDeleteCampaign(array $campaignIds)
{
self::deleteCampaignsRequest($campaignIds);
}
/**
* @depends testAddMedia
* @throws Exception
*/
public function testDeleteMedia(array $mediaIds)
{
// Can only delete media that is not in use.
print("-----\r\nDeleteMedia:\r\n");
$request = new DeleteMediaRequest([
'AccountId' => self::CUSTOMER_ACCOUNT_ID,
'MediaIds' => $mediaIds
]);
$response = self::$campaignManagementServiceApi->deleteMedia($request);
print("PartialErrors:\r\n");
print_r($response->getPartialErrors());
self::assertEmpty($response->getPartialErrors());
print("Deleted Media ids: ".implode(", ", $mediaIds)."\r\n");
}
}
import base64
import uuid
from auth_helper import *
from openapi_client.models.campaign import *
def main(authorization_data):
try:
ad_final_url = "https://contoso.com"
final_urls = [ad_final_url]
create_responsive_ad_recommendation_request = CreateResponsiveAdRecommendationRequest(
final_urls=final_urls
)
responsive_ad_recommendation_response = campaign_service.create_responsive_ad_recommendation(
create_responsive_ad_recommendation_request=create_responsive_ad_recommendation_request
)
responsive_ad = responsive_ad_recommendation_response.ResponsiveAd
image_suggestions = responsive_ad_recommendation_response.ImageSuggestions
# Select a few images from the suggested list. This example picks first 5 images
selected_images = image_suggestions[:5]
# Add selected images to your media library
save_images(selected_images)
images = [obj.AssetLink for obj in selected_images]
responsive_ad.Images = images
responsive_ad.BusinessName = "Contoso"
responsive_ad.CallToActionLanguage = LanguageName.ENGLISH
# Create an Audience campaign with one ad group and a responsive ad
campaign = Campaign()
campaign.BudgetType = BudgetLimitType.DAILYBUDGETACCELERATED
# CampaignType must be set for Audience campaigns
campaign.CampaignType = CampaignType.AUDIENCE
campaign.DailyBudget = 50.00
campaign.Languages = ['All']
campaign.Name = "Ad recommendation test " + str(uuid.uuid4())
campaign.TimeZone = 'PacificTimeUSCanadaTijuana'
campaigns = [campaign]
add_campaigns_request = AddCampaignsRequest(
account_id=authorization_data.account_id,
campaigns=campaigns,
)
add_campaigns_response = campaign_service.add_campaigns(
add_campaigns_request=add_campaigns_request
)
campaign_ids = add_campaigns_response.CampaignIds
# Add an ad group within the campaign.
ad_group = AdGroup()
ad_group.Name = "Holiday Sale"
ad_group.StartDate = None
end_date = Date()
end_date.Day = 31
end_date.Month = 12
current_time = gmtime()
end_date.Year = current_time.tm_year
ad_group.EndDate = end_date
cpc_bid = Bid()
cpc_bid.Amount = 0.09
ad_group.CpcBid = cpc_bid
# Network cannot be set for ad groups in Audience campaigns
ad_group.Network = None
ad_groups = [ad_group]
add_ad_groups_request = AddAdGroupsRequest(
campaign_id=campaign_ids[0],
ad_groups=ad_groups
)
add_ad_groups_response = campaign_service.add_ad_groups(
add_ad_groups_request=add_ad_groups_request
)
ad_group_ids = add_ad_groups_response.AdGroupIds
# Add a responsive ad within the ad group
ads = [responsive_ad]
add_ads_request = AddAdsRequest(
ad_group_id=ad_group_ids[0],
ads=ads
)
add_ads_response = campaign_service.add_ads(
add_ads_request=add_ads_request
)
ad_ids = add_ads_response.AdIds
# Clean up
media_ids = [obj.Asset.Id for obj in responsive_ad.Images]
delete_media_request = DeleteMediaRequest(
account_id=authorization_data.account_id,
media_ids=media_ids
)
campaign_service.delete_media(
delete_media_request=delete_media_request
)
delete_campaigns_request = DeleteCampaignsRequest(
account_id=authorization_data.account_id,
campaign_ids=campaign_ids
)
campaign_service.delete_campaigns(
delete_campaigns_request=delete_campaigns_request
)
except Exception as ex:
print(f"Error occurred: {str(ex)}")
def download_bytes(url):
"""Download bytes from a URL using streaming."""
response = requests.get(url, stream=True)
response.raise_for_status()
output_stream = bytearray()
for chunk in response.iter_content(chunk_size=4096):
if chunk:
output_stream.extend(chunk)
return bytes(output_stream)
def save_images(image_suggestions):
"""Save image suggestions to the media library."""
medias_to_add = []
for item in image_suggestions:
image = item.Image
image_bytes = download_bytes(item.ImageUrl)
image_base64 = base64.b64encode(image_bytes).decode('utf-8')
image.Data = image_base64
media = image
medias_to_add.append(media)
add_media_request = AddMediaRequest(
account_id=authorization_data.account_id,
media=medias_to_add
)
add_media_response = campaign_service.add_media(
add_media_request=add_media_request
)
media_ids = add_media_response.media_ids
for i in range(len(media_ids)):
image_suggestions[i].AssetLink.Asset.id = str(media_ids[i])
return image_suggestions
if __name__ == '__main__':
print("Loading the web service client...")
authorization_data = AuthorizationData(
account_id=None,
customer_id=None,
developer_token=DEVELOPER_TOKEN,
authentication=None,
)
authenticate(authorization_data)
campaign_service = ServiceClient(
service='CampaignManagementService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
main(authorization_data)