The following Java example shows how to create keywords by using the Campaign Management Web service. This example assumes that you have already determined which ad group ID will be used for the keywords; you must substitute your ad group ID for the adGroupID variable that is assigned 501086322 in the following code.
For an example about creating an ad group and retrieving the ad group ID, see Create Ad Groups in Java.
// This example assumes that you are using Axis 1.4 and
// the Xerxes parser. Additionally, it requires
// pre-compiling the proxy classes by using wsdl2java.
// If you are using a different environment, update it as needed.
// Application-specific name of package.
// If you place this code in a package, invoke the code
// at the command line by typing
// java java_adCenter.MyCreateKeywords
// along with the parameters used for the credentials and developer token.
// If you choose to not place this code in a package, invoke the code
// at the command line by typing
// java MyCreateKeywords
// along with the parameters used for the credentials and developer token.
package java_adCenter;
import java.io.*;
import java.util.*;
import java.net.URL;
import com.microsoft.adapi.*;
import com.microsoft.adcenter.v6.*;
public class MyCreateKeywords
{
public static void main(String[] args)
{
// Application-specific values.
long accountId = 489;
long adGroupId = 501086322;
// The Microsoft adCenter API namespace,
// which is used in the SOAP header.
String namespace =
"https://adcenter.microsoft.com/v6";
// This example URL is for the sandbox environment.
// Update the URL as needed when using the production environment.
String url = "https://sandboxapi.adcenter.microsoft.com/Api/Advertiser/v6/CampaignManagement/CampaignManagementService.svc?wsdl";
// The following is the production environment URL.
// String url = "https://adcenterapi.microsoft.com/Api/Advertiser/v6/CampaignManagement/CampaignManagementService.svc?wsdl";
ICampaignManagementService campaignManagement = null;
CampaignManagementServiceLocator campaignServiceLocator = null;
BasicHttpBinding_ICampaignManagementServiceStub stub = null;
AddKeywordsRequest addKeywordsRequest = null;
AddKeywordsResponse addKeywordsResponse = null;
Keyword[] keywords = null;
com.microsoft.adcenter.v6.Date startDate = null, endDate = null;
try
{
if (args.length != 3)
{
// This application expects the user name, password, and
// developer token to be passed in as command-line arguments.
System.out.println("Correct usage:");
System.out.print("java MyCreateKeywords ");
System.out.println("user_name password developertoken");
System.exit(-1);
}
campaignServiceLocator = new
CampaignManagementServiceLocator();
campaignServiceLocator.setBasicHttpBinding_ICampaignManagementServiceEndpointAddress(url);
campaignManagement =
campaignServiceLocator.getBasicHttpBinding_ICampaignManagementService();
stub = (BasicHttpBinding_ICampaignManagementServiceStub)
campaignManagement;
// Assign values for the credentials and the developer token.
// args[0] is the user name.
// args[1] is the password.
// args[2] is the developer token.
// The application token is reserved for future use and
// does not need to be assigned a value.
stub.setHeader(namespace,
"ApplicationToken", "");
stub.setHeader(namespace,
"DeveloperToken", args[2]);
stub.setHeader(namespace,
"UserName", args[0]);
stub.setHeader(namespace,
"Password", args[1]);
stub.setHeader(namespace,
"CustomerAccountId", accountId);
// This example creates two keywords.
keywords = new Keyword[2];
keywords[0] = new Keyword();
keywords[1] = new Keyword();
// Specify values for the first keyword.
keywords[0].setText("mittens");
keywords[0].setBroadMatchBid(new Bid(.50));
keywords[0].setExactMatchBid(new Bid(1.50));
keywords[0].setNegativeKeywords(null);
// Specify values for the second keyword.
keywords[1].setText("gloves");
keywords[1].setBroadMatchBid(new Bid(.50));
keywords[1].setExactMatchBid(new Bid(1.50));
// Exclude certain words from allowing a match.
// For example, these ads shouldn't
// match a search for "latex gloves" because the
// campaign is only for winter hand wear.
String[] negativeKeywords = new String[]
{
"latex",
"boxing",
"softball",
"baseball"
};
keywords[1].setNegativeKeywords(negativeKeywords);
// Create the service operation request object, and then assign values.
addKeywordsRequest = new AddKeywordsRequest();
addKeywordsRequest.setAdGroupId(adGroupId);
addKeywordsRequest.setKeywords(keywords);
// Make the call to add the ads.
System.out.println(
"Calling CampaignManagement.AddKeywords");
addKeywordsResponse =
campaignManagement.addKeywords(addKeywordsRequest);
// Display the TrackingId that was returned
// in the response header.
System.out.println("Successful AddKeywords call.");
System.out.println(
"TrackingId output from response header:");
System.out.println(
stub.getResponseHeader
(
namespace,
"TrackingId")
);
// Insert a blank line to separate the text that follows.
System.out.println();
// Display the IDs for the ads that were created.
for (int i = 0; i < addKeywordsResponse.getKeywordIds().length; i++)
{
System.out.println(
String.format("Keyword %s was created for '%s'.",
addKeywordsResponse.getKeywordIds()[i],
keywords[i].getText()));
}
}
// Exception handling.
catch (EditorialApiFaultDetail fault)
{
System.out.println("EditorialApiFaultDetail exception encountered.");
System.out.println(String.format("Tracking ID: %s",
fault.getTrackingId()));
// Display editorial error information.
for (int i = 0; i < fault.getEditorialErrors().length; i++)
{
System.out.println(String.format("Editorial validation error for item at array index %s.",
fault.getEditorialErrors()[i].getIndex()));
System.out.println(String.format("\tMessage: %s",
fault.getEditorialErrors()[i].getMessage()));
System.out.println(String.format("\tErrorCode: %s",
fault.getEditorialErrors()[i].getErrorCode()));
System.out.println(String.format("\tFailed text: %s",
fault.getEditorialErrors()[i].getDisapprovedText()));
System.out.println(String.format("\tCode: %s",
fault.getEditorialErrors()[i].getCode()));
}
// Display service operation error information.
for (int i = 0; i < fault.getOperationErrors().length; i++)
{
System.out.println("Operation error encountered:");
System.out.println(String.format("\tMessage: %s",
fault.getOperationErrors()[i].getMessage()));
System.out.println(String.format("\tDetails: %s",
fault.getOperationErrors()[i].getDetails()));
System.out.println(String.format("\tErrorCode: %s",
fault.getOperationErrors()[i].getErrorCode()));
System.out.println(String.format("\tCode: %s",
fault.getOperationErrors()[i].getCode()));
}
// Display batch error information.
for (int i = 0; i < fault.getBatchErrors().length; i++)
{
System.out.println(String.format("Batch error encountered for array index %s.",
fault.getBatchErrors()[i].getIndex()));
System.out.println(String.format("\tMessage: %s",
fault.getBatchErrors()[i].getMessage()));
System.out.println(String.format("\tDetails: %s",
fault.getBatchErrors()[i].getDetails()));
System.out.println(String.format("\tErrorCode: %s",
fault.getBatchErrors()[i].getErrorCode()));
System.out.println(String.format("\tCode: %s",
fault.getBatchErrors()[i].getCode()));
}
// Exit the application or take other action.
System.exit(-1);
}
catch (AdApiFaultDetail fault)
{
System.out.println("AdApiFaultDetail exception encountered.");
System.out.println(String.format("Tracking ID: %s",
fault.getTrackingId()));
// Display API error information.
for (int i = 0; i < fault.getErrors().length; i++)
{
System.out.println("Error encountered:");
System.out.println(String.format("\tMessage: %s",
fault.getErrors()[i].getMessage()));
System.out.println(String.format("\tDetail: %s",
fault.getErrors()[i].getDetail()));
System.out.println(String.format("\tErrorCode: %s",
fault.getErrors()[i].getErrorCode()));
System.out.println(String.format("\tCode: %s",
fault.getErrors()[i].getCode()));
}
// Exit the application or take other action.
System.exit(-1);
}
// Capture exceptions on the client that are unrelated to
// the adCenter API.
catch (Exception e)
{
System.out.print("Error encountered: ");
e.printStackTrace();
// Exit the application or take other action.
System.exit(-1);
}
}
}
Each successfully created keyword is assigned a keyword ID by adCenter. The keyword ID is stored in the Id element of the Keyword object.
When you have received the keyword IDs, you should store them for future use. For information about why storing the IDs is recommended, see Creating an Efficient Microsoft adCenter Application. If you don't store them, you can retrieve them by calling the GetKeywordsByAdGroupId service operation. You can retrieve the properties associated with a keyword by calling the GetKeywordsByIds service operation.
Calling GetKeywordsByAdGroupId or GetAdKeywordsByIds reduces your API quota. For more information, see Quotas in Microsoft adCenter.
When you have successfully created your ads and keywords, the next step is to submit your ad group for approval. For an example about submitting your ad group for approval, see Submit an Ad Group for Approval in Java.
Concepts
Create Ads in Java
Create Ad Groups in Java
Create Campaigns in Java
Submit an Ad Group for Approval in Java