Partager via


Exemple de code de listes de remarketing

Cet exemple montre comment associer des listes de remarketing à un nouveau groupe d’annonces.

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.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.BingAds.V13.CampaignManagement;
using Microsoft.BingAds;

namespace BingAdsExamplesLibrary.V13
{
    /// <summary>
    /// How to associate remarketing lists with a new ad group.
    /// </summary>
    public class RemarketingLists : ExampleBase
    {
        public static ServiceClient<ICampaignManagementService> Service;

        public override string Description
        {
            get { return "Remarketing Lists | 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);

                // Before you can track conversions or target audiences using a remarketing list 
                // you need to create a UET tag, and then add the UET tag tracking code to every page of your website.
                // For more information, please see Universal Event Tracking at https://go.microsoft.com/fwlink/?linkid=829965.

                // First you should call the GetUetTagsByIds operation to check whether a tag has already been created. 
                // You can leave the TagIds element null or empty to request all UET tags available for the customer.

                OutputStatusMessage("-----\nGetUetTagsByIds:");
                var uetTags = (await CampaignManagementExampleHelper.GetUetTagsByIdsAsync(
                    tagIds: null))?.UetTags;

                // If you do not already have a UET tag that can be used, or if you need another UET tag, 
                // call the AddUetTags service operation to create a new UET tag. If the call is successful, 
                // the tracking script that you should add to your website is included in a corresponding 
                // UetTag within the response message. 

                if (uetTags == null || uetTags.Count < 1)
                {
                    var uetTag = new UetTag
                    {
                        Description = "My First Uet Tag",
                        Name = "New Uet Tag",
                    };
                    OutputStatusMessage("-----\nAddUetTags:");
                    uetTags = (await CampaignManagementExampleHelper.AddUetTagsAsync(
                        uetTags: new[] { uetTag })).UetTags;
                }

                if (uetTags == null || uetTags.Count < 1)
                {
                    OutputStatusMessage(
                        string.Format("You do not have any UET tags registered for CustomerId {0}.", authorizationData.CustomerId)
                    );
                    return;
                }

                OutputStatusMessage("List of all UET Tags:");
                CampaignManagementExampleHelper.OutputArrayOfUetTag(uetTags);

                // After you retreive the tracking script from the AddUetTags or GetUetTagsByIds operation, 
                // the next step is to add the UET tag tracking code to your website. 

                // We will use the same UET tag for the remainder of this example.
                var tagId = uetTags[0].Id;
                
                // Add remarketing lists that depend on the UET Tag Id retreived above.

                var addAudiences = new[] {
                    new RemarketingList
                    {
                        Description = "New list with CustomEventsRule",
                        MembershipDuration = 30,
                        Name = "Remarketing List with CustomEventsRule " + DateTime.UtcNow,
                        ParentId = authorizationData.AccountId,
                        // The rule definition is translated to the following logical expression: 
                        // (Category Equals video) and (Action Equals play) and (Label Equals trailer) 
                        // and (Value Equals 5)
                        Rule = new CustomEventsRule
                        {
                            // The type of user interaction you want to track.
                            Action = "play",
                            ActionOperator = StringOperator.Equals,
                            // The category of event you want to track. 
                            Category = "video",
                            CategoryOperator = StringOperator.Equals,
                            // The name of the element that caused the action.
                            Label = "trailer",
                            LabelOperator = StringOperator.Equals,
                            // A numerical value associated with that event. 
                            // Could be length of the video played etc.
                            Value = 5.00m,
                            ValueOperator = NumberOperator.Equals,
                        },
                        Scope = EntityScope.Account,
                        TagId = tagId
                    },
                    new RemarketingList
                    {
                        Description = "New list with PageVisitorsRule",
                        MembershipDuration = 30,
                        Name = "Remarketing List with PageVisitorsRule " + DateTime.UtcNow,
                        ParentId = authorizationData.AccountId,
                        // The rule definition is translated to the following logical expression: 
                        // ((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
                        // or ((ReferrerUrl Equals Z))
                        Rule = new PageVisitorsRule
                        {
                            RuleItemGroups = new []
                            {
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.Contains,
                                            Value = "X"
                                        },
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.DoesNotContain,
                                            Value = "Z"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.DoesNotBeginWith,
                                            Value = "Y"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.Equals,
                                            Value = "Z"
                                        },
                                    }
                                },
                            },
                        },
                        Scope = EntityScope.Account,
                        TagId = tagId
                    },
                    new RemarketingList
                    {
                        Description = "New list with PageVisitorsWhoDidNotVisitAnotherPageRule",
                        MembershipDuration = 30,
                        Name = "Remarketing List with PageVisitorsWhoDidNotVisitAnotherPageRule " + DateTime.UtcNow,
                        ParentId = authorizationData.AccountId,
                        // The rule definition is translated to the following logical expression: 
                        // (((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
                        // or ((ReferrerUrl Equals Z))) 
                        // and not (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
                        Rule = new PageVisitorsWhoDidNotVisitAnotherPageRule
                        {
                            ExcludeRuleItemGroups = new []
                            {
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.BeginsWith,
                                            Value = "A"
                                        },
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.BeginsWith,
                                            Value = "B"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.Contains,
                                            Value = "C"
                                        },
                                    }
                                },
                            },
                            IncludeRuleItemGroups = new []
                            {
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.Contains,
                                            Value = "X"
                                        },
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.DoesNotContain,
                                            Value = "Z"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.DoesNotBeginWith,
                                            Value = "Y"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.Equals,
                                            Value = "Z"
                                        },
                                    }
                                },
                            },
                        },
                        Scope = EntityScope.Account,
                        TagId = tagId
                    },
                    new RemarketingList
                    {
                        Description = "New list with PageVisitorsWhoVisitedAnotherPageRule",
                        MembershipDuration = 30,
                        Name = "Remarketing List with PageVisitorsWhoVisitedAnotherPageRule " + DateTime.UtcNow,
                        ParentId = authorizationData.AccountId,
                        // The rule definition is translated to the following logical expression: 
                        // (((Url Contains X) and (ReferrerUrl NotEquals Z)) or ((Url DoesNotBeginWith Y)) or 
                        // ((ReferrerUrl Equals Z))) 
                        // and (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
                        Rule = new PageVisitorsWhoVisitedAnotherPageRule
                        {
                            AnotherRuleItemGroups = new []
                            {
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.BeginsWith,
                                            Value = "A"
                                        },
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.BeginsWith,
                                            Value = "B"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.Contains,
                                            Value = "C"
                                        },
                                    }
                                },
                            },
                            RuleItemGroups = new []
                            {
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.Contains,
                                            Value = "X"
                                        },
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.DoesNotContain,
                                            Value = "Z"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "Url",
                                            Operator = StringOperator.DoesNotBeginWith,
                                            Value = "Y"
                                        },
                                    }
                                },
                                new RuleItemGroup
                                {
                                    Items = new []
                                    {
                                        new StringRuleItem
                                        {
                                            Operand = "ReferrerUrl",
                                            Operator = StringOperator.Equals,
                                            Value = "Z"
                                        },
                                    }
                                },
                            },
                        },
                        Scope = EntityScope.Account,
                        TagId = tagId
                    },
                };

                // RemarketingList extends the Audience base class. 
                // We manage remarketing lists with Audience operations.

                OutputStatusMessage("-----\nAddAudiences:");
                var addAudiencesResponse = await CampaignManagementExampleHelper.AddAudiencesAsync(
                    audiences: addAudiences);
                long?[] audienceIds = addAudiencesResponse.AudienceIds.ToArray();
                BatchError[] audienceErrors = addAudiencesResponse.PartialErrors.ToArray();
                OutputStatusMessage("AudienceIds:");
                CampaignManagementExampleHelper.OutputArrayOfLong(audienceIds);
                OutputStatusMessage("PartialErrors:");
                CampaignManagementExampleHelper.OutputArrayOfBatchError(audienceErrors);
                
                // Add an ad group in a campaign. The ad group will later be associated with remarketing lists. 

                var campaigns = new[]{
                    new Campaign
                    {
                        BudgetType = BudgetLimitType.DailyBudgetStandard,
                        DailyBudget = 50,
                        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);
                
                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 },

                        // Applicable for all remarketing lists that are associated with this ad group. TargetAndBid indicates 
                        // that you want to show ads only to people included in the remarketing list, with the option to change
                        // the bid amount. Ads in this ad group will only show to people included in the remarketing list.
                        Settings = new[]
                        {
                            new TargetSetting
                            {
                                Details = new []
                                {
                                    new TargetSettingDetail
                                    {
                                        CriterionTypeGroup = CriterionTypeGroup.Audience,
                                        TargetAndBid = true
                                    }
                                }
                            }
                        },
                    }
                };
                
                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);

                // Associate all of the remarketing lists created above with the new ad group.

                var adGroupRemarketingListAssociations = new List<AdGroupCriterion>();                               
                
                foreach (var audienceId in audienceIds)
                {
                    if(audienceId != null)
                    {
                        var biddableAdGroupCriterion = new BiddableAdGroupCriterion
                        {
                            AdGroupId = (long)adGroupIds[0],
                            Criterion = new AudienceCriterion
                            {
                                AudienceId = audienceId,
                                AudienceType = AudienceType.RemarketingList,
                            },
                            CriterionBid = new BidMultiplier
                            {
                                Multiplier = 20.00,
                            },
                            Status = AdGroupCriterionStatus.Active,
                        };

                        adGroupRemarketingListAssociations.Add(biddableAdGroupCriterion);
                    }
                }
                
                OutputStatusMessage("-----\nAddAdGroupCriterions:");
                CampaignManagementExampleHelper.OutputArrayOfAdGroupCriterion(adGroupRemarketingListAssociations);
                AddAdGroupCriterionsResponse addAdGroupCriterionsResponse = await CampaignManagementExampleHelper.AddAdGroupCriterionsAsync(
                        adGroupCriterions: adGroupRemarketingListAssociations,
                        criterionType: AdGroupCriterionType.Audience);
                long?[] nullableAdGroupCriterionIds = addAdGroupCriterionsResponse.AdGroupCriterionIds.ToArray();
                OutputStatusMessage("AdGroupCriterionIds:");
                CampaignManagementExampleHelper.OutputArrayOfLong(nullableAdGroupCriterionIds);
                BatchErrorCollection[] adGroupCriterionErrors =
                    addAdGroupCriterionsResponse.NestedPartialErrors.ToArray();
                OutputStatusMessage("NestedPartialErrors:");
                CampaignManagementExampleHelper.OutputArrayOfBatchErrorCollection(adGroupCriterionErrors);
                
                // 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]));

                // Delete the remarketing lists.

                OutputStatusMessage("-----\nDeleteAudiences:");
                await CampaignManagementExampleHelper.DeleteAudiencesAsync(
                    audienceIds: new[] { (long)audienceIds[0] });
                OutputStatusMessage(string.Format("Deleted Audience Id {0}", audienceIds[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);
            }
        }

    }
}
package com.microsoft.bingads.examples.v13;

