Here is the full code the purpose of it is to read from a database and 
upload groups of hashed emails based on Clientid/Campaign and then assign 
them to clientid then 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 adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
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 adwords-api+unsubscr...@googlegroups.com.
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/84108ad4-4839-496e-a763-6b5a9e6618e7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
  • Adding a list ... kuppa . janakiram
    • Re: Addin... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
      • Re: A... kuppa . janakiram
        • R... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
          • ... Kuppa . Janakiram
            • ... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
              • ... Kuppa . Janakiram
                • ... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
                • ... Kuppa . Janakiram
                • ... Kuppa . Janakiram
                • ... Kuppa . Janakiram
                • ... Kuppa . Janakiram
                • ... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
                • ... Kuppa . Janakiram
                • ... Kuppa . Janakiram
                • ... Kuppa . Janakiram
                • ... 'Shwetha Vastrad (AdWords API Team)' via AdWords API Forum
                • ... Kuppa . Janakiram
                • ... 'Nadine Sundquist (AdWords API Team)' via AdWords API Forum

Reply via email to