Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird veranschaulicht, wie Responsive Ads für das Microsoft Audience Network mithilfe des Kampagnenverwaltungsdiensts eingerichtet werden.
Tipp
Verwenden Sie die Sprachauswahl im Dokumentationsheader, um C#, Java, Php oder Python auszuwählen.
Informationen zum Abrufen von Zugriffs- und Aktualisierungstoken für Ihren Microsoft Advertising-Benutzer und Zum ersten Dienstaufruf mithilfe der Bing Ads-API finden Sie im Schnellstarthandbuch . Sie sollten den Leitfaden für die ersten Schritte und exemplarische Vorgehensweisen für Ihre bevorzugte Sprache lesen, z. B. C#, Java, Php und Python.
Unterstützende Dateien für C#-, Java-, Php- und Python-Beispiele sind auf GitHub verfügbar. Sie können jedes Repository klonen oder Codeausschnitte nach Bedarf erneut verwenden.
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)