import java.util.ArrayList;
import java.util.Calendar;

import com.microsoft.bingads.*;
import com.microsoft.bingads.v13.campaignmanagement.*;
import java.math.BigDecimal;

// How to associate remarketing lists with a new ad group.

public class RemarketingLists extends ExampleBase {
    
    public static void main(java.lang.String[] args) {
     
        try
        {
            authorizationData = getAuthorizationData();
             
            CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
                        authorizationData, 
                        API_ENVIRONMENT,
                        ICampaignManagementService.class);

            // Before you can track conversions or target audiences using a remarketing list 
            // you need to create a UET tag, and then add the UET tag tracking code to every page of your website.
            // For more information, please see Universal Event Tracking at https://go.microsoft.com/fwlink/?linkid=829965.

            // First you should call the GetUetTagsByIds operation to check whether a tag has already been created. 
            // You can leave the TagIds element null or empty to request all UET tags available for the customer.

            outputStatusMessage("-----\nGetUetTagsByIds:");
            GetUetTagsByIdsResponse getUetTagsByIdsResponse = CampaignManagementExampleHelper.getUetTagsByIds(
                    null);
            ArrayOfUetTag uetTags = getUetTagsByIdsResponse.getUetTags();

            // If you do not already have a UET tag that can be used, or if you need another UET tag, 
            // call the AddUetTags service operation to create a new UET tag. If the call is successful, 
            // the tracking script that you should add to your website is included in a corresponding 
            // UetTag within the response message. 

            if (uetTags == null || uetTags.getUetTags().size() < 1)
            {
                UetTag uetTag = new UetTag();
                uetTag.setDescription("My First Uet Tag");
                uetTag.setName("New Uet Tag");
                uetTags.getUetTags().add(uetTag);
                outputStatusMessage("-----\nAddUetTags:");
                uetTags = CampaignManagementExampleHelper.addUetTags(
                    uetTags).getUetTags();
            }

            if (uetTags == null || uetTags.getUetTags().size() < 1)
            {
                outputStatusMessage(
                    String.format("You do not have any UET tags registered for CustomerId {0}.", authorizationData.getCustomerId())
                );
                return;
            }

            outputStatusMessage("List of all UET Tags:");
            CampaignManagementExampleHelper.outputArrayOfUetTag(uetTags);

            // After you retreive the tracking script from the AddUetTags or GetUetTagsByIds operation, 
            // the next step is to add the UET tag tracking code to your website. 

            // We will use the same UET tag for the remainder of this example.
            java.lang.Long tagId = uetTags.getUetTags().get(0).getId();

            // Add remarketing lists that depend on the UET Tag Id retreived above.

            ArrayOfAudience addAudiences = new ArrayOfAudience();
            RemarketingList customEventsList = new RemarketingList();
            customEventsList.setDescription("New list with CustomEventsRule");
            customEventsList.setMembershipDuration(30);
            customEventsList.setName("Remarketing List with CustomEventsRule " + System.currentTimeMillis());
            customEventsList.setParentId(authorizationData.getAccountId());
            // The rule definition is translated to the following logical expression: 
            // (Category Equals video) and (Action Equals play) and (Label Equals trailer) 
            // and (Value Equals 5)
            CustomEventsRule customEventsRule = new CustomEventsRule();
            // The type of user interaction you want to track.
            customEventsRule.setAction("play");
            customEventsRule.setActionOperator(StringOperator.EQUALS);
            // The category of event you want to track. 
            customEventsRule.setCategory("video");
            customEventsRule.setCategoryOperator(StringOperator.EQUALS);
            // The name of the element that caused the action.
            customEventsRule.setLabel("trailer");
            customEventsRule.setLabelOperator(StringOperator.EQUALS);
            // A numerical value associated with that event. 
            // Could be length of the video played etc.
            customEventsRule.setValue(new BigDecimal(5.00));
            customEventsRule.setValueOperator(NumberOperator.EQUALS);
            customEventsList.setRule(customEventsRule);
            customEventsList.setScope(EntityScope.ACCOUNT);
            customEventsList.setTagId(tagId);            
            addAudiences.getAudiences().add(customEventsList);
                        
            RemarketingList pageVisitorsList = new RemarketingList();  
            pageVisitorsList.setDescription("New list with PageVisitorsRule");
            pageVisitorsList.setMembershipDuration(30);
            pageVisitorsList.setName("Remarketing List with PageVisitorsRule " + System.currentTimeMillis());
            pageVisitorsList.setParentId(authorizationData.getAccountId());
            // The rule definition is translated to the following logical expression: 
            // ((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
            // or ((ReferrerUrl Equals Z))
            PageVisitorsRule pageVisitorsRule = new PageVisitorsRule();
            ArrayOfRuleItemGroup pageVisitorsRuleItemGroups = new ArrayOfRuleItemGroup();
            RuleItemGroup pageVisitorsRuleItemGroupA = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsRuleItemsA = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsRuleItemA = new StringRuleItem();
            pageVisitorsRuleItemA.setOperand("Url");
            pageVisitorsRuleItemA.setOperator(StringOperator.CONTAINS);
            pageVisitorsRuleItemA.setValue("X");
            pageVisitorsRuleItemsA.getRuleItems().add(pageVisitorsRuleItemA);   
            StringRuleItem pageVisitorsRuleItemAA = new StringRuleItem();
            pageVisitorsRuleItemAA.setOperand("ReferrerUrl");
            pageVisitorsRuleItemAA.setOperator(StringOperator.DOES_NOT_CONTAIN);
            pageVisitorsRuleItemAA.setValue("Z");
            pageVisitorsRuleItemsA.getRuleItems().add(pageVisitorsRuleItemAA);    
            pageVisitorsRuleItemGroupA.setItems(pageVisitorsRuleItemsA);
            pageVisitorsRuleItemGroups.getRuleItemGroups().add(pageVisitorsRuleItemGroupA);
            RuleItemGroup pageVisitorsRuleItemGroupB = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsRuleItemsB = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsRuleItemB = new StringRuleItem();
            pageVisitorsRuleItemB.setOperand("Url");
            pageVisitorsRuleItemB.setOperator(StringOperator.DOES_NOT_BEGIN_WITH);
            pageVisitorsRuleItemB.setValue("Y");
            pageVisitorsRuleItemsB.getRuleItems().add(pageVisitorsRuleItemB);            
            pageVisitorsRuleItemGroupB.setItems(pageVisitorsRuleItemsB);
            pageVisitorsRuleItemGroups.getRuleItemGroups().add(pageVisitorsRuleItemGroupB);
            RuleItemGroup pageVisitorsRuleItemGroupC = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsRuleItemsC = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsRuleItemC = new StringRuleItem();
            pageVisitorsRuleItemC.setOperand("ReferrerUrl");
            pageVisitorsRuleItemC.setOperator(StringOperator.EQUALS);
            pageVisitorsRuleItemC.setValue("Z");
            pageVisitorsRuleItemsC.getRuleItems().add(pageVisitorsRuleItemC);            
            pageVisitorsRuleItemGroupC.setItems(pageVisitorsRuleItemsC);
            pageVisitorsRuleItemGroups.getRuleItemGroups().add(pageVisitorsRuleItemGroupC);
            pageVisitorsRule.setRuleItemGroups(pageVisitorsRuleItemGroups);
            pageVisitorsList.setRule(pageVisitorsRule);
            pageVisitorsList.setScope(EntityScope.ACCOUNT);
            pageVisitorsList.setTagId(tagId); 
            addAudiences.getAudiences().add(pageVisitorsList);
            
            RemarketingList pageVisitorsWhoDidNotVisitAnotherPageList = new RemarketingList();        
            pageVisitorsWhoDidNotVisitAnotherPageList.setDescription("New list with PageVisitorsWhoDidNotVisitAnotherPageRule");
            pageVisitorsWhoDidNotVisitAnotherPageList.setMembershipDuration(30);
            pageVisitorsWhoDidNotVisitAnotherPageList.setName("Remarketing List with PageVisitorsWhoDidNotVisitAnotherPageRule " + System.currentTimeMillis());
            pageVisitorsWhoDidNotVisitAnotherPageList.setParentId(authorizationData.getAccountId());
            // The rule definition is translated to the following logical expression: 
            // (((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
            // or ((ReferrerUrl Equals Z))) 
            // and not (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
            PageVisitorsWhoDidNotVisitAnotherPageRule pageVisitorsWhoDidNotVisitAnotherPageRule = new PageVisitorsWhoDidNotVisitAnotherPageRule();            
            ArrayOfRuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups = new ArrayOfRuleItemGroup();
            RuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA.setOperand("Url");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA.setOperator(StringOperator.BEGINS_WITH);
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA.setValue("A");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA);   
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA.setOperand("ReferrerUrl");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA.setOperator(StringOperator.BEGINS_WITH);
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA.setValue("B");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA);    
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA.setItems(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA);
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA);
            RuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB.setOperand("Url");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB.setOperator(StringOperator.CONTAINS);
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB.setValue("C");
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB);            
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB.setItems(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB);
            pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB);
            pageVisitorsWhoDidNotVisitAnotherPageRule.setExcludeRuleItemGroups(pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups);            
            ArrayOfRuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups = new ArrayOfRuleItemGroup();
            RuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA.setOperand("Url");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA.setOperator(StringOperator.CONTAINS);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA.setValue("X");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA);   
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA.setOperand("ReferrerUrl");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA.setOperator(StringOperator.DOES_NOT_CONTAIN);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA.setValue("Z");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA);    
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA.setItems(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA);
            RuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB.setOperand("Url");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB.setOperator(StringOperator.DOES_NOT_BEGIN_WITH);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB.setValue("Y");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB);            
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB.setItems(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB);
            RuleItemGroup pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC = new StringRuleItem();
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC.setOperand("ReferrerUrl");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC.setOperator(StringOperator.EQUALS);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC.setValue("Z");
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC.getRuleItems().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC);            
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC.setItems(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC);
            pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC);
            pageVisitorsWhoDidNotVisitAnotherPageRule.setIncludeRuleItemGroups(pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups);
            pageVisitorsWhoDidNotVisitAnotherPageList.setRule(pageVisitorsWhoDidNotVisitAnotherPageRule);
            pageVisitorsWhoDidNotVisitAnotherPageList.setScope(EntityScope.ACCOUNT);
            pageVisitorsWhoDidNotVisitAnotherPageList.setTagId(tagId);   
            addAudiences.getAudiences().add(pageVisitorsWhoDidNotVisitAnotherPageList);

            RemarketingList pageVisitorsWhoVisitedAnotherPageList = new RemarketingList();  
            pageVisitorsWhoVisitedAnotherPageList.setDescription("New list with PageVisitorsWhoVisitedAnotherPageRule");
            pageVisitorsWhoVisitedAnotherPageList.setMembershipDuration(30);
            pageVisitorsWhoVisitedAnotherPageList.setName("Remarketing List with PageVisitorsWhoVisitedAnotherPageRule " + System.currentTimeMillis());
            pageVisitorsWhoVisitedAnotherPageList.setParentId(authorizationData.getAccountId());
            // The rule definition is translated to the following logical expression: 
            // (((Url Contains X) and (ReferrerUrl NotEquals Z)) or ((Url DoesNotBeginWith Y)) or 
            // ((ReferrerUrl Equals Z))) 
            // and (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
            PageVisitorsWhoVisitedAnotherPageRule pageVisitorsWhoVisitedAnotherPageRule = new PageVisitorsWhoVisitedAnotherPageRule();            
            ArrayOfRuleItemGroup pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups = new ArrayOfRuleItemGroup();
            RuleItemGroup pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA.setOperand("Url");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA.setOperator(StringOperator.BEGINS_WITH);
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA.setValue("A");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA);   
            StringRuleItem pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA.setOperand("ReferrerUrl");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA.setOperator(StringOperator.BEGINS_WITH);
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA.setValue("B");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA);    
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA.setItems(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA);
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA);
            RuleItemGroup pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB.setOperand("Url");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB.setOperator(StringOperator.CONTAINS);
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB.setValue("C");
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB);            
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB.setItems(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB);
            pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB);
            pageVisitorsWhoVisitedAnotherPageRule.setAnotherRuleItemGroups(pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups);            
            ArrayOfRuleItemGroup pageVisitorsWhoVisitedAnotherPageRuleItemGroups = new ArrayOfRuleItemGroup();
            RuleItemGroup pageVisitorsWhoVisitedAnotherPageRuleItemGroupA = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemsA = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemA = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageRuleItemA.setOperand("Url");
            pageVisitorsWhoVisitedAnotherPageRuleItemA.setOperator(StringOperator.CONTAINS);
            pageVisitorsWhoVisitedAnotherPageRuleItemA.setValue("X");
            pageVisitorsWhoVisitedAnotherPageRuleItemsA.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageRuleItemA);   
            StringRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemAA = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageRuleItemAA.setOperand("ReferrerUrl");
            pageVisitorsWhoVisitedAnotherPageRuleItemAA.setOperator(StringOperator.DOES_NOT_CONTAIN);
            pageVisitorsWhoVisitedAnotherPageRuleItemAA.setValue("Z");
            pageVisitorsWhoVisitedAnotherPageRuleItemsA.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageRuleItemAA);    
            pageVisitorsWhoVisitedAnotherPageRuleItemGroupA.setItems(pageVisitorsWhoVisitedAnotherPageRuleItemsA);
            pageVisitorsWhoVisitedAnotherPageRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoVisitedAnotherPageRuleItemGroupA);
            RuleItemGroup pageVisitorsWhoVisitedAnotherPageRuleItemGroupB = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemsB = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemB = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageRuleItemB.setOperand("Url");
            pageVisitorsWhoVisitedAnotherPageRuleItemB.setOperator(StringOperator.DOES_NOT_BEGIN_WITH);
            pageVisitorsWhoVisitedAnotherPageRuleItemB.setValue("Y");
            pageVisitorsWhoVisitedAnotherPageRuleItemsB.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageRuleItemB);            
            pageVisitorsWhoVisitedAnotherPageRuleItemGroupB.setItems(pageVisitorsWhoVisitedAnotherPageRuleItemsB);
            pageVisitorsWhoVisitedAnotherPageRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoVisitedAnotherPageRuleItemGroupB);
            RuleItemGroup pageVisitorsWhoVisitedAnotherPageRuleItemGroupC = new RuleItemGroup();
            ArrayOfRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemsC = new ArrayOfRuleItem();
            StringRuleItem pageVisitorsWhoVisitedAnotherPageRuleItemC = new StringRuleItem();
            pageVisitorsWhoVisitedAnotherPageRuleItemC.setOperand("ReferrerUrl");
            pageVisitorsWhoVisitedAnotherPageRuleItemC.setOperator(StringOperator.EQUALS);
            pageVisitorsWhoVisitedAnotherPageRuleItemC.setValue("Z");
            pageVisitorsWhoVisitedAnotherPageRuleItemsC.getRuleItems().add(pageVisitorsWhoVisitedAnotherPageRuleItemC);            
            pageVisitorsWhoVisitedAnotherPageRuleItemGroupC.setItems(pageVisitorsWhoVisitedAnotherPageRuleItemsC);
            pageVisitorsWhoVisitedAnotherPageRuleItemGroups.getRuleItemGroups().add(pageVisitorsWhoVisitedAnotherPageRuleItemGroupC);
            pageVisitorsWhoVisitedAnotherPageRule.setRuleItemGroups(pageVisitorsWhoVisitedAnotherPageRuleItemGroups);  
            pageVisitorsWhoVisitedAnotherPageList.setRule(pageVisitorsWhoVisitedAnotherPageRule);
            pageVisitorsWhoVisitedAnotherPageList.setScope(EntityScope.ACCOUNT);
            pageVisitorsWhoVisitedAnotherPageList.setTagId(tagId);   
            addAudiences.getAudiences().add(pageVisitorsWhoVisitedAnotherPageList);    

            // RemarketingList extends the Audience base class. 
            // We manage remarketing lists with Audience operations.

            outputStatusMessage("-----\nAddAudiences:");
            AddAudiencesResponse addAudiencesResponse = CampaignManagementExampleHelper.addAudiences(
                addAudiences);
            ArrayOfNullableOflong audienceIds = addAudiencesResponse.getAudienceIds();
            ArrayOfBatchError audienceErrors = addAudiencesResponse.getPartialErrors();
            outputStatusMessage("AudienceIds:");
            CampaignManagementExampleHelper.outputArrayOfNullableOflong(audienceIds);
            outputStatusMessage("PartialErrors:");
            CampaignManagementExampleHelper.outputArrayOfBatchError(audienceErrors);
                            
            // Add an ad group in a campaign. The ad group will later be associated with remarketing lists.

            ArrayOfCampaign campaigns = new ArrayOfCampaign();
            Campaign campaign = new Campaign();
            campaign.setBudgetType(BudgetLimitType.DAILY_BUDGET_STANDARD);
            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);
            
            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);
            // Applicable for all remarketing lists that are associated with this ad group. TargetAndBid indicates 
            // that you want to show ads only to people included in the remarketing list, with the option to change
            // the bid amount. Ads in this ad group will only show to people included in the remarketing list.
            ArrayOfSetting settings = new ArrayOfSetting();
            TargetSetting targetSetting = new TargetSetting();
            ArrayOfTargetSettingDetail targetSettingDetails = new ArrayOfTargetSettingDetail();
            TargetSettingDetail adGroupAudienceTargetSettingDetail = new TargetSettingDetail();
            adGroupAudienceTargetSettingDetail.setCriterionTypeGroup(CriterionTypeGroup.AUDIENCE);
            adGroupAudienceTargetSettingDetail.setTargetAndBid(Boolean.TRUE);
            targetSettingDetails.getTargetSettingDetails().add(adGroupAudienceTargetSettingDetail);
            targetSetting.setDetails(targetSettingDetails);
            settings.getSettings().add(targetSetting);
            adGroup.setSettings(settings);
            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); 
            
            // Associate all of the remarketing lists created above with the new ad group.

            ArrayOfAdGroupCriterion adGroupRemarketingListAssociations = new ArrayOfAdGroupCriterion();
            ArrayList<AudienceType> audienceTypes = new ArrayList<AudienceType>();
            audienceTypes.add(AudienceType.REMARKETING_LIST);
            
            for (java.lang.Long audienceId : audienceIds.getLongs())
            {
                if (audienceId != null)
                {
                    BiddableAdGroupCriterion biddableAdGroupCriterion = new BiddableAdGroupCriterion();
                    biddableAdGroupCriterion.setAdGroupId(adGroupIds.getLongs().get(0));
                    AudienceCriterion audienceCriterion = new AudienceCriterion();
                    audienceCriterion.setAudienceId(audienceId);
                    audienceCriterion.setAudienceType(audienceTypes);
                    biddableAdGroupCriterion.setCriterion(audienceCriterion);
                    BidMultiplier bidMultiplier = new BidMultiplier();
                    bidMultiplier.setMultiplier(20D);
                    biddableAdGroupCriterion.setCriterionBid(bidMultiplier);
                    biddableAdGroupCriterion.setStatus(AdGroupCriterionStatus.ACTIVE);                                        
                    adGroupRemarketingListAssociations.getAdGroupCriterions().add(biddableAdGroupCriterion);
                }
            }
            
            ArrayList<AdGroupCriterionType> criterionType = new ArrayList<AdGroupCriterionType>();
            criterionType.add(AdGroupCriterionType.AUDIENCE);
            
            ArrayList<AdGroupCriterionType> getCriterionType = new ArrayList<AdGroupCriterionType>();
            getCriterionType.add(AdGroupCriterionType.REMARKETING_LIST);

            outputStatusMessage("-----\nAddAdGroupCriterions:");
            AddAdGroupCriterionsResponse addAdGroupCriterionsResponse = CampaignManagementExampleHelper.addAdGroupCriterions(
                    adGroupRemarketingListAssociations,
                    criterionType);
            outputStatusMessage("AdGroupCriterionIds:");
            CampaignManagementExampleHelper.outputArrayOfNullableOflong(addAdGroupCriterionsResponse.getAdGroupCriterionIds());
            ArrayOfBatchErrorCollection adGroupCriterionErrors = addAdGroupCriterionsResponse.getNestedPartialErrors();
            outputStatusMessage("NestedPartialErrors:");
            CampaignManagementExampleHelper.outputArrayOfBatchErrorCollection(adGroupCriterionErrors);

            // 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 %s", deleteCampaignIds.getLongs().get(0))); 

            // Delete the remarketing lists.

            outputStatusMessage("-----\nDeleteAudiences:");
            ArrayOflong deleteAudienceIds = new ArrayOflong();
            deleteAudienceIds.getLongs().add(audienceIds.getLongs().get(0));
            CampaignManagementExampleHelper.deleteAudiences(
                deleteAudienceIds);
            outputStatusMessage(String.format("Deleted Audience Id %s", deleteAudienceIds.getLongs().get(0)));
        } 
        catch (Exception ex) {
            String faultXml = ExampleExceptionHelper.getBingAdsExceptionFaultXml(ex, System.out);
            outputStatusMessage(faultXml);
            String message = ExampleExceptionHelper.handleBingAdsSDKException(ex, System.out);
            outputStatusMessage(message);
        }
    }
 }
