public static void runExample( AdWordsServices adWordsServices, AdWordsSession session, Long adGroupId, Long adId) throws Exception { // Get the AdGroupAdService. AdGroupAdServiceInterface adGroupAdService = adWordsServices.get(session, AdGroupAdServiceInterface.class); // Create ad with updated status. Ad ad = new Ad(); ad.setId(adId); AdGroupAd adGroupAd = new AdGroupAd(); adGroupAd.setAdGroupId(adGroupId); adGroupAd.setAd(ad); adGroupAd.setStatus(AdGroupAdStatus.PAUSED); // Create operations. AdGroupAdOperation operation = new AdGroupAdOperation(); operation.setOperand(adGroupAd); operation.setOperator(Operator.SET); AdGroupAdOperation[] operations = new AdGroupAdOperation[] {operation}; // Update ad. AdGroupAdReturnValue result = adGroupAdService.mutate(operations); // Display ads. for (AdGroupAd adGroupAdResult : result.getValue()) { System.out.println( "Ad with id \"" + adGroupAdResult.getAd().getId() + "\", type \"" + adGroupAdResult.getAd().getAdType() + "\", and status \"" + adGroupAdResult.getStatus() + "\" was updated."); } }
public static void runExample( AdWordsServices adWordsServices, AdWordsSession session, long adGroupId, long adId) throws Exception { // Get the AdGroupAdService. AdGroupAdServiceInterface adGroupAdService = adWordsServices.get(session, AdGroupAdServiceInterface.class); // Create base class ad to avoid setting type specific fields. Ad ad = new Ad(); ad.setId(adId); // Create ad group ad. AdGroupAd adGroupAd = new AdGroupAd(); adGroupAd.setAdGroupId(adGroupId); adGroupAd.setAd(ad); // Create operations. AdGroupAdOperation operation = new AdGroupAdOperation(); operation.setOperand(adGroupAd); operation.setOperator(Operator.REMOVE); AdGroupAdOperation[] operations = new AdGroupAdOperation[] {operation}; // Remove ad. AdGroupAdReturnValue result = adGroupAdService.mutate(operations); // Display ads. for (AdGroupAd adGroupAdResult : result.getValue()) { System.out.println( "Ad with id \"" + adGroupAdResult.getAd().getId() + "\" and type \"" + adGroupAdResult.getAd().getAdType() + "\" was removed."); } }
public static void runExample( AdWordsServices adWordsServices, AdWordsSession session, Long adGroupId) throws Exception { // Enable validateOnly mode. session.setValidateOnly(true); // Get the AdGroupAdService. AdGroupAdServiceInterface adGroupAdService = adWordsServices.get(session, AdGroupAdServiceInterface.class); // Create text ad that violates an exemptable policy. This ad will only // trigger an error in the production environment. TextAd exemptableTextAd = new TextAd(); exemptableTextAd.setHeadline("Mars " + System.currentTimeMillis() + "!!!"); exemptableTextAd.setDescription1("Visit the Red Planet in style."); exemptableTextAd.setDescription2("Low-gravity fun for everyone!"); exemptableTextAd.setDisplayUrl("www.example.com"); exemptableTextAd.setFinalUrls(new String[] {"http://www.example.com/"}); // Create ad group ad. AdGroupAd exemptableAdGroupAd = new AdGroupAd(); exemptableAdGroupAd.setAdGroupId(adGroupId); exemptableAdGroupAd.setAd(exemptableTextAd); // Create operations. AdGroupAdOperation exemptableOperation = new AdGroupAdOperation(); exemptableOperation.setOperand(exemptableAdGroupAd); exemptableOperation.setOperator(Operator.ADD); // Create text ad that violates a non-exemptable policy. TextAd nonExemptableTextAd = new TextAd(); nonExemptableTextAd.setHeadline("Mars Cruise with too long of a headline."); nonExemptableTextAd.setDescription1("Visit the Red Planet in style."); nonExemptableTextAd.setDescription2("Low-gravity fun for everyone."); nonExemptableTextAd.setDisplayUrl("www.example.com"); nonExemptableTextAd.setFinalUrls(new String[] {"http://www.example.com/"}); // Create ad group ad. AdGroupAd nonExemptableAdGroupAd = new AdGroupAd(); nonExemptableAdGroupAd.setAdGroupId(adGroupId); nonExemptableAdGroupAd.setAd(nonExemptableTextAd); // Create operations. AdGroupAdOperation nonExemptableOperation = new AdGroupAdOperation(); nonExemptableOperation.setOperand(nonExemptableAdGroupAd); nonExemptableOperation.setOperator(Operator.ADD); AdGroupAdOperation[] operations = new AdGroupAdOperation[] {exemptableOperation, nonExemptableOperation}; boolean foundNonExemptableErrors; // Repeat the loop below with validateOnly = true until either no errors are found // or the only errors found have isExemptable == true. do { foundNonExemptableErrors = false; try { // Validate the ads. adGroupAdService.mutate(operations); } catch (ApiException e) { Set<Integer> indicesToRemove = new HashSet<Integer>(); for (ApiError error : e.getErrors()) { if (error instanceof PolicyViolationError) { PolicyViolationError policyViolationError = (PolicyViolationError) error; Matcher matcher = operationIndexPattern.matcher(error.getFieldPath()); if (matcher.matches()) { int operationIndex = Integer.parseInt(matcher.group(1)); AdGroupAdOperation operation = operations[operationIndex]; System.out.printf( "Ad with headline '%s' violated %s policy '%s'.%n", ((TextAd) operation.getOperand().getAd()).getHeadline(), policyViolationError.getIsExemptable() ? "exemptable" : "non-exemptable", policyViolationError.getExternalPolicyName()); if (policyViolationError.getIsExemptable()) { // Add exemption request to the operation. System.out.printf( "Adding exemption request for policy name '%s' on text '%s'.%n", policyViolationError.getKey().getPolicyName(), policyViolationError.getKey().getViolatingText()); List<ExemptionRequest> exemptionRequests = new ArrayList<ExemptionRequest>( Arrays.asList( operation.getExemptionRequests() == null ? new ExemptionRequest[] {} : operation.getExemptionRequests())); exemptionRequests.add(new ExemptionRequest(policyViolationError.getKey())); operation.setExemptionRequests( exemptionRequests.toArray(new ExemptionRequest[] {})); } else { // Remove non-exemptable operation. System.out.printf( "Removing non-exemptable operation at index %d.%n", operationIndex); indicesToRemove.add(operationIndex); } } } else { // Non-policy error returned. Matcher matcher = operationIndexPattern.matcher(error.getFieldPath()); if (matcher.matches()) { int operationIndex = Integer.parseInt(matcher.group(1)); AdGroupAdOperation operation = operations[operationIndex]; System.out.printf( "Ad with headline '%s' created non-policy error '%s'.%n", ((TextAd) operation.getOperand().getAd()).getHeadline(), error.getErrorString()); System.out.printf("Removing non-exemptable operation at index %d.%n", operationIndex); indicesToRemove.add(operationIndex); } } } // Remove operations that cannot be exempted. List<AdGroupAdOperation> remainingOperations = new ArrayList<AdGroupAdOperation>(); for (int i = 0; i < operations.length; i++) { if (!indicesToRemove.contains(i)) { foundNonExemptableErrors = true; remainingOperations.add(operations[i]); } } operations = remainingOperations.toArray(new AdGroupAdOperation[] {}); } } while (foundNonExemptableErrors && operations.length > 0); if (operations.length > 0) { // Disable validateOnly so we can submit the AdGroupAds with exemptions. session.setValidateOnly(false); // Add ads with exemptions. AdGroupAdReturnValue result = adGroupAdService.mutate(operations); // Display ads. if (result != null && result.getValue() != null) { for (AdGroupAd adGroupAdResult : result.getValue()) { System.out.printf( "Ad with ID %d and headline '%s' was added.%n", adGroupAdResult.getAd().getId(), ((TextAd) adGroupAdResult.getAd()).getHeadline()); } } } else { System.out.println("No ads were added."); } }