Here is the whole java code - Purpose of it is to read from a database and
assign the a array of Users to the appropriate Client ID then assign it to
the proper campaignid.
package adwords_crm;
import com.google.api.ads.adwords.axis.factory.AdWordsServices;
import com.google.api.ads.adwords.axis.v201605.cm.CampaignCriterion;
import com.google.api.ads.adwords.axis.v201609.cm.AdGroupCriterionOperation;
import com.google.api.ads.adwords.axis.v201609.cm.
AdGroupCriterionReturnValue;
import com.google.api.ads.adwords.axis.v201609.cm.
AdGroupCriterionServiceInterface;
import com.google.api.ads.adwords.axis.v201609.cm.AdGroupServiceInterface;
import com.google.api.ads.adwords.axis.v201609.cm.ApiException;
import com.google.api.ads.adwords.axis.v201609.cm.BiddableAdGroupCriterion;
import com.google.api.ads.adwords.axis.v201609.cm.CampaignCriterionOperation
;
import com.google.api.ads.adwords.axis.v201609.cm.
CampaignCriterionReturnValue;
import com.google.api.ads.adwords.axis.v201609.cm.CampaignCriterionService;
import com.google.api.ads.adwords.axis.v201609.cm.
CampaignCriterionServiceInterface;
import com.google.api.ads.adwords.axis.v201609.cm.CampaignServiceInterface;
import com.google.api.ads.adwords.axis.v201609.cm.CriterionUserList;
import com.google.api.ads.adwords.axis.v201609.cm.Operator;
import com.google.api.ads.adwords.axis.v201609.rm.
AdwordsUserListServiceInterface;
import com.google.api.ads.adwords.axis.v201609.rm.CrmBasedUserList;
import com.google.api.ads.adwords.axis.v201609.rm.MutateMembersOperand;
import com.google.api.ads.adwords.axis.v201609.rm.
MutateMembersOperandDataType;
import com.google.api.ads.adwords.axis.v201609.rm.MutateMembersOperation;
import com.google.api.ads.adwords.axis.v201609.rm.MutateMembersReturnValue;
import com.google.api.ads.adwords.axis.v201609.rm.UserList;
import com.google.api.ads.adwords.axis.v201609.rm.UserListOperation;
import com.google.api.ads.adwords.axis.v201609.rm.UserListReturnValue;
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.ads.common.lib.conf.ConfigurationLoadException;
import com.google.api.ads.common.lib.exception.OAuthException;
import com.google.api.ads.common.lib.exception.ValidationException;
import com.google.api.client.auth.oauth2.Credential;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
import java.rmi.RemoteException;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
public class CustMatchData {
/**
* Converts ResultSet to ListMultiMap
*
* @param resultSet
* @return
*/
public static String sTDUser = "##";
public static String sTDPassword = "##";
public static String sTDUrl = "jdbc:teradata://acsctd2/database=##";
public static Date date = new Date();
public static String modifiedDate= new SimpleDateFormat("yyyy-MM-dd").
format(date);
private static ResultSet qryCustMatch(){
ResultSet rs = null;
try
{
Class.forName("com.teradata.jdbc.TeraDriver");
//String sSelAll = "SELECT TOP 100 * FROM
mktdevusers.CSP_GOOG_CUSTMATCH_APITEST WHERE campaignid = 747614532 ORDER
BY EmailAddress256Hashed";
String sSelAll = "SELECT TOP 100 FileDesc,EmailAddress256Hashed,
ClientID, CampaignID FROM MKTDEVUSERS.CSP_GOOG_CUSTMATCH_APITEST ";
Connection con = DriverManager.getConnection(sTDUrl, sTDUser,
sTDPassword);
Statement stmt = con.createStatement();
//stmt.setFetchSize(1000);
rs = stmt.executeQuery(sSelAll);
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(0);
}
//ArrayList<List<String>> test = null;
return rs;
}
private static Set<List<String>> createClientAdGroupMap(ResultSet rs)
throws SQLException {
Set<List<String>> clientCampaignTie = new HashSet<>();
while (rs.next()) {
clientCampaignTie.add(Arrays.asList(rs.getString(3), rs.getString(4)));
}
return clientCampaignTie;
}
private static Multimap<String, String> emailClientAdGrpMap(ResultSet rs,
Set<List<String>> clientAdMap) throws SQLException {
Multimap<String, String> multiMap = ArrayListMultimap.create();
while (rs.next()) {
for (List<String> clientAd : clientAdMap){
if (clientAd.get(0).equals(rs.getString(3)) && clientAd.get(1).equals(rs.
getString(4))) {
System.out.println(clientAd.get(0) + " " + clientAd.get(1)+ " " + rs.
getString(3) + " " + rs.getString(4));
multiMap.put(rs.getString(1) + " " + rs.getString(3) + " " + rs.getString(4
) , rs.getString(2));
break;
}
}
}
return multiMap;
}
private static void uploadEmails(Multimap<String, String> emailMappings) {
//Generate a refreshable OAuth2 credential.
try {
Credential oAuth2Credential = new OfflineCredentials.Builder()
.forApi(Api.ADWORDS)
.fromFile()
.build()
.generateCredential();
// Construct an AdWordsSession.
AdWordsSession session = new AdWordsSession.Builder()
.fromFile()
.withOAuth2Credential(oAuth2Credential)
.build();
for (Object key : emailMappings.keySet()) {
String[] keyString = key.toString().split(" ");
String fileDesc = keyString[0];
String clientId = keyString[1];
String campaignId = keyString[2];
session.setClientCustomerId(clientId);
AdWordsServices adWordsServices = new AdWordsServices();
AdwordsUserListServiceInterface userListService =
adWordsServices.get(session, AdwordsUserListServiceInterface.
class);
// Create a user list.
CrmBasedUserList userList = new CrmBasedUserList();
userList.setName(fileDesc);
userList.setDescription("Sample Upload");
// See limit here:
https://support.google.com/adwords/answer/6276125#requirements.
//userList.setMembershipLifeSpan(30L);
// Create operation.
UserListOperation operation = new UserListOperation();
operation.setOperand(userList);
operation.setOperator(Operator.ADD);
// Add user list.
UserListReturnValue result = userListService.mutate(new
UserListOperation[] { operation });
// Display user list.
UserList userListAdded = result.getValue(0);
System.out.printf("User list with name '%s' and ID %d was added.%n",
userListAdded.getName(), userListAdded.getId());
// Get user list ID.
Long userListId = userListAdded.getId();
// Create operation to add members to the user list based on email
addresses.
MutateMembersOperation mutateMembersOperation = new
MutateMembersOperation();
MutateMembersOperand operand = new MutateMembersOperand();
operand.setUserListId(userListId);
// You can optionally provide this field.
operand.setDataType(MutateMembersOperandDataType.EMAIL_SHA256);
// Add email address hashes.
operand.setMembers(emailMappings.get(key.toString()).toArray(new String[
emailMappings.get(key.toString()).size()]));
mutateMembersOperation.setOperand(operand);
mutateMembersOperation.setOperator(Operator.ADD);
// Add members to the user list based on email addresses.
MutateMembersReturnValue mutateMembersResult =
userListService.mutateMembers(new MutateMembersOperation[] {
mutateMembersOperation });
// Display results.
// Reminder: it may take several hours for the list to be populated
with members.
for (UserList userListResult : mutateMembersResult.getUserLists()) {
System.out.printf("%d email addresses were uploaded to user list with
name '%s' and ID %d "
+ "and are scheduled for review.%n",
emailMappings.get(key.toString()).size(), userListResult.getName
(), userListResult.getId());
}
//Campaign operation
CampaignCriterionServiceInterface campaignCriterionService =
adWordsServices.get(session, CampaignCriterionServiceInterface.
class);
long campId = Long.parseLong(campaignId);
CriterionUserList userListCamp = new CriterionUserList();
userListCamp.setUserListId(userListId);
CampaignCriterion criterion = new CampaignCriterion();
criterion.setCampaignId(campId);
criterion.setCriterion(userListCamp);
CampaignCriterionOperation operation_camp = new
CampaignCriterionOperation();
operation.setOperand(criterion);
operation.setOperator(Operator.ADD);
CampaignCriterionOperation[] operations = new CampaignCriterionOperation
[] {operation_camp};
CampaignCriterionReturnValue result_camp = campaignCriterionService.
mutate(operations);
/*
CampaignServiceInterface campaignService =
adWordsServices.get(session, CampaignServiceInterface.class);
long campId = Long.parseLong(campaignId);
CriterionUserList userList_crit_camp = new CriterionUserList();
userList_crit_camp.setUserListId(userListId);
CampaignCriterion criterion = new CampaignCriterion();
criterion.setCampaignId(campId);
criterion.setCriterion(userList_crit_camp);
BiddableAdGroupCriterion criterions = new BiddableAdGroupCriterion();
criterions.setAdGroupId(campId);
criterions.setCriterion(userList_crit_camp);
CampaignCriterionOperation operation_ad = new
CampaignCriterionOperation();
operation_ad.setCampaignId(criterion);
operation_ad.setOperator(Operator.ADD);
AdGroupCriterionOperation[] operations = new
AdGroupCriterionOperation[] {operation_ad};
AdGroupCriterionReturnValue resultad =
campaignService.mutate(operations);
*/
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(0);
}
}
public static void main(String[] args) throws SQLException {
System.setProperty("javax.net.ssl.trustStore",
"C:/Users/e659383/Documents/cacertss");
Set<List<String>> uniquePair = createClientAdGroupMap(qryCustMatch());
Multimap<String, String> uploadList = emailClientAdGrpMap(qryCustMatch(),
uniquePair);
uploadEmails(uploadList);
}
}
On Wednesday, March 15, 2017 at 1:46:13 PM UTC-7, Shwetha Vastrad (AdWords
API Team) wrote:
>
> Hi,
>
> Could you provide the version of the client library and API you are using?
> Also, UserListOperation is applicable for AdwordsUserListService, not
> CampaignCriterionService. Could you send over the complete code so I can
> take a look?
>
> Thanks,
> Shwetha, AdWords API Team.
>
--
--
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
---
You received this message because you are subscribed to the Google Groups
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit
https://groups.google.com/d/msgid/adwords-api/1f6217f9-f98f-4584-bb2e-a84f0c5d419e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.