<?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\AdGroup;
use Microsoft\BingAds\V13\CampaignManagement\BiddableAdGroupCriterion;
use Microsoft\BingAds\V13\CampaignManagement\AdGroupCriterion;
use Microsoft\BingAds\V13\CampaignManagement\AdGroupCriterionType;
use Microsoft\BingAds\V13\CampaignManagement\AdGroupCriterionStatus;
use Microsoft\BingAds\V13\CampaignManagement\Audience;
use Microsoft\BingAds\V13\CampaignManagement\AudienceCriterion;
use Microsoft\BingAds\V13\CampaignManagement\BidMultiplier;
use Microsoft\BingAds\V13\CampaignManagement\AudienceType;
use Microsoft\BingAds\V13\CampaignManagement\RemarketingList;
use Microsoft\BingAds\V13\CampaignManagement\CustomEventsRule;
use Microsoft\BingAds\V13\CampaignManagement\PageVisitorsRule;
use Microsoft\BingAds\V13\CampaignManagement\PageVisitorsWhoDidNotVisitAnotherPageRule;
use Microsoft\BingAds\V13\CampaignManagement\PageVisitorsWhoVisitedAnotherPageRule;
use Microsoft\BingAds\V13\CampaignManagement\RuleItemGroup;
use Microsoft\BingAds\V13\CampaignManagement\StringRuleItem;
use Microsoft\BingAds\V13\CampaignManagement\EntityScope;
use Microsoft\BingAds\V13\CampaignManagement\BudgetLimitType;
use Microsoft\BingAds\V13\CampaignManagement\Bid;
use Microsoft\BingAds\V13\CampaignManagement\Date;
use Microsoft\BingAds\V13\CampaignManagement\Setting;
use Microsoft\BingAds\V13\CampaignManagement\TargetSettingDetail;
use Microsoft\BingAds\V13\CampaignManagement\TargetSetting;
use Microsoft\BingAds\V13\CampaignManagement\CriterionTypeGroup;

