use of com.google.api.ads.adwords.axis.v201809.rm.StringRuleItem in project googleads-java-lib by googleads.
the class AddRuleBasedUserLists method runExample.
/**
* Runs the example.
*
* @param adWordsServices the services factory.
* @param session the session.
* @throws ApiException if the API request failed with one or more service errors.
* @throws RemoteException if the API request failed due to other errors.
*/
public static void runExample(AdWordsServicesInterface adWordsServices, AdWordsSession session) throws RemoteException {
// Get the AdwordsUserListService.
AdwordsUserListServiceInterface userListService = adWordsServices.get(session, AdwordsUserListServiceInterface.class);
// First rule item group - users who visited the checkout page and had more than one item
// in their shopping cart.
StringKey pageTypeKey = new StringKey("ecomm_pagetype");
StringRuleItem checkoutStringRuleItem = new StringRuleItem();
checkoutStringRuleItem.setKey(pageTypeKey);
checkoutStringRuleItem.setOp(StringRuleItemStringOperator.EQUALS);
checkoutStringRuleItem.setValue("checkout");
RuleItem checkoutRuleItem = new RuleItem();
checkoutRuleItem.setStringRuleItem(checkoutStringRuleItem);
NumberKey cartSizeKey = new NumberKey("cartsize");
NumberRuleItem cartSizeNumberRuleItem = new NumberRuleItem();
cartSizeNumberRuleItem.setKey(cartSizeKey);
cartSizeNumberRuleItem.setOp(NumberRuleItemNumberOperator.GREATER_THAN);
cartSizeNumberRuleItem.setValue(1.0);
RuleItem cartSizeRuleItem = new RuleItem();
cartSizeRuleItem.setNumberRuleItem(cartSizeNumberRuleItem);
// Combine the two rule items into a RuleItemGroup so AdWords will AND their rules
// together.
RuleItemGroup checkoutMultipleItemGroup = new RuleItemGroup();
checkoutMultipleItemGroup.setItems(new RuleItem[] { checkoutRuleItem, cartSizeRuleItem });
// Second rule item group - users who checked out within the next 3 months.
DateKey checkoutDateKey = new DateKey("checkoutdate");
DateRuleItem startDateDateRuleItem = new DateRuleItem();
startDateDateRuleItem.setKey(checkoutDateKey);
startDateDateRuleItem.setOp(DateRuleItemDateOperator.AFTER);
startDateDateRuleItem.setValue(DateTime.now().toString(DATE_FORMAT_STRING));
RuleItem startDateRuleItem = new RuleItem();
startDateRuleItem.setDateRuleItem(startDateDateRuleItem);
DateRuleItem endDateDateRuleItem = new DateRuleItem();
endDateDateRuleItem.setKey(checkoutDateKey);
endDateDateRuleItem.setOp(DateRuleItemDateOperator.BEFORE);
endDateDateRuleItem.setValue(DateTime.now().plusMonths(3).toString(DATE_FORMAT_STRING));
RuleItem endDateRuleItem = new RuleItem();
endDateRuleItem.setDateRuleItem(endDateDateRuleItem);
// Combine the date rule items into a RuleItemGroup.
RuleItemGroup checkedOutNextThreeMonthsItemGroup = new RuleItemGroup();
checkedOutNextThreeMonthsItemGroup.setItems(new RuleItem[] { startDateRuleItem, endDateRuleItem });
// Combine the rule item groups into a Rule so AdWords knows how to apply the rules.
Rule rule = new Rule();
rule.setGroups(new RuleItemGroup[] { checkoutMultipleItemGroup, checkedOutNextThreeMonthsItemGroup });
// ExpressionRuleUserLists can use either CNF or DNF for matching. CNF means 'at least one item
// in each rule item group must match', and DNF means 'at least one entire rule item group must
// match'. DateSpecificRuleUserList only supports DNF. You can also omit the rule type
// altogether to default to DNF.
rule.setRuleType(UserListRuleTypeEnumsEnum.DNF);
// Third and fourth rule item groups.
// Visitors of a page who visited another page.
StringKey urlStringKey = new StringKey("url__");
StringRuleItem site1StringRuleItem = new StringRuleItem();
site1StringRuleItem.setKey(urlStringKey);
site1StringRuleItem.setOp(StringRuleItemStringOperator.EQUALS);
site1StringRuleItem.setValue("example.com/example1");
RuleItem site1RuleItem = new RuleItem();
site1RuleItem.setStringRuleItem(site1StringRuleItem);
StringRuleItem site2StringRuleItem = new StringRuleItem();
site2StringRuleItem.setKey(urlStringKey);
site2StringRuleItem.setOp(StringRuleItemStringOperator.EQUALS);
site2StringRuleItem.setValue("example.com/example2");
RuleItem site2RuleItem = new RuleItem();
site2RuleItem.setStringRuleItem(site2StringRuleItem);
// Create two RuleItemGroups to show that a visitor browsed two sites.
RuleItemGroup site1RuleItemGroup = new RuleItemGroup();
site1RuleItemGroup.setItems(new RuleItem[] { site1RuleItem });
RuleItemGroup site2RuleItemGroup = new RuleItemGroup();
site2RuleItemGroup.setItems(new RuleItem[] { site2RuleItem });
// Create two rules to show that a visitor browsed two sites.
Rule userVisitedSite1Rule = new Rule();
userVisitedSite1Rule.setGroups(new RuleItemGroup[] { site1RuleItemGroup });
Rule userVisitedSite2Rule = new Rule();
userVisitedSite2Rule.setGroups(new RuleItemGroup[] { site2RuleItemGroup });
// Create the user list with no restrictions on site visit date.
ExpressionRuleUserList expressionUserList = new ExpressionRuleUserList();
String creationTimeString = DateTime.now().toString("yyyyMMdd_HHmmss");
expressionUserList.setName("Expression based user list created at " + creationTimeString);
expressionUserList.setDescription("Users who checked out in three month window OR visited the checkout page " + "with more than one item in their cart");
expressionUserList.setRule(rule);
// Optional: Set the prepopulationStatus to REQUESTED to include past users in the user list.
expressionUserList.setPrepopulationStatus(RuleBasedUserListPrepopulationStatus.REQUESTED);
// Create the user list restricted to users who visit your site within the next six months.
DateTime startDate = DateTime.now();
DateTime endDate = startDate.plusMonths(6);
DateSpecificRuleUserList dateUserList = new DateSpecificRuleUserList();
dateUserList.setName("Date rule user list created at " + creationTimeString);
dateUserList.setDescription(String.format("Users who visited the site between %s and %s and " + "checked out in three month window OR visited the checkout page " + "with more than one item in their cart", startDate.toString(DATE_FORMAT_STRING), endDate.toString(DATE_FORMAT_STRING)));
dateUserList.setRule(rule);
// Set the start and end dates of the user list.
dateUserList.setStartDate(startDate.toString(DATE_FORMAT_STRING));
dateUserList.setEndDate(endDate.toString(DATE_FORMAT_STRING));
// Create the user list where "Visitors of a page who did visit another page".
// To create a user list where "Visitors of a page who did not visit another
// page", change the ruleOperator from AND to AND_NOT.
CombinedRuleUserList combinedRuleUserList = new CombinedRuleUserList();
combinedRuleUserList.setName("Combined rule user list created at " + creationTimeString);
combinedRuleUserList.setDescription("Users who visited two sites.");
combinedRuleUserList.setLeftOperand(userVisitedSite1Rule);
combinedRuleUserList.setRightOperand(userVisitedSite2Rule);
combinedRuleUserList.setRuleOperator(CombinedRuleUserListRuleOperator.AND);
// Create operations to add the user lists.
List<UserListOperation> operations = Stream.of(expressionUserList, dateUserList, combinedRuleUserList).map(userList -> {
UserListOperation operation = new UserListOperation();
operation.setOperand(userList);
operation.setOperator(Operator.ADD);
return operation;
}).collect(Collectors.toList());
// Submit the operations.
UserListReturnValue result = userListService.mutate(operations.toArray(new UserListOperation[operations.size()]));
// Display the results.
for (UserList userListResult : result.getValue()) {
System.out.printf("User list added with ID %d, name '%s', status '%s', list type '%s'," + " accountUserListStatus '%s', description '%s'.%n", userListResult.getId(), userListResult.getName(), userListResult.getStatus().getValue(), userListResult.getListType() == null ? null : userListResult.getListType().getValue(), userListResult.getAccountUserListStatus().getValue(), userListResult.getDescription());
}
}
Aggregations