Exemple de code d’annonces réactives
Cet exemple montre comment configurer des annonces réactives pour le réseau d’audience Microsoft à l’aide du service De gestion des campagnes.
Conseil
Utilisez le sélecteur de langage dans l’en-tête de la documentation pour choisir C#, Java, Php ou Python.
Pour obtenir des jetons d’accès et d’actualisation pour votre utilisateur Microsoft Advertising et effectuer votre premier appel de service à l’aide de l’API Bing Ads, consultez le guide de démarrage rapide . Vous pouvez consulter le guide de prise en main et les procédures pas à pas pour votre langage préféré, par exemple, C#, Java, Php et Python.
Les fichiers de prise en charge pour les exemples C#, Java, Php et Python sont disponibles sur GitHub. Vous pouvez cloner chaque dépôt ou réaffecter des extraits de code en fonction des besoins.
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\BingAds\Samples\V13;
// For more information about installing and using the Bing Ads PHP SDK,
// see https://go.microsoft.com/fwlink/?linkid=838593.
require_once __DIR__ . "/../vendor/autoload.php";
include __DIR__ . "/AuthHelper.php";
include __DIR__ . "/CampaignManagementExampleHelper.php";
use SoapVar;
use SoapFault;
use Exception;
//Specify the Microsoft\BingAds\V13\CampaignManagement classes that will be used.
use Microsoft\BingAds\V13\CampaignManagement\Campaign;
use Microsoft\BingAds\V13\CampaignManagement\CampaignType;
use Microsoft\BingAds\V13\CampaignManagement\AdGroup;
use Microsoft\BingAds\V13\CampaignManagement\BiddableAdGroupCriterion;
use Microsoft\BingAds\V13\CampaignManagement\NegativeAdGroupCriterion;
use Microsoft\BingAds\V13\CampaignManagement\AdGroupCriterionType;
use Microsoft\BingAds\V13\CampaignManagement\ProfileCriterion;
use Microsoft\BingAds\V13\CampaignManagement\ProfileType;
use Microsoft\BingAds\V13\CampaignManagement\AgeCriterion;
use Microsoft\BingAds\V13\CampaignManagement\AgeRange;
use Microsoft\BingAds\V13\CampaignManagement\CallToAction;
use Microsoft\BingAds\V13\CampaignManagement\Ad;
use Microsoft\BingAds\V13\CampaignManagement\ResponsiveAd;
use Microsoft\BingAds\V13\CampaignManagement\Bid;
use Microsoft\BingAds\V13\CampaignManagement\BudgetLimitType;
use Microsoft\BingAds\V13\CampaignManagement\Date;
use Microsoft\BingAds\V13\CampaignManagement\Image;
use Microsoft\BingAds\V13\CampaignManagement\AssetLink;
use Microsoft\BingAds\V13\CampaignManagement\ImageAsset;
// Specify the Microsoft\BingAds\Auth classes that will be used.
use Microsoft\BingAds\Auth\ServiceClient;
use Microsoft\BingAds\Auth\ServiceClientType;
// Specify the Microsoft\BingAds\Samples classes that will be used.
use Microsoft\BingAds\Samples\V13\AuthHelper;
use Microsoft\BingAds\Samples\V13\CampaignManagementExampleHelper;
// 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.
$mediaFilePath = "c:\\dev\\media\\";
$responsiveAdMediaFileName = "imageresponsivead1200x628.png";
try
{
// Authenticate user credentials and set the account ID for the sample.
AuthHelper::Authenticate();
// Add an image to your media library.
// The image asset is needed later to create the responsive ad.
$responsiveAdImageMedia = GetImageMedia(
"Image191x100",
$mediaFilePath . $responsiveAdMediaFileName
);
$addMedia = array();
$addMedia[] = $responsiveAdImageMedia;
print("-----\r\nAddMedia:\r\n");
$mediaIds = CampaignManagementExampleHelper::AddMedia(
$GLOBALS['AuthorizationData']->AccountId,
$addMedia
)->MediaIds;
print("MediaIds:\r\n");
CampaignManagementExampleHelper::OutputArrayOfLong($mediaIds);
// Create an Audience campaign with one ad group and a responsive ad.
$campaigns = array();
$campaign = new Campaign();
// CampaignType must be set for Audience campaigns
$campaign->CampaignType = CampaignType::Audience;
$campaign->Name = "Women's Shoes " . $_SERVER['REQUEST_TIME'];
$campaign->BudgetType = BudgetLimitType::DailyBudgetStandard;
$campaign->DailyBudget = 50.00;
// Languages must be set for Audience campaigns
$campaign->Languages = array("All");
$campaign->TimeZone = "PacificTimeUSCanadaTijuana";
$campaigns[] = $campaign;
print("-----\r\nAddCampaigns:\r\n");
$addCampaignsResponse = CampaignManagementExampleHelper::AddCampaigns(
$GLOBALS['AuthorizationData']->AccountId,
$campaigns
);
$campaignIds = $addCampaignsResponse->CampaignIds;
print("CampaignIds:\r\n");
CampaignManagementExampleHelper::OutputArrayOfLong($campaignIds);
print("PartialErrors:\r\n");
CampaignManagementExampleHelper::OutputArrayOfBatchError($addCampaignsResponse->PartialErrors);
// Add an ad group within the campaign.
$adGroups = array();
$adGroup = new AdGroup();
$adGroup->CpcBid = new Bid();
$adGroup->CpcBid->Amount = 0.09;
date_default_timezone_set('UTC');
$endDate = new Date();
$endDate->Day = 31;
$endDate->Month = 12;
$endDate->Year = date("Y");
$adGroup->EndDate = $endDate;
$adGroup->Name = "Women's Red Shoe Sale";
$adGroup->StartDate = null;
$adGroups[] = $adGroup;
print("-----\r\nAddAdGroups:\r\n");
$addAdGroupsResponse = CampaignManagementExampleHelper::AddAdGroups(
$campaignIds->long[0],
$adGroups,
null
);
$adGroupIds = $addAdGroupsResponse->AdGroupIds;
print("AdGroupIds:\r\n");
CampaignManagementExampleHelper::OutputArrayOfLong($adGroupIds);
print("PartialErrors:\r\n");
CampaignManagementExampleHelper::OutputArrayOfBatchError($addAdGroupsResponse->PartialErrors);
// Add a responsive ad within the ad group.
$ads = array();
$responsiveAd = new ResponsiveAd();
$responsiveAd->BusinessName = "Contoso";
$responsiveAd->CallToAction = CallToAction::AddToCart;
$responsiveAd->FinalUrls = array("http://www.contoso.com/womenshoesale");
$responsiveAd->Headline = "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.
$images = array();
$landscapeImageMediaAssetLink = new AssetLink();
$landscapeImageMediaAsset = new ImageAsset();
$landscapeImageMediaAsset->CropHeight = null;
$landscapeImageMediaAsset->CropWidth = null;
$landscapeImageMediaAsset->CropX = null;
$landscapeImageMediaAsset->CropY = null;
$landscapeImageMediaAsset->Id = $mediaIds->long[0];
$landscapeImageMediaAsset->Name="My LandscapeImageMedia";
$landscapeImageMediaAsset->SubType="LandscapeImageMedia";
$landscapeImageMediaAssetLink->Asset = new SoapVar(
$landscapeImageMediaAsset,
SOAP_ENC_OBJECT,
'ImageAsset',
$GLOBALS['CampaignManagementProxy']->GetNamespace()
);
$images[] = $landscapeImageMediaAssetLink;
$responsiveAd->Images = $images;
$responsiveAd->LongHeadline = "Find New Customers & Increase Sales!";
$responsiveAd->Text = "Find New Customers & Increase Sales! Start Advertising on Contoso Today.";
$ads[] = new SoapVar(
$responsiveAd,
SOAP_ENC_OBJECT,
'ResponsiveAd',
$GLOBALS['CampaignManagementProxy']->GetNamespace()
);
print("-----\r\nAddAds:\r\n");
$addAdsResponse = CampaignManagementExampleHelper::AddAds(
$adGroupIds->long[0],
$ads
);
print("AdIds:\r\n");
CampaignManagementExampleHelper::OutputArrayOfLong($addAdsResponse->AdIds);
print("PartialErrors:\r\n");
CampaignManagementExampleHelper::OutputArrayOfBatchError($addAdsResponse->PartialErrors);
// Delete the account's media.
print("-----\r\nDeleteMedia:\r\n");
CampaignManagementExampleHelper::DeleteMedia(
$GLOBALS['AuthorizationData']->AccountId,
$mediaIds
);
foreach ($mediaIds->long as $id)
{
printf("Deleted Media Id %s\r\n", $id);
}
// Delete the campaign and everything it contains e.g., ad groups and ads.
print("-----\r\nDeleteCampaigns:\r\n");
CampaignManagementExampleHelper::DeleteCampaigns(
$GLOBALS['AuthorizationData']->AccountId,
array($campaignIds->long[0])
);
printf("Deleted CampaignId %s\r\n", $campaignIds->long[0]);
}
catch (SoapFault $e)
{
printf("-----\r\nFault Code: %s\r\nFault String: %s\r\nFault Detail: \r\n", $e->faultcode, $e->faultstring);
var_dump($e->detail);
print "-----\r\nLast SOAP request/response:\r\n";
print $GLOBALS['Proxy']->GetWsdl() . "\r\n";
print $GLOBALS['Proxy']->GetService()->__getLastRequest()."\r\n";
print $GLOBALS['Proxy']->GetService()->__getLastResponse()."\r\n";
}
catch (Exception $e)
{
// Ignore fault exceptions that we already caught.
if ($e->getPrevious())
{ ; }
else
{
print $e->getCode()." ".$e->getMessage()."\n\n";
print $e->getTraceAsString()."\n\n";
}
}
function GetImageMedia(
$mediaType,
$imageFileName){
$image = new Image();
$image->Data = GetBase64ImageData($imageFileName);
$image->MediaType = $mediaType;
$image->Type = "Image";
$encodedImage = new SoapVar(
$image,
SOAP_ENC_OBJECT,
'Image',
$GLOBALS['CampaignManagementProxy']->GetNamespace()
);
return $encodedImage;
}
function GetBase64ImageData($imageFileName){
$imageData = file_get_contents($imageFileName);
$base64ImageData = base64_encode($imageData);
return $base64ImageData;
}
import base64
from auth_helper import *
from campaignmanagement_example_helper import *
# You must provide credentials in auth_helper.py.
# 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.
MEDIA_FILE_PATH="c:\dev\media\\"
RESPONSIVE_AD_MEDIA_FILE_NAME="imageresponsivead1200x628.png"
def main(authorization_data):
try:
# Add an image to your media library.
# The image asset is needed later to create the responsive ad.
responsive_ad_image_media=get_image_media(
"Image191x100",
MEDIA_FILE_PATH + RESPONSIVE_AD_MEDIA_FILE_NAME)
add_media={
'Media':
[
responsive_ad_image_media
]
}
output_status_message("-----\nAddMedia:")
media_ids=campaign_service.AddMedia(
AccountId=authorization_data.account_id,
Media=add_media)
output_status_message("MediaIds:")
output_array_of_long(media_ids)
# Create an Audience campaign with one ad group and a responsive ad.
campaigns=campaign_service.factory.create('ArrayOfCampaign')
campaign=set_elements_to_none(campaign_service.factory.create('Campaign'))
# CampaignType must be set for Audience campaigns
campaign.CampaignType=['Audience']
# Languages must be set for Audience campaigns
languages=campaign_service.factory.create('ns3:ArrayOfstring')
languages.string.append('All')
campaign.Languages=languages
campaign.Name="Women's Shoes " + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
campaign.DailyBudget=50
campaign.BudgetType='DailyBudgetStandard'
campaign.TimeZone='PacificTimeUSCanadaTijuana'
campaigns.Campaign.append(campaign)
output_status_message("-----\nAddCampaigns:")
add_campaigns_response=campaign_service.AddCampaigns(
AccountId=authorization_data.account_id,
Campaigns=campaigns
)
campaign_ids={
'long': add_campaigns_response.CampaignIds['long'] if add_campaigns_response.CampaignIds['long'] else None
}
output_status_message("CampaignIds:")
output_array_of_long(campaign_ids)
output_status_message("PartialErrors:")
output_array_of_batcherror(add_campaigns_response.PartialErrors)
# Add an ad group within the campaign.
ad_groups=campaign_service.factory.create('ArrayOfAdGroup')
ad_group=set_elements_to_none(campaign_service.factory.create('AdGroup'))
ad_group.Name="Women's Red Shoe Sale"
end_date=campaign_service.factory.create('Date')
end_date.Day=31
end_date.Month=12
current_time=gmtime()
end_date.Year=current_time.tm_year + 1
ad_group.EndDate=end_date
cpc_bid=campaign_service.factory.create('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.AdGroup.append(ad_group)
output_status_message("-----\nAddAdGroups:")
add_ad_groups_response=campaign_service.AddAdGroups(
CampaignId=campaign_ids['long'][0],
AdGroups=ad_groups,
ReturnInheritedBidStrategyTypes=False
)
ad_group_ids={
'long': add_ad_groups_response.AdGroupIds['long'] if add_ad_groups_response.AdGroupIds['long'] else None
}
output_status_message("AdGroupIds:")
output_array_of_long(ad_group_ids)
output_status_message("PartialErrors:")
output_array_of_batcherror(add_ad_groups_response.PartialErrors)
# Add a responsive ad within the ad group.
ads=campaign_service.factory.create('ArrayOfAd')
responsive_ad=set_elements_to_none(campaign_service.factory.create('ResponsiveAd'))
responsive_ad.BusinessName="Contoso"
responsive_ad.CallToAction='AddToCart'
final_urls=campaign_service.factory.create('ns3:ArrayOfstring')
final_urls.string.append('https://www.contoso.com/womenshoesale')
responsive_ad.FinalUrls=final_urls
responsive_ad.Headline="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.
images=campaign_service.factory.create('ArrayOfAssetLink')
landscape_image_media_asset_link=set_elements_to_none(campaign_service.factory.create('AssetLink'))
landscape_image_media_asset=set_elements_to_none(campaign_service.factory.create('ImageAsset'))
landscape_image_media_asset.CropHeight=None
landscape_image_media_asset.CropWidth=None
landscape_image_media_asset.CropX=None
landscape_image_media_asset.CropY=None
landscape_image_media_asset.Id=media_ids['long'][0]
landscape_image_media_asset.Name="My LandscapeImageMedia"
landscape_image_media_asset.SubType="LandscapeImageMedia"
landscape_image_media_asset_link.Asset=landscape_image_media_asset
images.AssetLink.append(landscape_image_media_asset_link)
responsive_ad.Images=images
responsive_ad.LongHeadline="Find New Customers & Increase Sales!"
responsive_ad.Text="Find New Customers & Increase Sales! Start Advertising on Contoso Today."
responsive_ad.Type='ResponsiveAd'
ads.Ad.append(responsive_ad)
output_status_message("-----\nAddAds:")
add_ads_response=campaign_service.AddAds(
AdGroupId=ad_group_ids['long'][0],
Ads=ads
)
ad_ids={
'long': add_ads_response.AdIds['long'] if add_ads_response.AdIds['long'] else None
}
output_status_message("AdIds:")
output_array_of_long(ad_ids)
output_status_message("PartialErrors:")
output_array_of_batcherror(add_ads_response.PartialErrors)
# Delete the account's media.
output_status_message("-----\nDeleteMedia:")
delete_media_response=campaign_service.DeleteMedia(
authorization_data.account_id,
media_ids)
for id in media_ids['long']:
output_status_message("Deleted Media Id {0}".format(id))
# Delete the campaign and everything it contains e.g., ad groups and ads.
output_status_message("-----\nDeleteCampaigns:")
campaign_service.DeleteCampaigns(
AccountId=authorization_data.account_id,
CampaignIds=campaign_ids
)
output_status_message("Deleted Campaign Id {0}".format(campaign_ids['long'][0]))
except WebFault as ex:
output_webfault_errors(ex)
except Exception as ex:
output_status_message(ex)
def get_image_media(
media_type,
image_file_name):
image=campaign_service.factory.create('Image')
image.Data=get_bmp_base64_string(image_file_name)
image.MediaType=media_type
image.Type="Image"
return image
def get_bmp_base64_string(image_file_name):
image=open(image_file_name, 'rb')
image_bytes=image.read()
base64_string=base64.encodestring(image_bytes)
return base64_string
# Main execution
if __name__ == '__main__':
print("Loading the web service client proxies...")
authorization_data=AuthorizationData(
account_id=None,
customer_id=None,
developer_token=DEVELOPER_TOKEN,
authentication=None,
)
campaign_service=ServiceClient(
service='CampaignManagementService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
authenticate(authorization_data)
main(authorization_data)