// Specify the Microsoft\BingAds\V13\CustomerManagement classes that will be used.
use Microsoft\BingAds\V13\CustomerManagement\Account;
use Microsoft\BingAds\V13\CustomerManagement\User;

// 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;

try
{
    // Authenticate user credentials and set the account ID for the sample.  
    AuthHelper::Authenticate();

    // Before you can track conversions or target audiences using a remarketing list 
    // you need to create a UET tag, and then add the UET tag tracking code to every page of your website.
    // For more information, please see Universal Event Tracking at https://go.microsoft.com/fwlink/?linkid=829965.

    // First you should call the GetUetTagsByIds operation to check whether a tag has already been created. 
    // You can leave the TagIds element null or empty to request all UET tags available for the customer.

    print("-----\r\nGetUetTagsByIds:\r\n");
    $uetTags = CampaignManagementExampleHelper::GetUetTagsByIds(
        null
    )->UetTags;

    // If you do not already have a UET tag that can be used, or if you need another UET tag, 
    // call the AddUetTags service operation to create a new UET tag. If the call is successful, 
    // the tracking script that you should add to your website is included in a corresponding 
    // UetTag within the response message. 

    if (count($uetTags) < 1)
    {
        $uetTag = new UetTag();
        $uetTag->Description = "My First Uet Tag";
        $uetTag->Name = "New Uet Tag";
        print("-----\r\nAddUetTags:\r\n");
        $uetTags = CampaignManagementExampleHelper::AddUetTags(
            array($uetTag)
        )->UetTags;
    }

    if (count($uetTags) < 1)
    {
        printf(
            "You do not have any UET tags registered for CustomerId {0}.", 
            $GLOBALS['AuthorizationData']->CustomerId
        );
        return;
    }

    print("List of all UET Tags:\r\n");
    CampaignManagementExampleHelper::OutputArrayOfUetTag($uetTags);

    // After you retreive the tracking script from the AddUetTags or GetUetTagsByIds operation, 
    // the next step is to add the UET tag tracking code to your website. 

    // We will use the same UET tag for the remainder of this example.
    $tagId = $uetTags->UetTag[0]->Id;
    
    // Add remarketing lists that depend on the UET Tag Id retreived above.

    $audiences = array();
    $customEventsList = new RemarketingList();
    $customEventsList->Description="New list with CustomEventsRule";
    $customEventsList->MembershipDuration=30;
    $customEventsList->Name="Remarketing List with CustomEventsRule " . $_SERVER['REQUEST_TIME'];
    $customEventsList->ParentId = $GLOBALS['AuthorizationData']->AccountId;
    // The rule definition is translated to the following logical expression: 
    // (Category Equals video) and (Action Equals play) and (Label Equals trailer) 
    // and (Value Equals 5)
    $customEventsRule = new CustomEventsRule();
    // The type of user interaction you want to track.
    $customEventsRule->Action="play";
    $customEventsRule->ActionOperator='Equals';
    // The category of event you want to track. 
    $customEventsRule->Category="video";
    $customEventsRule->CategoryOperator='Equals';
    // The name of the element that caused the action.
    $customEventsRule->Label="trailer";
    $customEventsRule->LabelOperator='Equals';
    // A numerical value associated with that event. 
    // Could be length of the video played etc.
    $customEventsRule->Value=5.00;
    $customEventsRule->ValueOperator='Equals';
    $customEventsList->Rule = new SoapVar(
        $customEventsRule, 
        SOAP_ENC_OBJECT, 
        'CustomEventsRule', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );  
    $customEventsList->Scope='Account';
    $customEventsList->TagId = $tagId;     
    $audiences[] = new SoapVar(
        $customEventsList, 
        SOAP_ENC_OBJECT, 
        'RemarketingList', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );       
                
    $pageVisitorsList = new RemarketingList();  
    $pageVisitorsList->Description="New list with PageVisitorsRule";
    $pageVisitorsList->MembershipDuration=30;
    $pageVisitorsList->Name="Remarketing List with PageVisitorsRule " . $_SERVER['REQUEST_TIME'];
    $pageVisitorsList->ParentId = $GLOBALS['AuthorizationData']->AccountId;
    // The rule definition is translated to the following logical expression: 
    // ((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
    // or ((ReferrerUrl Equals Z))
    $pageVisitorsRule = new PageVisitorsRule();
    $pageVisitorsRuleItemGroups = array();
    $pageVisitorsRuleItemGroupA = new RuleItemGroup();
    $pageVisitorsRuleItemsA = array();
    $pageVisitorsRuleItemA = new StringRuleItem();
    $pageVisitorsRuleItemA->Operand = "Url";
    $pageVisitorsRuleItemA->Operator = 'Contains';
    $pageVisitorsRuleItemA->Value = "X";
    $pageVisitorsRuleItemsA[] = new SoapVar(
        $pageVisitorsRuleItemA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );        
    $pageVisitorsRuleItemAA = new StringRuleItem();
    $pageVisitorsRuleItemAA->Operand = "ReferrerUrl";
    $pageVisitorsRuleItemAA->Operator = 'DoesNotContain';
    $pageVisitorsRuleItemAA->Value = "Z";
    $pageVisitorsRuleItemsA[] = new SoapVar(
        $pageVisitorsRuleItemAA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );    
    $pageVisitorsRuleItemGroupA->Items = $pageVisitorsRuleItemsA;
    $pageVisitorsRuleItemGroups[] = $pageVisitorsRuleItemGroupA;
    $pageVisitorsRuleItemGroupB = new RuleItemGroup();
    $pageVisitorsRuleItemsB = array();
    $pageVisitorsRuleItemB = new StringRuleItem();
    $pageVisitorsRuleItemB->Operand = "Url";
    $pageVisitorsRuleItemB->Operator = 'DoesNotBeginWith';
    $pageVisitorsRuleItemB->Value = "Y";
    $pageVisitorsRuleItemsB[] = new SoapVar(
        $pageVisitorsRuleItemB, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );          
    $pageVisitorsRuleItemGroupB->Items = $pageVisitorsRuleItemsB;
    $pageVisitorsRuleItemGroups[] = $pageVisitorsRuleItemGroupB;
    $pageVisitorsRuleItemGroupC = new RuleItemGroup();
    $pageVisitorsRuleItemsC = array();
    $pageVisitorsRuleItemC = new StringRuleItem();
    $pageVisitorsRuleItemC->Operand = "ReferrerUrl";
    $pageVisitorsRuleItemC->Operator = 'Equals';
    $pageVisitorsRuleItemC->Value = "Z";
    $pageVisitorsRuleItemsC[] = new SoapVar(
        $pageVisitorsRuleItemC, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );                   
    $pageVisitorsRuleItemGroupC->Items = $pageVisitorsRuleItemsC;
    $pageVisitorsRuleItemGroups[] = $pageVisitorsRuleItemGroupC;
    $pageVisitorsRule->RuleItemGroups = $pageVisitorsRuleItemGroups;
    $pageVisitorsList->Rule = new SoapVar(
        $pageVisitorsRule, 
        SOAP_ENC_OBJECT, 
        'PageVisitorsRule', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );  
    $pageVisitorsList->Scope='Account';
    $pageVisitorsList->TagId = $tagId; 
    $audiences[] = new SoapVar(
        $pageVisitorsList, 
        SOAP_ENC_OBJECT, 
        'RemarketingList', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );  
    
    $pageVisitorsWhoDidNotVisitAnotherPageList = new RemarketingList();        
    $pageVisitorsWhoDidNotVisitAnotherPageList->Description="New list with PageVisitorsWhoDidNotVisitAnotherPageRule";
    $pageVisitorsWhoDidNotVisitAnotherPageList->MembershipDuration=30;
    $pageVisitorsWhoDidNotVisitAnotherPageList->Name="Remarketing List with PageVisitorsWhoDidNotVisitAnotherPageRule " 
        . $_SERVER['REQUEST_TIME'];
    $pageVisitorsWhoDidNotVisitAnotherPageList->ParentId = $GLOBALS['AuthorizationData']->AccountId;
    // The rule definition is translated to the following logical expression: 
    // (((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
    // or ((ReferrerUrl Equals Z))) 
    // and not (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
    $pageVisitorsWhoDidNotVisitAnotherPageRule = new PageVisitorsWhoDidNotVisitAnotherPageRule();            
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups = array();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA = new RuleItemGroup();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA = array();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA->Operand = "Url";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA->Operator = 'BeginsWith';
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA->Value = "A";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );   
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA->Operand = "ReferrerUrl";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA->Operator = 'BeginsWith';
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA->Value = "B";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemAA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );   
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA->Items = $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsA;
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups[] = $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupA;
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB = new RuleItemGroup();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB = array();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB->Operand = "Url";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB->Operator = 'Contains';
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB->Value = "C";
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemB, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );            
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB->Items = $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemsB;
    $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups[] = $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroupB;
    $pageVisitorsWhoDidNotVisitAnotherPageRule->ExcludeRuleItemGroups = $pageVisitorsWhoDidNotVisitAnotherPageExcludeRuleItemGroups;            
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups = array();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA = new RuleItemGroup();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA = array();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA->Operand = "Url";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA->Operator = 'Contains';
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA->Value = "X";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );   
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA->Operand = "ReferrerUrl";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA->Operator = 'DoesNotContain';
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA->Value = "Z";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemAA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );   
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA->Items = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsA;
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups[] = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupA;
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB = new RuleItemGroup();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB = array();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB->Operand = "Url";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB->Operator = 'DoesNotBeginWith';
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB->Value = "Y";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemB, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );          
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB->Items = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsB;
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups[] = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupB;
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC = new RuleItemGroup();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC = array();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC = new StringRuleItem();
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC->Operand = "ReferrerUrl";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC->Operator = 'Equals';
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC->Value = "Z";
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemC, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );             
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC->Items = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemsC;
    $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups[] = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroupC;
    $pageVisitorsWhoDidNotVisitAnotherPageRule->IncludeRuleItemGroups = $pageVisitorsWhoDidNotVisitAnotherPageIncludeRuleItemGroups;
    $pageVisitorsWhoDidNotVisitAnotherPageList->Rule = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageRule, 
        SOAP_ENC_OBJECT, 
        'PageVisitorsWhoDidNotVisitAnotherPageRule', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );  
    $pageVisitorsWhoDidNotVisitAnotherPageList->Scope='Account';
    $pageVisitorsWhoDidNotVisitAnotherPageList->TagId = $tagId;   
    $audiences[] = new SoapVar(
        $pageVisitorsWhoDidNotVisitAnotherPageList, 
        SOAP_ENC_OBJECT, 
        'RemarketingList', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    ); 

    $pageVisitorsWhoVisitedAnotherPageList = new RemarketingList();  
    $pageVisitorsWhoVisitedAnotherPageList->Description="New list with PageVisitorsWhoVisitedAnotherPageRule";
    $pageVisitorsWhoVisitedAnotherPageList->MembershipDuration=30;
    $pageVisitorsWhoVisitedAnotherPageList->Name="Remarketing List with PageVisitorsWhoVisitedAnotherPageRule " 
        . $_SERVER['REQUEST_TIME'];
    $pageVisitorsWhoVisitedAnotherPageList->ParentId = $GLOBALS['AuthorizationData']->AccountId;
    // The rule definition is translated to the following logical expression: 
    // (((Url Contains X) and (ReferrerUrl NotEquals Z)) or ((Url DoesNotBeginWith Y)) or 
    // ((ReferrerUrl Equals Z))) 
    // and (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
    $pageVisitorsWhoVisitedAnotherPageRule = new PageVisitorsWhoVisitedAnotherPageRule();         
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups = array();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA = new RuleItemGroup();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA = array();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA->Operand = "Url";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA->Operator = 'BeginsWith';
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA->Value = "A";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );   
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA->Operand = "ReferrerUrl";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA->Operator = 'BeginsWith';
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA->Value = "B";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemAA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );    
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA->Items = $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsA;
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups[] = $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupA;
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB = new RuleItemGroup();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB = array();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB->Operand = "Url";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB->Operator = 'Contains';
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB->Value = "C";
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemB, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );            
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB->Items = $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemsB;
    $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups[] = $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroupB;
    $pageVisitorsWhoVisitedAnotherPageRule->AnotherRuleItemGroups = $pageVisitorsWhoVisitedAnotherPageAnotherRuleItemGroups;            
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroups = array();
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupA = new RuleItemGroup();
    $pageVisitorsWhoVisitedAnotherPageRuleItemsA = array();
    $pageVisitorsWhoVisitedAnotherPageRuleItemA = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageRuleItemA->Operand = "Url";
    $pageVisitorsWhoVisitedAnotherPageRuleItemA->Operator = 'Contains';
    $pageVisitorsWhoVisitedAnotherPageRuleItemA->Value = "X";
    $pageVisitorsWhoVisitedAnotherPageRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageRuleItemA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );    
    $pageVisitorsWhoVisitedAnotherPageRuleItemAA = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageRuleItemAA->Operand = "ReferrerUrl";
    $pageVisitorsWhoVisitedAnotherPageRuleItemAA->Operator = 'DoesNotContain';
    $pageVisitorsWhoVisitedAnotherPageRuleItemAA->Value = "Z";
    $pageVisitorsWhoVisitedAnotherPageRuleItemsA[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageRuleItemAA, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );     
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupA->Items = $pageVisitorsWhoVisitedAnotherPageRuleItemsA;
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroups[] = $pageVisitorsWhoVisitedAnotherPageRuleItemGroupA;
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupB = new RuleItemGroup();
    $pageVisitorsWhoVisitedAnotherPageRuleItemsB = array();
    $pageVisitorsWhoVisitedAnotherPageRuleItemB = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageRuleItemB->Operand = "Url";
    $pageVisitorsWhoVisitedAnotherPageRuleItemB->Operator = 'DoesNotBeginWith';
    $pageVisitorsWhoVisitedAnotherPageRuleItemB->Value = "Y";
    $pageVisitorsWhoVisitedAnotherPageRuleItemsB[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageRuleItemB, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );            
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupB->Items = $pageVisitorsWhoVisitedAnotherPageRuleItemsB;
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroups[] = $pageVisitorsWhoVisitedAnotherPageRuleItemGroupB;
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupC = new RuleItemGroup();
    $pageVisitorsWhoVisitedAnotherPageRuleItemsC = array();
    $pageVisitorsWhoVisitedAnotherPageRuleItemC = new StringRuleItem();
    $pageVisitorsWhoVisitedAnotherPageRuleItemC->Operand = "ReferrerUrl";
    $pageVisitorsWhoVisitedAnotherPageRuleItemC->Operator = 'Equals';
    $pageVisitorsWhoVisitedAnotherPageRuleItemC->Value = "Z";
    $pageVisitorsWhoVisitedAnotherPageRuleItemsC[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageRuleItemC, 
        SOAP_ENC_OBJECT, 
        'StringRuleItem', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );             
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroupC->Items = $pageVisitorsWhoVisitedAnotherPageRuleItemsC;
    $pageVisitorsWhoVisitedAnotherPageRuleItemGroups[] = $pageVisitorsWhoVisitedAnotherPageRuleItemGroupC;
    $pageVisitorsWhoVisitedAnotherPageRule->RuleItemGroups = $pageVisitorsWhoVisitedAnotherPageRuleItemGroups;
    $pageVisitorsWhoVisitedAnotherPageList->Rule = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageRule, 
        SOAP_ENC_OBJECT, 
        'PageVisitorsWhoVisitedAnotherPageRule', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );  
    $pageVisitorsWhoVisitedAnotherPageList->Scope='Account';
    $pageVisitorsWhoVisitedAnotherPageList->TagId = $tagId;   
    $audiences[] = new SoapVar(
        $pageVisitorsWhoVisitedAnotherPageList, 
        SOAP_ENC_OBJECT, 
        'RemarketingList', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    ); 

    // RemarketingList extends the Audience base class. 
    // We manage remarketing lists with Audience operations.

    print("-----\r\nAddAudiences:\r\n");
    $addAudiencesResponse = CampaignManagementExampleHelper::AddAudiences(
        $audiences
    );
    $audienceIds = $addAudiencesResponse->AudienceIds;
    print("AudienceIds:\r\n");
    CampaignManagementExampleHelper::OutputArrayOfLong($audienceIds);
    print("PartialErrors:\r\n");
    CampaignManagementExampleHelper::OutputArrayOfBatchError($addAudiencesResponse->PartialErrors);
                
    // Add an ad group in a campaign. The ad group will later be associated with remarketing lists. 
    
    $campaigns = array();   
    $campaign = new Campaign();
    $campaign->Name = "Women's Shoes " . $_SERVER['REQUEST_TIME'];
    $campaign->BudgetType = BudgetLimitType::DailyBudgetStandard;
    $campaign->DailyBudget = 50.00;
    $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);
    
    $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;    
    // Applicable for all remarketing lists that are associated with this ad group. TargetAndBid indicates 
    // that you want to show ads only to people included in the remarketing list, with the option to change
    // the bid amount. Ads in this ad group will only show to people included in the remarketing list. 
    $adGroupSettings = array();
    $adGroupTargetSetting = new TargetSetting();
    $adGroupAudienceTargetSettingDetail = new TargetSettingDetail();
    $adGroupAudienceTargetSettingDetail->CriterionTypeGroup = CriterionTypeGroup::Audience;
    $adGroupAudienceTargetSettingDetail->TargetAndBid = True;
    $adGroupTargetSetting->Details = array();
    $adGroupTargetSetting->Details[] = $adGroupAudienceTargetSettingDetail;
    $encodedAdGroupTargetSetting = new SoapVar(
        $adGroupTargetSetting, 
        SOAP_ENC_OBJECT, 
        'TargetSetting', 
        $GLOBALS['CampaignManagementProxy']->GetNamespace()
    );
    $adGroupSettings[] = $encodedAdGroupTargetSetting;
    $adGroup->Settings=$adGroupSettings;
    $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);

    // Associate all of the remarketing lists created above with the new ad group.

    $adGroupCriterions = array();

    foreach ($audienceIds->long as $audienceId)
    {
        if ($audienceId != null)
        {
            $adGroupCriterion = new BiddableAdGroupCriterion();
            
            $criterion = new AudienceCriterion();
            $criterion->AudienceId = $audienceId;
            $criterion->AudienceType = AudienceType::RemarketingList;
            $adGroupCriterion->Criterion = new SoapVar(
                $criterion, 
                SOAP_ENC_OBJECT, 
                'AudienceCriterion', 
                $GLOBALS['CampaignManagementProxy']->GetNamespace()
            );

            $criterionBid = new BidMultiplier();
            $criterionBid->Multiplier = 20.00;
            $adGroupCriterion->CriterionBid = new SoapVar(
                $criterionBid, 
                SOAP_ENC_OBJECT, 
                'BidMultiplier', 
                $GLOBALS['CampaignManagementProxy']->GetNamespace()
            );

            $adGroupCriterion->AdGroupId = $adGroupIds->long[0];
            $adGroupCriterion->Status = AdGroupCriterionStatus::Active;
            
            $adGroupCriterions[] = new SoapVar(
                $adGroupCriterion, 
                SOAP_ENC_OBJECT, 
                'BiddableAdGroupCriterion', 
                $GLOBALS['CampaignManagementProxy']->GetNamespace()
            );
        }
    }

    print("-----\r\nAddAdGroupCriterions:\r\n");
    $addAdGroupCriterionsResponse = CampaignManagementExampleHelper::AddAdGroupCriterions(
        $adGroupCriterions, 
        AdGroupCriterionType::Audience
    );
    $adGroupCriterionIds = $addAdGroupCriterionsResponse->AdGroupCriterionIds;
    print("AdGroupCriterionIds:\r\n");
    CampaignManagementExampleHelper::OutputArrayOfLong($adGroupCriterionIds);
    $adGroupCriterionErrors = $addAdGroupCriterionsResponse->NestedPartialErrors;
    print("NestedPartialErrors:\r\n");
    CampaignManagementExampleHelper::OutputArrayOfBatchErrorCollection($adGroupCriterionErrors);
    
    // 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";
    }
}
from auth_helper import *
from campaignmanagement_example_helper import *

