public void Run(AdWordsUser user, long campaignId, long adGroupId, long criterionId)
{
// Get the ExperimentService.
ExperimentService experimentService =
(ExperimentService) user.GetService(AdWordsService.v201306.ExperimentService);
// Get the AdGroupService.
AdGroupService adGroupService =
(AdGroupService) user.GetService(AdWordsService.v201306.AdGroupService);
// Get the AdGroupCriterionService.
AdGroupCriterionService adGroupCriterionService =
(AdGroupCriterionService) user.GetService(AdWordsService.v201306.AdGroupCriterionService);
// Create the experiment.
Experiment experiment = new Experiment();
experiment.campaignId = campaignId;
experiment.name = "Interplanetary Cruise #" + ExampleUtilities.GetRandomString();
experiment.queryPercentage = 10;
experiment.startDateTime = DateTime.Now.AddDays(1).ToString("yyyyMMdd HHmmss");
// Optional: Set the end date.
experiment.endDateTime = DateTime.Now.AddDays(30).ToString("yyyyMMdd HHmmss");
// Optional: Set the status.
experiment.status = ExperimentStatus.ACTIVE;
// Create the operation.
ExperimentOperation experimentOperation = new ExperimentOperation();
experimentOperation.@operator = Operator.ADD;
experimentOperation.operand = experiment;
try {
// Add the experiment.
ExperimentReturnValue experimentRetVal = experimentService.mutate(
new ExperimentOperation[] {experimentOperation});
// Display the results.
if (experimentRetVal != null && experimentRetVal.value != null && experimentRetVal.value.
Length > 0) {
long experimentId = 0;
Experiment newExperiment = experimentRetVal.value[0];
Console.WriteLine("Experiment with name = \"{0}\" and id = \"{1}\" was added.\n",
newExperiment.name, newExperiment.id);
experimentId = newExperiment.id;
// Set ad group for the experiment.
AdGroup adGroup = new AdGroup();
adGroup.id = adGroupId;
// Create experiment bid multiplier rule that will modify ad group bid
// for the experiment.
ManualCPCAdGroupExperimentBidMultipliers adGroupBidMultiplier =
new ManualCPCAdGroupExperimentBidMultipliers();
adGroupBidMultiplier.maxCpcMultiplier = new BidMultiplier();
adGroupBidMultiplier.maxCpcMultiplier.multiplier = 1.5;
// Set experiment data to the ad group.
AdGroupExperimentData adGroupExperimentData = new AdGroupExperimentData();
adGroupExperimentData.experimentId = experimentId;
adGroupExperimentData.experimentDeltaStatus = ExperimentDeltaStatus.MODIFIED;
adGroupExperimentData.experimentBidMultipliers = adGroupBidMultiplier;
adGroup.experimentData = adGroupExperimentData;
// Create the operation.
AdGroupOperation adGroupOperation = new AdGroupOperation();
adGroupOperation.operand = adGroup;
adGroupOperation.@operator = Operator.SET;
// Update the ad group.
AdGroupReturnValue adGroupRetVal = adGroupService.mutate(new AdGroupOperation[] {
adGroupOperation});
// Display the results.
if (adGroupRetVal != null && adGroupRetVal.value != null &&
adGroupRetVal.value.Length > 0) {
AdGroup updatedAdGroup = adGroupRetVal.value[0];
Console.WriteLine("Ad group with name = \"{0}\", id = \"{1}\" and status = \"{2}\" " +
"was updated for the experiment.\n", updatedAdGroup.name, updatedAdGroup.id,
updatedAdGroup.status);
} else {
Console.WriteLine("No ad groups were updated.");
}
// Set ad group criteria for the experiment.
Criterion criterion = new Criterion();
criterion.id = criterionId;
BiddableAdGroupCriterion adGroupCriterion = new BiddableAdGroupCriterion();
adGroupCriterion.adGroupId = adGroupId;
adGroupCriterion.criterion = criterion;
// Create experiment bid multiplier rule that will modify criterion bid
// for the experiment.
ManualCPCAdGroupCriterionExperimentBidMultiplier bidMultiplier =
new ManualCPCAdGroupCriterionExperimentBidMultiplier();
bidMultiplier.maxCpcMultiplier = new BidMultiplier();
bidMultiplier.maxCpcMultiplier.multiplier = 1.5;
// Set experiment data to the criterion.
BiddableAdGroupCriterionExperimentData adGroupCriterionExperimentData =
new BiddableAdGroupCriterionExperimentData();
adGroupCriterionExperimentData.experimentId = experimentId;
adGroupCriterionExperimentData.experimentDeltaStatus = ExperimentDeltaStatus.MODIFIED;
adGroupCriterionExperimentData.experimentBidMultiplier = bidMultiplier;
adGroupCriterion.experimentData = adGroupCriterionExperimentData;
// Create the operation.
AdGroupCriterionOperation adGroupCriterionOperation = new AdGroupCriterionOperation();
adGroupCriterionOperation.operand = adGroupCriterion;
adGroupCriterionOperation.@operator = Operator.SET;
// Update the ad group criteria.
AdGroupCriterionReturnValue adGroupCriterionRetVal = adGroupCriterionService.mutate(
new AdGroupCriterionOperation[] {adGroupCriterionOperation});
// Display the results.
if (adGroupCriterionRetVal != null && adGroupCriterionRetVal.value != null &&
adGroupCriterionRetVal.value.Length > 0) {
AdGroupCriterion updatedAdGroupCriterion = adGroupCriterionRetVal.value[0];
Console.WriteLine("Ad group criterion with ad group id = \"{0}\", criterion id = "
+ "\"{1}\" and type = \"{2}\" was updated for the experiment.\n",
updatedAdGroupCriterion.adGroupId, updatedAdGroupCriterion.criterion.id,
updatedAdGroupCriterion.criterion.CriterionType);
} else {
Console.WriteLine("No ad group criteria were updated.");
}
} else {
Console.WriteLine("No experiments were added.");
}
} catch (Exception ex) {
throw new System.ApplicationException("Failed to add experiment.", ex);
}
}