ProductPartitionTree partitionTree = ProductPartitionTree .createAdGroupTree(adWordsServices, authService.getSession(), partition.getAdGroupId());
[INFO ] c.g.a.a.a.l.c.AdWordsServiceClient.requestInfoLogger - Request made: Service: AdGroupCriterionService Method: get clientCustomerId: XXX-XXX-XXXX URL: https://adwords.google.com/api/adwords/cm/v201806/AdGroupCriterionService Request ID: 00056f250bff1d980a37ad11c90e5b30 ResponseTime(ms): 243 OperationsCount: 1 IsFault: false FaultMessage: null (RemoteCallLoggerDelegate.java:146)#logRequestSummary
errors=[RateExceededError{apiErrorType=RateExceededError, errorString=RateExceededError.RATE_EXCEEDED, fieldPath=, rateName=OperationsPerDay, rateScope=DEVELOPER, reason=RATE_EXCEEDED, retryAfterSeconds=86400, trigger=Basic Access Operations Quota}]}
$operation = ProductPartitions::createAddOperation($criterion);
ProductPartition rootPartition = new ProductPartition();rootPartition.setPartitionType(ProductPartitionType.SUBDIVISION);
// There Should be some code to create operations !!!
2018-06-27 13:39:59.625 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Operation [0] - SUCCESS2018-06-27 13:39:59.625 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Operation [1] - FAILURE2018-06-27 13:39:59.625 ERROR 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Processing error : errorType=AdGroupCriterionError, trigger=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, errorString=AdGroupCriterionError.PRODUCT_PARTITION_SUBDIVISION_REQUIRES_OTHERS_CASE, fieldPath=operations[1].operand2018-06-27 13:39:59.625 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Sending group results GroupResult(pdid=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, status=FAIL)2018-06-27 13:39:59.630 INFO 23531 --- [pool-2-thread-1] o.s.i.codec.kryo.CompositeKryoRegistrar : registering [40, java.io.File] with serializer org.springframework.integration.codec.kryo.FileSerializer2018-06-27 13:39:59.651 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Operation [2] - FAILURE2018-06-27 13:39:59.651 ERROR 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Processing error : errorType=RequiredError, trigger=, errorString=RequiredError.REQUIRED, fieldPath=operations[2].operand.biddingStrategyConfiguration2018-06-27 13:39:59.651 ERROR 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Processing error : errorType=AdGroupCriterionError, trigger=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, errorString=AdGroupCriterionError.PRODUCT_PARTITION_SUBDIVISION_REQUIRES_OTHERS_CASE, fieldPath=operations[2].operand2018-06-27 13:39:59.651 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Sending group results GroupResult(pdid=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, status=FAIL)2018-06-27 13:39:59.651 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Operation [3] - FAILURE2018-06-27 13:39:59.651 ERROR 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Processing error : errorType=RequiredError, trigger=, errorString=RequiredError.REQUIRED, fieldPath=operations[3].operand.biddingStrategyConfiguration2018-06-27 13:39:59.651 ERROR 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Processing error : errorType=AdGroupCriterionError, trigger=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, errorString=AdGroupCriterionError.PRODUCT_PARTITION_SUBDIVISION_REQUIRES_OTHERS_CASE, fieldPath=operations[3].operand2018-06-27 13:39:59.651 INFO 23531 --- [pool-2-thread-1] d.p.m.a.service.service.GroupService : Sending group results GroupResult(pdid=ProductPartition{id=TempCriterionId{id=1}, bidSimulatorStatus=null, partitionType=SUBDIVISION, parentCriterionId=null, productGroup=null, productGroupObsoleteStatus=null, caseValue=null, decisionPath=[], salesCountry=null, merchantId=null, hasPromotedSuggestion=null}, status=FAIL)
/** * Create Product Partition Operations for provided AdGroupOperations * * @param adGroupOperations * @return */ private List<AdGroupCriterionOperation> buildPartitions(List<AdGroupOperation> adGroupOperations) { List<AdGroupCriterionOperation> adGroupCriterionOperations = new LinkedList<>(); adGroupOperations.forEach(adGroupOperation -> { AdGroup adGroup = adGroupOperation.getOperand();
if (AdGroupStatus.REMOVED.equals(adGroup.getStatus())) { return; }
// --- Create Root Subdivision --------------------------
// Create AdGroupCriterionOperation. ProductPartition rootPartition = new ProductPartition(); rootPartition.setPartitionType(ProductPartitionType.SUBDIVISION);
rootPartition.setId(adGroup.getId());
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion biddableAdGroupCriterion = new BiddableAdGroupCriterion();
biddableAdGroupCriterion.setAdGroupId(adGroup.getId()); biddableAdGroupCriterion.setCriterion(rootPartition);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation rootOperation = new AdGroupCriterionOperation(); rootOperation.setOperand(biddableAdGroupCriterion); rootOperation.setOperator(Operator.ADD);
// --- Create Product Dimensions ---------------------- ProductOfferId dimensionType = ProductDimensions.createOfferId(adGroup.getName()); ProductOfferId emptyDimensionType = new ProductOfferId();
// --- Create Product ID UNIT -------------------------- ProductPartition productNode = new ProductPartition(); productNode.setPartitionType(ProductPartitionType.UNIT); productNode.setCaseValue(dimensionType); productNode.setParentCriterionId(rootPartition.getId());
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion productAdGroupCriterion = new BiddableAdGroupCriterion(); productAdGroupCriterion.setAdGroupId(adGroup.getId()); productAdGroupCriterion.setCriterion(productNode);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation productOperation = new AdGroupCriterionOperation(); productOperation.setOperand(productAdGroupCriterion); productOperation.setOperator(Operator.ADD);
// --- Create Others UNIT -------------------------- ProductPartition emptyNode = new ProductPartition(); emptyNode.setPartitionType(ProductPartitionType.UNIT); emptyNode.setCaseValue(emptyDimensionType); emptyNode.setParentCriterionId(rootPartition.getId());
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion emptyAdGroupCriterion = new BiddableAdGroupCriterion(); emptyAdGroupCriterion.setAdGroupId(adGroup.getId()); emptyAdGroupCriterion.setCriterion(emptyNode);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation emptyOperation = new AdGroupCriterionOperation(); emptyOperation.setOperand(emptyAdGroupCriterion); emptyOperation.setOperator(Operator.ADD);
// Add to list. adGroupCriterionOperations.add(rootOperation); adGroupCriterionOperations.add(productOperation); adGroupCriterionOperations.add(emptyOperation); }); return adGroupCriterionOperations; }
productNode.setParentCriterionId(rootPartition.getId());
operations.addAll(adGroupOperations); operations.addAll(buildPartitions(adGroupOperations));
// Use a BatchJobHelper to upload all operations. BatchJobHelper batchJobHelper = adWordsServices .getUtility(authService.getSession(), BatchJobHelper.class); batchJobHelper.uploadBatchJobOperations(operations, batchJob.getUploadUrl().getUrl());
---------------------------------
/** * Create Product Partition Operations for provided AdGroupOperations * * @param adGroupOperations * @return */ private List<AdGroupCriterionOperation> buildPartitions(List<AdGroupOperation> adGroupOperations) { List<AdGroupCriterionOperation> adGroupCriterionOperations = new LinkedList<>(); adGroupOperations.forEach(adGroupOperation -> { AdGroup adGroup = adGroupOperation.getOperand();
if (AdGroupStatus.REMOVED.equals(adGroup.getStatus())) { return; }
// --- Create Product Dimensions ---------------------- ProductOfferId dimensionType = ProductDimensions.createOfferId(adGroup.getName()); ProductOfferId emptyDimensionType = new ProductOfferId();
// --- Create Root Subdivision -------------------------- // Create AdGroupCriterionOperation. ProductPartition rootPartition = new ProductPartition(); rootPartition.setPartitionType(ProductPartitionType.SUBDIVISION); rootPartition.setId(adGroup.getId());
// --- Create Product ID UNIT --------------------------
ProductPartition productNode = new ProductPartition(); productNode.setPartitionType(ProductPartitionType.UNIT); productNode.setCaseValue(dimensionType); productNode.setParentCriterionId(rootPartition.getId());
productNode.setId(adGroup.getId() * 100000 - 1);
// --- Create Others UNIT -------------------------- ProductPartition emptyNode = new ProductPartition(); emptyNode.setPartitionType(ProductPartitionType.UNIT); emptyNode.setCaseValue(emptyDimensionType); emptyNode.setParentCriterionId(rootPartition.getId());
emptyNode.setId(adGroup.getId() * 100000 - 2);
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion productAdGroupCriterion = new BiddableAdGroupCriterion(); productAdGroupCriterion.setAdGroupId(adGroup.getId()); productAdGroupCriterion.setCriterion(productNode);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation productOperation = new AdGroupCriterionOperation(); productOperation.setOperand(productAdGroupCriterion); productOperation.setOperator(Operator.ADD);
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion emptyAdGroupCriterion = new BiddableAdGroupCriterion(); emptyAdGroupCriterion.setAdGroupId(adGroup.getId()); emptyAdGroupCriterion.setCriterion(emptyNode);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation emptyOperation = new AdGroupCriterionOperation(); emptyOperation.setOperand(emptyAdGroupCriterion); emptyOperation.setOperator(Operator.ADD);
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion biddableAdGroupCriterion = new BiddableAdGroupCriterion(); biddableAdGroupCriterion.setAdGroupId(adGroup.getId()); biddableAdGroupCriterion.setCriterion(rootPartition);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation rootOperation = new AdGroupCriterionOperation(); rootOperation.setOperand(biddableAdGroupCriterion); rootOperation.setOperator(Operator.ADD);
// Add to list. adGroupCriterionOperations.add(productOperation); adGroupCriterionOperations.add(emptyOperation); adGroupCriterionOperations.add(rootOperation); }); return adGroupCriterionOperations; }
productAdGroupCriterion.setBiddingStrategyConfiguration(adGroup.getBiddingStrategyConfiguration()); emptyAdGroupCriterion.setBiddingStrategyConfiguration(adGroup.getBiddingStrategyConfiguration());
partitionNode .addChild(emptyDimensionType) .asExcludedUnit();
partitionNode .addChild(emptyDimensionType) .asExcludedUnit();
batchJobHelper.uploadBatchJobOperations(operations, batchJob.getUploadUrl().getUrl());
---------------------------------
ProductPartition productNode = new ProductPartition(); productNode.setPartitionType(ProductPartitionType.UNIT); productNode.setCaseValue(dimensionType); productNode.setParentCriterionId(rootPartition.getId()); productNode.setId(adGroup.getId() * 100000 - 1);
// --- Create Others UNIT -------------------------- ProductPartition emptyNode = new ProductPartition(); emptyNode.setPartitionType(ProductPartitionType.UNIT); emptyNode.setCaseValue(emptyDimensionType); emptyNode.setParentCriterionId(rootPartition.getId()); emptyNode.setId(adGroup.getId() * 100000 - 2);
// --- Create Product ID UNIT -------------------------- // Create BiddableAdGroupCriterion. BiddableAdGroupCriterion productAdGroupCriterion = new BiddableAdGroupCriterion(); productAdGroupCriterion.setAdGroupId(adGroup.getId()); productAdGroupCriterion.setCriterion(productNode);
productAdGroupCriterion.setBiddingStrategyConfiguration(adGroup.getBiddingStrategyConfiguration());
// Create AdGroupCriterionOperation. AdGroupCriterionOperation productOperation = new AdGroupCriterionOperation(); productOperation.setOperand(productAdGroupCriterion); productOperation.setOperator(Operator.ADD);
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion emptyAdGroupCriterion = new BiddableAdGroupCriterion(); emptyAdGroupCriterion.setAdGroupId(adGroup.getId()); emptyAdGroupCriterion.setCriterion(emptyNode);
emptyAdGroupCriterion.setBiddingStrategyConfiguration(adGroup.getBiddingStrategyConfiguration());
// Create AdGroupCriterionOperation. AdGroupCriterionOperation emptyOperation = new AdGroupCriterionOperation(); emptyOperation.setOperand(emptyAdGroupCriterion); emptyOperation.setOperator(Operator.ADD);
// Create BiddableAdGroupCriterion. BiddableAdGroupCriterion biddableAdGroupCriterion = new BiddableAdGroupCriterion(); biddableAdGroupCriterion.setAdGroupId(adGroup.getId()); biddableAdGroupCriterion.setCriterion(rootPartition);
// Create AdGroupCriterionOperation. AdGroupCriterionOperation rootOperation = new AdGroupCriterionOperation(); rootOperation.setOperand(biddableAdGroupCriterion); rootOperation.setOperator(Operator.ADD);
// Add to list.
adGroupCriterionOperations.add(rootOperation); adGroupCriterionOperations.add(emptyOperation); adGroupCriterionOperations.add(productOperation); }); return adGroupCriterionOperations; }