// Copyright 2016 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package adwords.axis.v201607.campaignmanagement; import com.google.api.ads.adwords.axis.factory.AdWordsServices; import com.google.api.ads.adwords.axis.v201607.cm.AdGroup; import com.google.api.ads.adwords.axis.v201607.cm.AdGroupCriterionOperation; import com.google.api.ads.adwords.axis.v201607.cm.AdGroupCriterionServiceInterface; import com.google.api.ads.adwords.axis.v201607.cm.AdGroupExperimentData; import com.google.api.ads.adwords.axis.v201607.cm.AdGroupOperation; import com.google.api.ads.adwords.axis.v201607.cm.AdGroupServiceInterface; import com.google.api.ads.adwords.axis.v201607.cm.BidMultiplier; import com.google.api.ads.adwords.axis.v201607.cm.BiddableAdGroupCriterion; import com.google.api.ads.adwords.axis.v201607.cm.BiddableAdGroupCriterionExperimentData; import com.google.api.ads.adwords.axis.v201607.cm.Criterion; import com.google.api.ads.adwords.axis.v201607.cm.Experiment; import com.google.api.ads.adwords.axis.v201607.cm.ExperimentDeltaStatus; import com.google.api.ads.adwords.axis.v201607.cm.ExperimentOperation; import com.google.api.ads.adwords.axis.v201607.cm.ExperimentReturnValue; import com.google.api.ads.adwords.axis.v201607.cm.ExperimentServiceInterface; import com.google.api.ads.adwords.axis.v201607.cm.ManualCPCAdGroupCriterionExperimentBidMultiplier; import com.google.api.ads.adwords.axis.v201607.cm.ManualCPCAdGroupExperimentBidMultipliers; import com.google.api.ads.adwords.axis.v201607.cm.Operator; import com.google.api.ads.adwords.lib.client.AdWordsSession; import com.google.api.ads.common.lib.auth.OfflineCredentials; import com.google.api.ads.common.lib.auth.OfflineCredentials.Api; import com.google.api.client.auth.oauth2.Credential; import org.joda.time.DateTime; /** * This example creates an experiment using a query percentage of 10, which * defines what fraction of auctions should go to the control split (90%) vs. * the experiment split (10%), then adds experimental bid changes for criteria * and ad groups. To get campaigns, run GetAllCampaigns.java. To get ad groups, * run GetAllAdGroups.java. To get criteria, run GetAllAdGroupCriteria.java. * * <p>Credentials and properties in {@code fromFile()} are pulled from the * "ads.properties" file. See README for more info. */ public class AddExperiment { public static void main(String[] args) throws Exception { // Generate a refreshable OAuth2 credential. Credential oAuth2Credential = new OfflineCredentials.Builder() .forApi(Api.ADWORDS) .fromFile() .build() .generateCredential(); // Construct an AdWordsSession. AdWordsSession session = new AdWordsSession.Builder() .fromFile() .withOAuth2Credential(oAuth2Credential) .build(); // Replace with valid values of your account. long campaignId = Long.parseLong("INSERT_CAMPAIGN_ID_HERE"); long adGroupId = Long.parseLong("INSERT_AD_GROUP_ID_HERE"); long criterionId = Long.parseLong("INSERT_CRITERION_ID_HERE"); AdWordsServices adWordsServices = new AdWordsServices(); runExample(adWordsServices, session, campaignId, adGroupId, criterionId); } public static void runExample( AdWordsServices adWordsServices, AdWordsSession session, Long campaignId, Long adGroupId, Long criterionId) throws Exception { // Get the ExperimentService. ExperimentServiceInterface experimentService = adWordsServices.get(session, ExperimentServiceInterface.class); // Get the AdGroupService. AdGroupServiceInterface adGroupService = adWordsServices.get(session, AdGroupServiceInterface.class); // Get the AdGroupCriterionService. AdGroupCriterionServiceInterface adGroupCriterionService = adWordsServices.get(session, AdGroupCriterionServiceInterface.class); // Create experiment. Experiment experiment = new Experiment(); experiment.setCampaignId(campaignId); experiment.setName("Interplanetary Experiment #" + System.currentTimeMillis()); experiment.setQueryPercentage(10); experiment.setStartDateTime(new DateTime().plusDays(1).toString("yyyyMMdd HHmmss Z")); // You can optionally provide these field(s). experiment.setEndDateTime(new DateTime().plusDays(30).toString("yyyyMMdd HHmmss Z")); // Create operation. ExperimentOperation experimentOperation = new ExperimentOperation(); experimentOperation.setOperand(experiment); experimentOperation.setOperator(Operator.ADD); // Add experiment. ExperimentReturnValue result = experimentService.mutate(new ExperimentOperation[] {experimentOperation}); for (Experiment experimentResult : result.getValue()) { System.out.printf("Experiment with name '%s' and ID %d was added.%n", experimentResult.getName(), experimentResult.getId()); } Long experimentId = result.getValue()[0].getId(); // Set ad group for the experiment. AdGroup adGroup = new AdGroup(); adGroup.setId(adGroupId); // Create experiment bid multiplier rule that will modify ad group bid for // the experiment. ManualCPCAdGroupExperimentBidMultipliers adGroupExperimentBidMultipliers = new ManualCPCAdGroupExperimentBidMultipliers(); adGroupExperimentBidMultipliers.setMaxCpcMultiplier(new BidMultiplier(1.5, null)); // Set experiment data to the ad group. AdGroupExperimentData adGroupExperimentData = new AdGroupExperimentData(); adGroupExperimentData.setExperimentId(experimentId); adGroupExperimentData.setExperimentDeltaStatus(ExperimentDeltaStatus.MODIFIED); adGroupExperimentData.setExperimentBidMultipliers(adGroupExperimentBidMultipliers); adGroup.setExperimentData(adGroupExperimentData); // Create operation. AdGroupOperation adGroupOperation = new AdGroupOperation(); adGroupOperation.setOperand(adGroup); adGroupOperation.setOperator(Operator.SET); // Update ad group. adGroup = adGroupService.mutate(new AdGroupOperation[] {adGroupOperation}).getValue()[0]; System.out.printf("Ad group with name '%s' and ID %d was updated for the experiment.%n", adGroup.getName(), adGroup.getId()); // Set ad group criterion for the experiment. BiddableAdGroupCriterion adGroupCriterion = new BiddableAdGroupCriterion(); adGroupCriterion.setCriterion(new Criterion(criterionId, null, null)); adGroupCriterion.setAdGroupId(adGroupId); // Create experiment bid multiplier rule that will modify ad group bid for // the experiment. ManualCPCAdGroupCriterionExperimentBidMultiplier adGroupCriterionExperimentBidMultiplier = new ManualCPCAdGroupCriterionExperimentBidMultiplier(); adGroupCriterionExperimentBidMultiplier.setMaxCpcMultiplier(new BidMultiplier(1.5, null)); // Set experiment data to the ad group. BiddableAdGroupCriterionExperimentData adGroupCriterionExperimentData = new BiddableAdGroupCriterionExperimentData(); adGroupCriterionExperimentData.setExperimentId(experimentId); adGroupCriterionExperimentData.setExperimentDeltaStatus(ExperimentDeltaStatus.MODIFIED); adGroupCriterionExperimentData .setExperimentBidMultiplier(adGroupCriterionExperimentBidMultiplier); adGroupCriterion.setExperimentData(adGroupCriterionExperimentData); // Create operation. AdGroupCriterionOperation adGroupCriterionOperation = new AdGroupCriterionOperation(); adGroupCriterionOperation.setOperand(adGroupCriterion); adGroupCriterionOperation.setOperator(Operator.SET); // Update ad group criterion. adGroupCriterion = (BiddableAdGroupCriterion) adGroupCriterionService.mutate( new AdGroupCriterionOperation[] {adGroupCriterionOperation}).getValue()[0]; System.out.printf("Ad group criterion with ad group ID %d and criterion ID %d " + "was updated for the experiment.%n", adGroupCriterion.getAdGroupId(), adGroupCriterion.getCriterion().getId()); } }