# You must provide credentials in auth_helper.py.

def main(authorization_data):

    try:
        # Before you can track conversions or target audiences using a remarketing list 
        # you need to create a UET tag, and then add the UET tag tracking code to every page of your website.
        # For more information, please see Universal Event Tracking at https://go.microsoft.com/fwlink/?linkid=829965.

        # First you should call the GetUetTagsByIds operation to check whether a tag has already been created. 
        # You can leave the TagIds element null or empty to request all UET tags available for the customer.

        output_status_message("-----\nGetUetTagsByIds:")
        uet_tags=campaign_service.GetUetTagsByIds(
            TagIds=None
        ).UetTags

        # If you do not already have a UET tag that can be used, or if you need another UET tag, 
        # call the AddUetTags service operation to create a new UET tag. If the call is successful, 
        # the tracking script that you should add to your website is included in a corresponding 
        # UetTag within the response message. 

        if (uet_tags is None or len(uet_tags) < 1):
            uet_tags=campaign_service.factory.create('ArrayOfUetTag')
            uet_tag=set_elements_to_none(campaign_service.factory.create('UetTag'))
            uet_tag.Description = "My First Uet Tag"
            uet_tag.Name = "New Uet Tag"
            output_status_message("-----\nAddUetTags:")
            uet_tags=campaign_service.AddUetTags(
                UetTags=uet_tags
            ).UetTags

        if (uet_tags is None or len(uet_tags) < 1):
            output_status_message(
                "You do not have any UET tags registered for CustomerId {0}.".format(authorization_data.customer_id)
            )
            sys.exit(0)

        output_status_message("List of all UET Tags:")
        output_array_of_uettag(uet_tags)

        # After you retreive the tracking script from the AddUetTags or GetUetTagsByIds operation, 
        # the next step is to add the UET tag tracking code to your website. 

        # We will use the same UET tag for the remainder of this example.
        tag_id = uet_tags['UetTag'][0].Id

        # Add remarketing lists that depend on the UET Tag Id retreived above.
        add_audiences=campaign_service.factory.create('ArrayOfAudience')
        custom_events_list=set_elements_to_none(campaign_service.factory.create('RemarketingList'))
        custom_events_list.Description="New list with CustomEventsRule"
        custom_events_list.MembershipDuration=30
        custom_events_list.Name="Remarketing List with CustomEventsRule " + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
        custom_events_list.ParentId=authorization_data.account_id
        # The rule definition is translated to the following logical expression: 
        # (Category Equals video) and (Action Equals play) and (Label Equals trailer) 
        # and (Value Equals 5)
        custom_events_rule=set_elements_to_none(campaign_service.factory.create('CustomEventsRule'))
        # The type of user interaction you want to track.
        custom_events_rule.Action="play"
        custom_events_rule.ActionOperator='Equals'
        # The category of event you want to track. 
        custom_events_rule.Category="video"
        custom_events_rule.CategoryOperator='Equals'
        # The name of the element that caused the action.
        custom_events_rule.Label="trailer"
        custom_events_rule.LabelOperator='Equals'
        # A numerical value associated with that event. 
        # Could be length of the video played etc.
        custom_events_rule.Value=5.00
        custom_events_rule.ValueOperator='Equals'
        custom_events_list.Rule=custom_events_rule
        custom_events_list.Scope='Account'
        custom_events_list.TagId=tag_id            
        add_audiences.Audience.append(custom_events_list)
                    
        page_visitors_list=set_elements_to_none(campaign_service.factory.create('RemarketingList'))  
        page_visitors_list.Description="New list with PageVisitorsRule"
        page_visitors_list.MembershipDuration=30
        page_visitors_list.Name="Remarketing List with PageVisitorsRule " + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
        page_visitors_list.ParentId=authorization_data.account_id
        # The rule definition is translated to the following logical expression: 
        # ((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
        # or ((ReferrerUrl Equals Z))
        page_visitors_rule=set_elements_to_none(campaign_service.factory.create('PageVisitorsRule'))
        page_visitors_rule_item_groups=campaign_service.factory.create('ArrayOfRuleItemGroup')
        page_visitors_rule_item_group_a=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_rule_items_a=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_rule_item_a=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_rule_item_a.Operand="Url"
        page_visitors_rule_item_a.Operator='Contains'
        page_visitors_rule_item_a.Value="X"
        page_visitors_rule_items_a.RuleItem.append(page_visitors_rule_item_a)   
        page_visitors_rule_item_aa=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_rule_item_aa.Operand="ReferrerUrl"
        page_visitors_rule_item_aa.Operator='DoesNotContain'
        page_visitors_rule_item_aa.Value="Z"
        page_visitors_rule_items_a.RuleItem.append(page_visitors_rule_item_aa)    
        page_visitors_rule_item_group_a.Items=page_visitors_rule_items_a
        page_visitors_rule_item_groups.RuleItemGroup.append(page_visitors_rule_item_group_a)
        page_visitors_rule_item_group_b=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_rule_items_b=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_rule_item_b=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_rule_item_b.Operand="Url"
        page_visitors_rule_item_b.Operator='DoesNotBeginWith'
        page_visitors_rule_item_b.Value="Y"
        page_visitors_rule_items_b.RuleItem.append(page_visitors_rule_item_b)            
        page_visitors_rule_item_group_b.Items=page_visitors_rule_items_b
        page_visitors_rule_item_groups.RuleItemGroup.append(page_visitors_rule_item_group_b)
        page_visitors_rule_item_group_c=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_rule_items_c=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_rule_item_c=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_rule_item_c.Operand="ReferrerUrl"
        page_visitors_rule_item_c.Operator='Equals'
        page_visitors_rule_item_c.Value="Z"
        page_visitors_rule_items_c.RuleItem.append(page_visitors_rule_item_c)            
        page_visitors_rule_item_group_c.Items=page_visitors_rule_items_c
        page_visitors_rule_item_groups.RuleItemGroup.append(page_visitors_rule_item_group_c)
        page_visitors_rule.RuleItemGroups=page_visitors_rule_item_groups
        page_visitors_list.Rule=page_visitors_rule
        page_visitors_list.Scope='Account'
        page_visitors_list.TagId=tag_id 
        add_audiences.Audience.append(page_visitors_list)
        
        page_visitors_who_did_not_visit_another_page_list=set_elements_to_none(campaign_service.factory.create('RemarketingList'))        
        page_visitors_who_did_not_visit_another_page_list.Description="New list with PageVisitorsWhoDidNotVisitAnotherPageRule"
        page_visitors_who_did_not_visit_another_page_list.MembershipDuration=30
        page_visitors_who_did_not_visit_another_page_list.Name="Remarketing List with PageVisitorsWhoDidNotVisitAnotherPageRule " + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
        page_visitors_who_did_not_visit_another_page_list.ParentId=authorization_data.account_id
        # The rule definition is translated to the following logical expression: 
        # (((Url Contains X) and (ReferrerUrl DoesNotContain Z)) or ((Url DoesNotBeginWith Y)) 
        # or ((ReferrerUrl Equals Z))) 
        # and not (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
        page_visitors_who_did_not_visit_another_page_rule=set_elements_to_none(campaign_service.factory.create('PageVisitorsWhoDidNotVisitAnotherPageRule'))            
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_groups=campaign_service.factory.create('ArrayOfRuleItemGroup')
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_a=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_did_not_visit_another_page_exclude_rule_items_a=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_a=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_a.Operand="Url"
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_a.Operator='BeginsWith'
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_a.Value="A"
        page_visitors_who_did_not_visit_another_page_exclude_rule_items_a.RuleItem.append(page_visitors_who_did_not_visit_another_page_exclude_rule_item_a)   
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_aa=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_aa.Operand="ReferrerUrl"
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_aa.Operator='BeginsWith'
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_aa.Value="B"
        page_visitors_who_did_not_visit_another_page_exclude_rule_items_a.RuleItem.append(page_visitors_who_did_not_visit_another_page_exclude_rule_item_aa)    
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_a.Items=page_visitors_who_did_not_visit_another_page_exclude_rule_items_a
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_groups.RuleItemGroup.append(page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_a)
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_b=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_did_not_visit_another_page_exclude_rule_items_b=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_b=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_b.Operand="Url"
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_b.Operator='Contains'
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_b.Value="C"
        page_visitors_who_did_not_visit_another_page_exclude_rule_items_b.RuleItem.append(page_visitors_who_did_not_visit_another_page_exclude_rule_item_b)            
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_b.Items=page_visitors_who_did_not_visit_another_page_exclude_rule_items_b
        page_visitors_who_did_not_visit_another_page_exclude_rule_item_groups.RuleItemGroup.append(page_visitors_who_did_not_visit_another_page_exclude_rule_item_group_b)
        page_visitors_who_did_not_visit_another_page_rule.ExcludeRuleItemGroups=page_visitors_who_did_not_visit_another_page_exclude_rule_item_groups            
        page_visitors_who_did_not_visit_another_page_include_rule_item_groups=campaign_service.factory.create('ArrayOfRuleItemGroup')
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_a=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_did_not_visit_another_page_include_rule_items_a=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_did_not_visit_another_page_include_rule_item_a=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_include_rule_item_a.Operand="Url"
        page_visitors_who_did_not_visit_another_page_include_rule_item_a.Operator='Contains'
        page_visitors_who_did_not_visit_another_page_include_rule_item_a.Value="X"
        page_visitors_who_did_not_visit_another_page_include_rule_items_a.RuleItem.append(page_visitors_who_did_not_visit_another_page_include_rule_item_a)   
        page_visitors_who_did_not_visit_another_page_include_rule_item_aa=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_include_rule_item_aa.Operand="ReferrerUrl"
        page_visitors_who_did_not_visit_another_page_include_rule_item_aa.Operator='DoesNotContain'
        page_visitors_who_did_not_visit_another_page_include_rule_item_aa.Value="Z"
        page_visitors_who_did_not_visit_another_page_include_rule_items_a.RuleItem.append(page_visitors_who_did_not_visit_another_page_include_rule_item_aa)    
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_a.Items=page_visitors_who_did_not_visit_another_page_include_rule_items_a
        page_visitors_who_did_not_visit_another_page_include_rule_item_groups.RuleItemGroup.append(page_visitors_who_did_not_visit_another_page_include_rule_item_group_a)
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_b=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_did_not_visit_another_page_include_rule_items_b=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_did_not_visit_another_page_include_rule_item_b=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_include_rule_item_b.Operand="Url"
        page_visitors_who_did_not_visit_another_page_include_rule_item_b.Operator='DoesNotBeginWith'
        page_visitors_who_did_not_visit_another_page_include_rule_item_b.Value="Y"
        page_visitors_who_did_not_visit_another_page_include_rule_items_b.RuleItem.append(page_visitors_who_did_not_visit_another_page_include_rule_item_b)            
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_b.Items=page_visitors_who_did_not_visit_another_page_include_rule_items_b
        page_visitors_who_did_not_visit_another_page_include_rule_item_groups.RuleItemGroup.append(page_visitors_who_did_not_visit_another_page_include_rule_item_group_b)
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_c=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_did_not_visit_another_page_include_rule_items_c=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_did_not_visit_another_page_include_rule_item_c=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_did_not_visit_another_page_include_rule_item_c.Operand="ReferrerUrl"
        page_visitors_who_did_not_visit_another_page_include_rule_item_c.Operator='Equals'
        page_visitors_who_did_not_visit_another_page_include_rule_item_c.Value="Z"
        page_visitors_who_did_not_visit_another_page_include_rule_items_c.RuleItem.append(page_visitors_who_did_not_visit_another_page_include_rule_item_c)            
        page_visitors_who_did_not_visit_another_page_include_rule_item_group_c.Items=page_visitors_who_did_not_visit_another_page_include_rule_items_c
        page_visitors_who_did_not_visit_another_page_include_rule_item_groups.RuleItemGroup.append(page_visitors_who_did_not_visit_another_page_include_rule_item_group_c)
        page_visitors_who_did_not_visit_another_page_rule.IncludeRuleItemGroups=page_visitors_who_did_not_visit_another_page_include_rule_item_groups
        page_visitors_who_did_not_visit_another_page_list.Rule=page_visitors_who_did_not_visit_another_page_rule
        page_visitors_who_did_not_visit_another_page_list.Scope='Account'
        page_visitors_who_did_not_visit_another_page_list.TagId=tag_id   
        add_audiences.Audience.append(page_visitors_who_did_not_visit_another_page_list)

        page_visitors_who_visited_another_page_list=set_elements_to_none(campaign_service.factory.create('RemarketingList'))  
        page_visitors_who_visited_another_page_list.Description="New list with PageVisitorsWhoVisitedAnotherPageRule"
        page_visitors_who_visited_another_page_list.MembershipDuration=30
        page_visitors_who_visited_another_page_list.Name="Remarketing List with PageVisitorsWhoVisitedAnotherPageRule " + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
        page_visitors_who_visited_another_page_list.ParentId=authorization_data.account_id
        # The rule definition is translated to the following logical expression: 
        # (((Url Contains X) and (ReferrerUrl NotEquals Z)) or ((Url DoesNotBeginWith Y)) or 
        # ((ReferrerUrl Equals Z))) 
        # and (((Url BeginsWith A) and (ReferrerUrl BeginsWith B)) or ((Url Contains C)))
        page_visitors_who_visited_another_page_rule=set_elements_to_none(campaign_service.factory.create('PageVisitorsWhoVisitedAnotherPageRule'))         
        page_visitors_who_visited_another_page_another_rule_item_groups=campaign_service.factory.create('ArrayOfRuleItemGroup')
        page_visitors_who_visited_another_page_another_rule_item_group_a=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_visited_another_page_another_rule_items_a=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_visited_another_page_another_rule_item_a=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_another_rule_item_a.Operand="Url"
        page_visitors_who_visited_another_page_another_rule_item_a.Operator='BeginsWith'
        page_visitors_who_visited_another_page_another_rule_item_a.Value="A"
        page_visitors_who_visited_another_page_another_rule_items_a.RuleItem.append(page_visitors_who_visited_another_page_another_rule_item_a)   
        page_visitors_who_visited_another_page_another_rule_item_aa=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_another_rule_item_aa.Operand="ReferrerUrl"
        page_visitors_who_visited_another_page_another_rule_item_aa.Operator='BeginsWith'
        page_visitors_who_visited_another_page_another_rule_item_aa.Value="B"
        page_visitors_who_visited_another_page_another_rule_items_a.RuleItem.append(page_visitors_who_visited_another_page_another_rule_item_aa)    
        page_visitors_who_visited_another_page_another_rule_item_group_a.Items=page_visitors_who_visited_another_page_another_rule_items_a
        page_visitors_who_visited_another_page_another_rule_item_groups.RuleItemGroup.append(page_visitors_who_visited_another_page_another_rule_item_group_a)
        page_visitors_who_visited_another_page_another_rule_item_group_b=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_visited_another_page_another_rule_items_b=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_visited_another_page_another_rule_item_b=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_another_rule_item_b.Operand="Url"
        page_visitors_who_visited_another_page_another_rule_item_b.Operator='Contains'
        page_visitors_who_visited_another_page_another_rule_item_b.Value="C"
        page_visitors_who_visited_another_page_another_rule_items_b.RuleItem.append(page_visitors_who_visited_another_page_another_rule_item_b)            
        page_visitors_who_visited_another_page_another_rule_item_group_b.Items=page_visitors_who_visited_another_page_another_rule_items_b
        page_visitors_who_visited_another_page_another_rule_item_groups.RuleItemGroup.append(page_visitors_who_visited_another_page_another_rule_item_group_b)
        page_visitors_who_visited_another_page_rule.AnotherRuleItemGroups=page_visitors_who_visited_another_page_another_rule_item_groups            
        page_visitors_who_visited_another_page_rule_item_groups=campaign_service.factory.create('ArrayOfRuleItemGroup')
        page_visitors_who_visited_another_page_rule_item_group_a=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_visited_another_page_rule_items_a=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_visited_another_page_rule_item_a=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_rule_item_a.Operand="Url"
        page_visitors_who_visited_another_page_rule_item_a.Operator='Contains'
        page_visitors_who_visited_another_page_rule_item_a.Value="X"
        page_visitors_who_visited_another_page_rule_items_a.RuleItem.append(page_visitors_who_visited_another_page_rule_item_a)   
        page_visitors_who_visited_another_page_rule_item_aa=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_rule_item_aa.Operand="ReferrerUrl"
        page_visitors_who_visited_another_page_rule_item_aa.Operator='DoesNotContain'
        page_visitors_who_visited_another_page_rule_item_aa.Value="Z"
        page_visitors_who_visited_another_page_rule_items_a.RuleItem.append(page_visitors_who_visited_another_page_rule_item_aa)    
        page_visitors_who_visited_another_page_rule_item_group_a.Items=page_visitors_who_visited_another_page_rule_items_a
        page_visitors_who_visited_another_page_rule_item_groups.RuleItemGroup.append(page_visitors_who_visited_another_page_rule_item_group_a)
        page_visitors_who_visited_another_page_rule_item_group_b=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_visited_another_page_rule_items_b=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_visited_another_page_rule_item_b=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_rule_item_b.Operand="Url"
        page_visitors_who_visited_another_page_rule_item_b.Operator='DoesNotBeginWith'
        page_visitors_who_visited_another_page_rule_item_b.Value="Y"
        page_visitors_who_visited_another_page_rule_items_b.RuleItem.append(page_visitors_who_visited_another_page_rule_item_b)            
        page_visitors_who_visited_another_page_rule_item_group_b.Items=page_visitors_who_visited_another_page_rule_items_b
        page_visitors_who_visited_another_page_rule_item_groups.RuleItemGroup.append(page_visitors_who_visited_another_page_rule_item_group_b)
        page_visitors_who_visited_another_page_rule_item_group_c=set_elements_to_none(campaign_service.factory.create('RuleItemGroup'))
        page_visitors_who_visited_another_page_rule_items_c=campaign_service.factory.create('ArrayOfRuleItem')
        page_visitors_who_visited_another_page_rule_item_c=set_elements_to_none(campaign_service.factory.create('StringRuleItem'))
        page_visitors_who_visited_another_page_rule_item_c.Operand="ReferrerUrl"
        page_visitors_who_visited_another_page_rule_item_c.Operator='Equals'
        page_visitors_who_visited_another_page_rule_item_c.Value="Z"
        page_visitors_who_visited_another_page_rule_items_c.RuleItem.append(page_visitors_who_visited_another_page_rule_item_c)            
        page_visitors_who_visited_another_page_rule_item_group_c.Items=page_visitors_who_visited_another_page_rule_items_c
        page_visitors_who_visited_another_page_rule_item_groups.RuleItemGroup.append(page_visitors_who_visited_another_page_rule_item_group_c)
        page_visitors_who_visited_another_page_rule.RuleItemGroups=page_visitors_who_visited_another_page_rule_item_groups
        page_visitors_who_visited_another_page_list.Rule=page_visitors_who_visited_another_page_rule
        page_visitors_who_visited_another_page_list.Scope='Account'
        page_visitors_who_visited_another_page_list.TagId=tag_id   
        add_audiences.Audience.append(page_visitors_who_visited_another_page_list)  

        # RemarketingList extends the Audience base class. 
        # We manage remarketing lists with Audience operations.

        output_status_message("-----\nAddAudiences:")
        add_audiences_response=campaign_service.AddAudiences(
            Audiences=add_audiences
        )
        audience_ids={
            'long': add_audiences_response.AudienceIds['long'] if add_audiences_response.AudienceIds['long'] else None
        }
        output_status_message("AudienceIds:")
        output_array_of_long(audience_ids)
        output_status_message("PartialErrors:")
        output_array_of_batcherror(add_audiences_response.PartialErrors) 

        # Add an ad group in a campaign. The ad group will later be associated with remarketing lists. 

        campaigns=campaign_service.factory.create('ArrayOfCampaign')
        campaign=set_elements_to_none(campaign_service.factory.create('Campaign'))
        campaign.BudgetType='DailyBudgetStandard'
        campaign.DailyBudget=50
        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.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)

        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
        # Applicable for all remarketing lists that are associated with this ad group. TargetAndBid indicates 
        # that you want to show ads only to people included in the remarketing list, with the option to change
        # the bid amount. Ads in this ad group will only show to people included in the remarketing list.
        ad_group_settings=campaign_service.factory.create('ArrayOfSetting')
        ad_group_target_setting=campaign_service.factory.create('TargetSetting')
        ad_group_audience_target_setting_detail=campaign_service.factory.create('TargetSettingDetail')
        ad_group_audience_target_setting_detail.CriterionTypeGroup='Audience'
        ad_group_audience_target_setting_detail.TargetAndBid=True
        ad_group_target_setting.Details.TargetSettingDetail.append(ad_group_audience_target_setting_detail)
        ad_group_settings.Setting.append(ad_group_target_setting)
        ad_group.Settings=ad_group_settings
        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)

        # Associate all of the remarketing lists created above with the new ad group.

        ad_group_remarketing_list_associations=campaign_service.factory.create('ArrayOfAdGroupCriterion')

        for audience_id in audience_ids['long']:
            if audience_id is not None:
                biddable_ad_group_criterion=set_elements_to_none(campaign_service.factory.create('BiddableAdGroupCriterion'))
                biddable_ad_group_criterion.AdGroupId=ad_group_ids['long'][0]
                biddable_ad_group_criterion.Status='Active'
                audience_criterion=set_elements_to_none(campaign_service.factory.create('AudienceCriterion'))
                audience_criterion.AudienceId=audience_id
                audience_criterion.AudienceType='RemarketingList'
                biddable_ad_group_criterion.Criterion=audience_criterion
                bid_multiplier=set_elements_to_none(campaign_service.factory.create('BidMultiplier'))
                bid_multiplier.Multiplier=20.00
                biddable_ad_group_criterion.CriterionBid=bid_multiplier
                ad_group_remarketing_list_associations.AdGroupCriterion.append(biddable_ad_group_criterion)
         
        output_status_message("-----\nAddAdGroupCriterions:")
        add_ad_group_criterions_response = campaign_service.AddAdGroupCriterions(
            AdGroupCriterions=ad_group_remarketing_list_associations,
            CriterionType='Audience'
        )
        ad_group_criterion_ids={
            'long': add_ad_group_criterions_response.AdGroupCriterionIds['long'] if add_ad_group_criterions_response.AdGroupCriterionIds['long'] else None
        }
        output_status_message("AdGroupCriterionIds:")
        output_array_of_long(ad_group_criterion_ids)
        output_status_message("NestedPartialErrors:")
        output_array_of_batcherror(add_ad_group_criterions_response.NestedPartialErrors)

        # 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)

# 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)

Voir aussi

Prise en main de l’API Bing Ads