From 7f6199dd4d485e893be7d12c8992148b30c6a01d Mon Sep 17 00:00:00 2001 From: Eric Urban Date: Thu, 27 Oct 2016 12:37:07 -0700 Subject: [PATCH 1/2] expanded text ads are GA --- .../bingads/examples/v10/BulkExampleBase.java | 90 +++++--- .../bingads/examples/v10/BulkKeywordsAds.java | 67 +++--- .../bingads/examples/v10/ExampleBase.java | 207 ++++++++++-------- .../bingads/examples/v10/KeywordsAds.java | 74 +++---- 4 files changed, 239 insertions(+), 199 deletions(-) diff --git a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/BulkExampleBase.java b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/BulkExampleBase.java index a0f65a754a..94288a9b9f 100644 --- a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/BulkExampleBase.java +++ b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/BulkExampleBase.java @@ -51,6 +51,7 @@ import com.microsoft.bingads.v10.bulk.entities.BulkSiteLink; import com.microsoft.bingads.v10.bulk.entities.BulkSiteLinkAdExtension; import com.microsoft.bingads.v10.bulk.entities.BulkTextAd; +import com.microsoft.bingads.v10.bulk.entities.BulkExpandedTextAd; import com.microsoft.bingads.v10.bulk.entities.PerformanceData; import com.microsoft.bingads.v10.bulk.entities.QualityScoreData; import com.microsoft.bingads.v10.bulk.entities.BidSuggestionData; @@ -152,7 +153,7 @@ static void outputBulkBudgets(Iterable bulkEntities){ outputBudget(entity.getBudget()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); } } } @@ -174,7 +175,7 @@ static void outputBulkCampaigns(Iterable bulkEntities){ outputCampaign(entity.getCampaign()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); } } } @@ -197,32 +198,65 @@ static void outputBulkAdGroups(Iterable bulkEntities){ outputAdGroup(entity.getAdGroup()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); } } } static void outputBulkTextAds(Iterable bulkEntities){ for (BulkTextAd entity : bulkEntities){ - outputStatusMessage("BulkTextAd: \n"); - outputStatusMessage(String.format("TextAd DisplayUrl: %s\nTextAd Id: %s", - entity.getAd().getDisplayUrl(), - entity.getAd().getId())); + outputStatusMessage("\nBulkTextAd: \n"); + outputStatusMessage(String.format("AdGroupId: %s", entity.getAdGroupId())); + outputStatusMessage(String.format("AdGroupName: %s", entity.getAdGroupName())); + outputStatusMessage(String.format("CampaignName: %s", entity.getCampaignName())); + outputStatusMessage(String.format("ClientId: %s", entity.getClientId())); + if(entity.getLastModifiedTime() != null){ + outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); + } + + outputBulkPerformanceData(entity.getPerformanceData()); + + // Output the Campaign Management TextAd Object + outputTextAd(entity.getTextAd()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); + } + } + } + + static void outputBulkExpandedTextAds(Iterable bulkEntities){ + for (BulkExpandedTextAd entity : bulkEntities){ + outputStatusMessage("\nBulkExpandedTextAd: \n"); + outputStatusMessage(String.format("AdGroupId: %s", entity.getAdGroupId())); + outputStatusMessage(String.format("AdGroupName: %s", entity.getAdGroupName())); + outputStatusMessage(String.format("CampaignName: %s", entity.getCampaignName())); + outputStatusMessage(String.format("ClientId: %s", entity.getClientId())); + if(entity.getLastModifiedTime() != null){ + outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); + } + + outputBulkPerformanceData(entity.getPerformanceData()); + + // Output the Campaign Management ExpandedTextAd Object + outputExpandedTextAd(entity.getExpandedTextAd()); + + if(entity.hasErrors()){ + outputBulkErrors(entity.getErrors()); } } } static void outputBulkKeywords(Iterable bulkEntities){ for (BulkKeyword entity : bulkEntities){ - outputStatusMessage("BulkKeyword: \n"); + outputStatusMessage("\nBulkKeyword: \n"); outputStatusMessage(String.format("AdGroupId: {0}", entity.getAdGroupId())); outputStatusMessage(String.format("AdGroupName: {0}", entity.getAdGroupName())); outputStatusMessage(String.format("CampaignName: {0}", entity.getCampaignName())); outputStatusMessage(String.format("ClientId: {0}", entity.getClientId())); - outputStatusMessage(String.format("LastModifiedTime: {0}", entity.getLastModifiedTime())); + if(entity.getLastModifiedTime() != null){ + outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); + } outputBulkPerformanceData(entity.getPerformanceData()); outputBulkQualityScoreData(entity.getQualityScoreData()); @@ -245,7 +279,7 @@ static void outputBulkProductAds(Iterable bulkEntities){ outputStatusMessage(String.format("CampaignName: %s", entity.getCampaignName())); outputStatusMessage(String.format("ClientId: %s", entity.getClientId())); if(entity.getLastModifiedTime() != null){ - outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); + outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); } outputBulkPerformanceData(entity.getPerformanceData()); @@ -254,7 +288,7 @@ static void outputBulkProductAds(Iterable bulkEntities){ outputProductAd(entity.getProductAd()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); } } } @@ -265,14 +299,14 @@ static void outputBulkCampaignProductScopes(Iterable b outputStatusMessage(String.format("CampaignName: %s", entity.getCampaignName())); outputStatusMessage(String.format("ClientId: %s", entity.getClientId())); if(entity.getLastModifiedTime() != null){ - outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); + outputStatusMessage(String.format("LastModifiedTime: %s", entity.getLastModifiedTime().getTime())); } // Output the Campaign Management CampaignCriterion and ProductScope Objects outputCampaignCriterionWithProductScope(entity.getCampaignCriterion()); if(entity.hasErrors()){ - outputBulkErrors(entity.getErrors()); + outputBulkErrors(entity.getErrors()); } } } @@ -284,14 +318,14 @@ static void outputBulkAdGroupProductPartitions(Iterable // then there will be no BulkCampaignDayTimeTargetBid objects. For example if you want to print the // BulkCampaignDayTimeTarget prior to upload. if (entity.getBids().size() == 0 && entity.getDayTimeTarget() != null){ - outputStatusMessage("BulkCampaignDayTimeTarget: \n"); + outputStatusMessage("\nBulkCampaignDayTimeTarget: \n"); outputStatusMessage(String.format("Campaign Name: %s\n", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s\n", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -667,7 +701,7 @@ static void outputBulkCampaignDayTimeTargets(Iterable static void outputBulkCampaignDayTimeTargetBids(Iterable bulkEntities){ for (BulkCampaignDayTimeTargetBid entity : bulkEntities){ - outputStatusMessage("BulkCampaignDayTimeTargetBid: \n"); + outputStatusMessage("\nBulkCampaignDayTimeTargetBid: \n"); outputStatusMessage(String.format("Campaign Name: %s", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -680,7 +714,7 @@ static void outputBulkCampaignDayTimeTargetBids(Iterable bulkEntities){ for (BulkCampaignLocationTargetBid entity : bulkEntities){ - outputStatusMessage("BulkCampaignDayTimeTargetBid: \n"); + outputStatusMessage("\nBulkCampaignDayTimeTargetBid: \n"); outputStatusMessage(String.format("Campaign Name: %s", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -758,7 +792,7 @@ static void outputBulkCampaignLocationTargetBids(Iterable b // then there will be no BulkCampaignRadiusTargetBid objects. For example if you want to print the // BulkCampaignRadiusTarget prior to upload. if (entity.getBids().size() == 0 && entity.getRadiusTarget() != null){ - outputStatusMessage("BulkCampaignRadiusTarget: \n"); + outputStatusMessage("\nBulkCampaignRadiusTarget: \n"); outputStatusMessage(String.format("Campaign Name: %s\n", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s\n", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -791,7 +825,7 @@ static void outputBulkCampaignRadiusTargets(Iterable b static void outputBulkCampaignRadiusTargetBids(Iterable bulkEntities){ for (BulkCampaignRadiusTargetBid entity : bulkEntities){ - outputStatusMessage("BulkCampaignRadiusTargetBid: \n"); + outputStatusMessage("\nBulkCampaignRadiusTargetBid: \n"); outputStatusMessage(String.format("Campaign Name: %s\n", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s\n", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -805,7 +839,7 @@ static void outputBulkCampaignRadiusTargetBids(Iterable bulkEntities){ for (BulkCampaignDeviceOsTargetBid entity : bulkEntities){ - outputStatusMessage("BulkCampaignDeviceOsTargetBid: \n"); + outputStatusMessage("\nBulkCampaignDeviceOsTargetBid: \n"); outputStatusMessage(String.format("Campaign Name: %s", entity.getCampaignName())); outputStatusMessage(String.format("Campaign Id: %s", entity.getCampaignId())); outputStatusMessage(String.format("Target Id: %s\n", entity.getTargetId())); @@ -844,7 +878,7 @@ static void outputBulkCampaignDeviceOsTargetBids(Iterable bulkTextAds = new ArrayList(); + ArrayList bulkExpandedTextAds = new ArrayList(); for(int i=0; i < 5; i++){ - BulkTextAd bulkTextAd = new BulkTextAd(); - bulkTextAd.setAdGroupId(adGroupIdKey); - TextAd textAd = new TextAd(); - textAd.setText("Huge Savings on red shoes."); - textAd.setDisplayUrl("Contoso.com"); - - // If you are currently using the Destination URL, you must upgrade to Final URLs. - // Here is an example of a DestinationUrl you might have used previously. - // textAd.setDestinationUrl("http://www.contoso.com/womenshoesale/?season=spring&promocode=PROMO123"); - - // To migrate from DestinationUrl to FinalUrls for existing ads, you can set DestinationUrl - // to an empty string when updating the ad. If you are removing DestinationUrl, - // then FinalUrls is required. - // textAd.setDestinationUrl(""); + BulkExpandedTextAd bulkExpandedTextAd = new BulkExpandedTextAd(); + bulkExpandedTextAd.setAdGroupId(adGroupIdKey); + ExpandedTextAd expandedTextAd = new ExpandedTextAd(); + expandedTextAd.setTitlePart1("Contoso"); + expandedTextAd.setTitlePart2("Fast & Easy Setup"); + expandedTextAd.setText("Find New Customers & Increase Sales! Start Advertising on Contoso Today."); + expandedTextAd.setPath1("seattle"); + expandedTextAd.setPath2("shoe sale"); // With FinalUrls you can separate the tracking template, custom parameters, and // landing page URLs. com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring finalUrls = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring(); finalUrls.getStrings().add("http://www.contoso.com/womenshoesale"); - textAd.setFinalUrls(finalUrls); + expandedTextAd.setFinalUrls(finalUrls); // Final Mobile URLs can also be used if you want to direct the user to a different page // for mobile devices. com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring finalMobileUrls = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring(); finalMobileUrls.getStrings().add("http://mobile.contoso.com/womenshoesale"); - textAd.setFinalMobileUrls(finalMobileUrls); + expandedTextAd.setFinalMobileUrls(finalMobileUrls); // You could use a tracking template which would override the campaign level // tracking template. Tracking templates defined for lower level entities // override those set for higher level entities. // In this example we are using the campaign level tracking template. - textAd.setTrackingUrlTemplate(null); + expandedTextAd.setTrackingUrlTemplate(null); // Set custom parameters that are specific to this ad, // and can be used by the ad, ad group, campaign, or account level tracking template. @@ -227,29 +221,28 @@ public static void main(String[] args) { customParameter2.setValue("summer"); customParameters.getCustomParameters().add(customParameter2); urlCustomParameters.setParameters(customParameters); - textAd.setUrlCustomParameters(urlCustomParameters); + expandedTextAd.setUrlCustomParameters(urlCustomParameters); - bulkTextAd.setTextAd(textAd); - bulkTextAds.add(bulkTextAd); + bulkExpandedTextAd.setExpandedTextAd(expandedTextAd); + bulkExpandedTextAds.add(bulkExpandedTextAd); } // This example sets ad format preference to Native only for the first ad. - com.microsoft.bingads.v10.campaignmanagement.ArrayOfKeyValuePairOfstringstring textAdFCM = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfKeyValuePairOfstringstring(); + com.microsoft.bingads.v10.campaignmanagement.ArrayOfKeyValuePairOfstringstring expandedTextAdFCM = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfKeyValuePairOfstringstring(); com.microsoft.bingads.v10.campaignmanagement.KeyValuePairOfstringstring adFormatPreference = new com.microsoft.bingads.v10.campaignmanagement.KeyValuePairOfstringstring(); adFormatPreference.setKey("NativePreference"); adFormatPreference.setValue("True"); - textAdFCM.getKeyValuePairOfstringstrings().add(adFormatPreference); - bulkTextAds.get(0).getAd().setForwardCompatibilityMap(textAdFCM); + expandedTextAdFCM.getKeyValuePairOfstringstrings().add(adFormatPreference); + bulkExpandedTextAds.get(0).getAd().setForwardCompatibilityMap(expandedTextAdFCM); + + bulkExpandedTextAds.get(1).getAd().setTitlePart2("Quick & Easy Setu"); + bulkExpandedTextAds.get(2).getAd().setTitlePart2("Fast & Simple Setup"); + bulkExpandedTextAds.get(3).getAd().setTitlePart2(""); + bulkExpandedTextAds.get(4).getAd().setTitlePart2("Quick & Easy Setup"); // In this example only the second keyword should succeed. The Text of the first keyword exceeds the limit, // and the third keyword is a duplicate of the second keyword. - bulkTextAds.get(0).getAd().setTitle("Women's Shoe Sale"); - bulkTextAds.get(1).getAd().setTitle("Women's Super Shoe Sale"); - bulkTextAds.get(2).getAd().setTitle("Women's Red Shoe Sale"); - bulkTextAds.get(3).getAd().setTitle(""); - bulkTextAds.get(4).getAd().setTitle("Women's Super Shoe Sale"); - BulkKeyword[] bulkKeywords = new BulkKeyword[3]; Keyword[] keywords = new Keyword[3]; @@ -306,8 +299,8 @@ public static void main(String[] args) { uploadEntities.add(bulkKeyword); } - for (BulkTextAd bulkTextAd : bulkTextAds) { - uploadEntities.add(bulkTextAd); + for (BulkExpandedTextAd bulkExpandedTextAd : bulkExpandedTextAds) { + uploadEntities.add(bulkExpandedTextAd); } outputStatusMessage("\nAdding campaign, ad group, ads, and keywords...\n"); @@ -332,8 +325,8 @@ else if (entity instanceof BulkCampaign) { else if (entity instanceof BulkAdGroup) { outputBulkAdGroups(Arrays.asList((BulkAdGroup) entity) ); } - else if (entity instanceof BulkTextAd) { - outputBulkTextAds(Arrays.asList((BulkTextAd) entity) ); + else if (entity instanceof BulkExpandedTextAd) { + outputBulkExpandedTextAds(Arrays.asList((BulkExpandedTextAd) entity) ); } else if (entity instanceof BulkKeyword) { outputBulkKeywords(Arrays.asList((BulkKeyword) entity) ); @@ -431,7 +424,7 @@ else if (entity instanceof BulkCampaign) { //You must set the Id field to the corresponding entity identifier, and the Status field to Deleted. - //When you delete a BulkCampaign, the dependent entities such as BulkAdGroup, BulkKeyword, and BulkTextAd + //When you delete a BulkCampaign, the dependent entities such as BulkAdGroup, BulkKeyword, and BulkExpandedTextAd //are deleted without being specified explicitly. uploadEntities = new ArrayList(); diff --git a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/ExampleBase.java b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/ExampleBase.java index f53c7aefe4..73d4c6d19a 100644 --- a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/ExampleBase.java +++ b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/ExampleBase.java @@ -96,16 +96,6 @@ static void outputAdGroup(AdGroup adGroup){ } } - static void outputProductAd(ProductAd productAd){ - if (productAd != null) { - outputStatusMessage(String.format("DevicePreference: %s", productAd.getDevicePreference())); - outputStatusMessage(String.format("EditorialStatus: %s", productAd.getEditorialStatus())); - outputStatusMessage(String.format("Id: %s", productAd.getId())); - outputStatusMessage(String.format("PromotionalText: %s", productAd.getPromotionalText())); - outputStatusMessage(String.format("Status: %s", productAd.getStatus())); - } - } - static void outputCampaignCriterionWithProductScope(CampaignCriterion campaignCriterion){ if (campaignCriterion != null) { outputStatusMessage(String.format("BidAdjustment: %s", campaignCriterion.getBidAdjustment())); @@ -183,7 +173,7 @@ static void outputCampaignsWithPartialErrors(ArrayOfCampaign campaigns, ArrayOfN if (campaignIds.getLongs().get(index) != null) { - outputStatusMessage(String.format("Campaign[%d] (Name:%s) successfully added and assigned CampaignId %d\n", + outputStatusMessage(String.format("Campaign[%s] (Name:%s) successfully added and assigned CampaignId %s\n", index, campaigns.getCampaigns().get(index).getName(), campaignIds.getLongs().get(index))); @@ -198,11 +188,11 @@ static void outputCampaignsWithPartialErrors(ArrayOfCampaign campaigns, ArrayOfN // The index of the partial errors is equal to the index of the list // specified in the call to AddCampaigns. - outputStatusMessage(String.format("\nCampaign[%d] (Name:%s) not added due to the following error:\n", + outputStatusMessage(String.format("\nCampaign[%s] (Name:%s) not added due to the following error:\n", error.getIndex(), campaigns.getCampaigns().get(error.getIndex()).getName())); - outputStatusMessage(String.format("\tIndex: %d\n", error.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", error.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", error.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", error.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", error.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n", error.getMessage())); @@ -212,7 +202,7 @@ static void outputCampaignsWithPartialErrors(ArrayOfCampaign campaigns, ArrayOfN outputStatusMessage(String.format("\tDisapprovedText: %s\n", ((EditorialError)(error)).getDisapprovedText())); outputStatusMessage(String.format("\tLocation: %s\n", ((EditorialError)(error)).getLocation())); outputStatusMessage(String.format("\tPublisherCountry: %s\n", ((EditorialError)(error)).getPublisherCountry())); - outputStatusMessage(String.format("\tReasonCode: %d\n", ((EditorialError)(error)).getReasonCode())); + outputStatusMessage(String.format("\tReasonCode: %s\n", ((EditorialError)(error)).getReasonCode())); } } @@ -237,7 +227,7 @@ static void outputAdGroupsWithPartialErrors(ArrayOfAdGroup adGroups, ArrayOfNull if (adGroupIds.getLongs().get(index) != null) { - outputStatusMessage(String.format("AdGroup[%d] (Name:%s) successfully added and assigned AdGroupId %d\n", + outputStatusMessage(String.format("AdGroup[%s] (Name:%s) successfully added and assigned AdGroupId %s\n", index, adGroups.getAdGroups().get(index).getName(), adGroupIds.getLongs().get(index))); @@ -252,11 +242,11 @@ static void outputAdGroupsWithPartialErrors(ArrayOfAdGroup adGroups, ArrayOfNull // The index of the partial errors is equal to the index of the list // specified in the call to AddAdGroups. - outputStatusMessage(String.format("\nAdGroup[%d] (Name:%s) not added due to the following error:\n", + outputStatusMessage(String.format("\nAdGroup[%s] (Name:%s) not added due to the following error:\n", error.getIndex(), adGroups.getAdGroups().get(error.getIndex()).getName())); - outputStatusMessage(String.format("\tIndex: %d\n", error.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", error.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", error.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", error.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", error.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n", error.getMessage())); @@ -266,7 +256,7 @@ static void outputAdGroupsWithPartialErrors(ArrayOfAdGroup adGroups, ArrayOfNull outputStatusMessage(String.format("\tDisapprovedText: %s\n", ((EditorialError)(error)).getDisapprovedText())); outputStatusMessage(String.format("\tLocation: %s\n", ((EditorialError)(error)).getLocation())); outputStatusMessage(String.format("\tPublisherCountry: %s\n", ((EditorialError)(error)).getPublisherCountry())); - outputStatusMessage(String.format("\tReasonCode: %d\n", ((EditorialError)(error)).getReasonCode())); + outputStatusMessage(String.format("\tReasonCode: %s\n", ((EditorialError)(error)).getReasonCode())); } } @@ -344,7 +334,7 @@ static void outputKeywordsWithPartialErrors(ArrayOfKeyword keywords, ArrayOfNull if (keywordIds.getLongs().get(index) != null) { - outputStatusMessage(String.format("Keyword[%d] (Text:%s) successfully added and assigned KeywordId %d\n", + outputStatusMessage(String.format("Keyword[%s] (Text:%s) successfully added and assigned KeywordId %s\n", index, keywords.getKeywords().get(index).getText(), keywordIds.getLongs().get(index))); @@ -359,11 +349,11 @@ static void outputKeywordsWithPartialErrors(ArrayOfKeyword keywords, ArrayOfNull // The index of the partial errors is equal to the index of the list // specified in the call to AddKeywords. - outputStatusMessage(String.format("\nKeyword[%d] (Text:%s) not added due to the following error:\n", + outputStatusMessage(String.format("\nKeyword[%s] (Text:%s) not added due to the following error:\n", error.getIndex(), keywords.getKeywords().get(error.getIndex()).getText())); - outputStatusMessage(String.format("\tIndex: %d\n", error.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", error.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", error.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", error.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", error.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n", error.getMessage())); @@ -373,7 +363,7 @@ static void outputKeywordsWithPartialErrors(ArrayOfKeyword keywords, ArrayOfNull outputStatusMessage(String.format("\tDisapprovedText: %s\n", ((EditorialError)(error)).getDisapprovedText())); outputStatusMessage(String.format("\tLocation: %s\n", ((EditorialError)(error)).getLocation())); outputStatusMessage(String.format("\tPublisherCountry: %s\n", ((EditorialError)(error)).getPublisherCountry())); - outputStatusMessage(String.format("\tReasonCode: %d\n", ((EditorialError)(error)).getReasonCode())); + outputStatusMessage(String.format("\tReasonCode: %s\n", ((EditorialError)(error)).getReasonCode())); } } @@ -389,67 +379,23 @@ static void outputAdsWithPartialErrors(ArrayOfAd ads, ArrayOfNullableOflong adId return; } - java.lang.String[] attributeValues = new java.lang.String[ads.getAds().size()]; - for (int index = 0; index < ads.getAds().size(); index++ ) { - // Determine the type of ad. Prepare the corresponding attribute value to be printed, - // both for successful new ads and partial errors. - - if (ads.getAds().get(index) instanceof TextAd) + if (ads.getAds().get(index) instanceof ExpandedTextAd) { - attributeValues[index] = "Title:" + ((TextAd)ads.getAds().get(index)).getTitle(); - outputStatusMessage(String.format("DestinationUrl: %s", ((TextAd)ads.getAds().get(index)).getDestinationUrl())); + outputExpandedTextAd((ExpandedTextAd)(ads.getAds().get(index))); } else if (ads.getAds().get(index) instanceof ProductAd) { - attributeValues[index] = "PromotionalText:" + ((ProductAd)ads.getAds().get(index)).getPromotionalText(); + outputProductAd((ProductAd)(ads.getAds().get(index))); } - else + else if (ads.getAds().get(index) instanceof TextAd) { - attributeValues[index] = "Unknown Ad Type"; + outputTextAd((TextAd)(ads.getAds().get(index))); } - - // The array of ad identifiers equals the size of the attempted ads. If the element - // is not null, the ad at that index was added successfully and has an ad identifier. - - if (adIds.getLongs().get(index) != null) + else { - outputStatusMessage(String.format("Ad[%d] (%s) successfully added and assigned AdId %d\n", - index, - attributeValues[index], - adIds.getLongs().get(index))); - - Ad ad = ads.getAds().get(index); - - outputStatusMessage("FinalMobileUrls: "); - if (ad.getFinalMobileUrls() != null) - { - for (java.lang.String finalMobileUrl : ad.getFinalMobileUrls().getStrings()) - { - outputStatusMessage(String.format("\t%s", finalMobileUrl)); - } - } - - outputStatusMessage("FinalUrls: "); - if (ad.getFinalUrls() != null) - { - for (java.lang.String finalUrl : ad.getFinalUrls().getStrings()) - { - outputStatusMessage(String.format("\t%s", finalUrl)); - } - } - outputStatusMessage(String.format("TrackingUrlTemplate: %s", ad.getTrackingUrlTemplate())); - outputStatusMessage("UrlCustomParameters: "); - if (ad.getUrlCustomParameters() != null && - ad.getUrlCustomParameters().getParameters() != null) - { - for (CustomParameter customParameter : ad.getUrlCustomParameters().getParameters().getCustomParameters()) - { - outputStatusMessage(String.format("\tKey: %s", customParameter.getKey())); - outputStatusMessage(String.format("\tValue: %s", customParameter.getValue())); - } - } + outputStatusMessage("Unknown Ad Type"); } } @@ -461,10 +407,10 @@ else if (ads.getAds().get(index) instanceof ProductAd) // The index of the partial errors is equal to the index of the list // specified in the call to AddAds. - outputStatusMessage(String.format("\nAd[%d] (%s) not added due to the following error:\n", error.getIndex(), attributeValues[error.getIndex()])); + outputStatusMessage(String.format("\nAd[%s] not added due to the following error:\n", error.getIndex())); - outputStatusMessage(String.format("\tIndex: %d\n", error.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", error.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", error.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", error.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", error.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n", error.getMessage())); @@ -474,12 +420,85 @@ else if (ads.getAds().get(index) instanceof ProductAd) outputStatusMessage(String.format("\tDisapprovedText: %s\n", ((EditorialError)(error)).getDisapprovedText())); outputStatusMessage(String.format("\tLocation: %s\n", ((EditorialError)(error)).getLocation())); outputStatusMessage(String.format("\tPublisherCountry: %s\n", ((EditorialError)(error)).getPublisherCountry())); - outputStatusMessage(String.format("\tReasonCode: %d\n", ((EditorialError)(error)).getReasonCode())); + outputStatusMessage(String.format("\tReasonCode: %s\n", ((EditorialError)(error)).getReasonCode())); } } outputStatusMessage(""); } + static void outputAd(Ad ad){ + if(ad != null){ + outputStatusMessage(String.format("DevicePreference: %s", ad.getDevicePreference())); + outputStatusMessage("FinalMobileUrls: "); + if (ad.getFinalMobileUrls() != null) + { + for (java.lang.String finalMobileUrl : ad.getFinalMobileUrls().getStrings()) + { + outputStatusMessage(String.format("\t%s", finalMobileUrl)); + } + } + + outputStatusMessage("FinalUrls: "); + if (ad.getFinalUrls() != null) + { + for (java.lang.String finalUrl : ad.getFinalUrls().getStrings()) + { + outputStatusMessage(String.format("\t%s", finalUrl)); + } + } + outputStatusMessage(String.format("Status: %s", ad.getStatus())); + outputStatusMessage(String.format("TrackingUrlTemplate: %s", ad.getTrackingUrlTemplate())); + outputStatusMessage(String.format("Type: %s", ad.getType())); + outputStatusMessage("UrlCustomParameters: "); + if (ad.getUrlCustomParameters() != null && ad.getUrlCustomParameters().getParameters() != null) + { + for (CustomParameter customParameter : ad.getUrlCustomParameters().getParameters().getCustomParameters()) + { + outputStatusMessage(String.format("\tKey: %s", customParameter.getKey())); + outputStatusMessage(String.format("\tValue: %s", customParameter.getValue())); + } + } + } + } + + static void outputExpandedTextAd(ExpandedTextAd ad){ + if (ad != null) { + // Output inherited properties of the Ad base class. + outputAd(ad); + + // Output properties that are specific to the ExpandedTextAd + outputStatusMessage(String.format("DisplayUrl: %s", ad.getDisplayUrl())); + outputStatusMessage(String.format("Path1: %s", ad.getPath1())); + outputStatusMessage(String.format("Path2: %s", ad.getPath2())); + outputStatusMessage(String.format("Text: %s", ad.getText())); + outputStatusMessage(String.format("TitlePart1: %s", ad.getTitlePart1())); + outputStatusMessage(String.format("TitlePart2: %s", ad.getTitlePart2())); + } + } + + static void outputProductAd(ProductAd ad){ + if (ad != null) { + // Output inherited properties of the Ad base class. + outputAd(ad); + + // Output properties that are specific to the ProductAd + outputStatusMessage(String.format("PromotionalText: %s", ad.getPromotionalText())); + } + } + + static void outputTextAd(TextAd ad){ + if (ad != null) { + // Output inherited properties of the Ad base class. + outputAd(ad); + + // Output properties that are specific to the TextAd + outputStatusMessage(String.format("DestinationUrl: %s", ad.getDestinationUrl())); + outputStatusMessage(String.format("DisplayUrl: %s", ad.getDisplayUrl())); + outputStatusMessage(String.format("Text: %s", ad.getText())); + outputStatusMessage(String.format("Title: %s", ad.getTitle())); + } + } + static AdExtension setReadOnlyAdExtensionElementsToNull(AdExtension extension) { if (extension == null || extension.getId() == null) @@ -927,10 +946,10 @@ static void outputNegativeKeywordIds(ArrayOfIdCollection idCollections) for (int index = 0; index < idCollections.getIdCollections().size(); index++) { - outputStatusMessage(String.format("NegativeKeyword Ids at entity index %d:\n\n", index)); + outputStatusMessage(String.format("NegativeKeyword Ids at entity index %s:\n\n", index)); for (long id : idCollections.getIdCollections().get(index).getIds().getLongs()) { - outputStatusMessage(String.format("\tId: %d\n\n", id)); + outputStatusMessage(String.format("\tId: %s\n\n", id)); } } } @@ -947,7 +966,7 @@ static void outputNegativeKeywords(ArrayOfNegativeKeyword negativeKeywords) for (NegativeKeyword negativeKeyword : negativeKeywords.getNegativeKeywords()) { outputStatusMessage(String.format("\tNegativeKeyword Text: %s\n", negativeKeyword.getText())); - outputStatusMessage(String.format("\tId: %d\n", negativeKeyword.getId())); + outputStatusMessage(String.format("\tId: %s\n", negativeKeyword.getId())); outputStatusMessage(String.format("\tMatchType: %s\n\n", negativeKeyword.getMatchType())); } } @@ -966,7 +985,7 @@ static void outputSharedListItems(ArrayOfSharedListItem sharedListItems) if(sharedListItem instanceof NegativeKeyword) { outputStatusMessage(String.format("\tNegativeKeyword Text: %s\n", ((NegativeKeyword)sharedListItem).getText())); - outputStatusMessage(String.format("\tId: %d\n", ((NegativeKeyword)sharedListItem).getId())); + outputStatusMessage(String.format("\tId: %s\n", ((NegativeKeyword)sharedListItem).getId())); outputStatusMessage(String.format("\tMatchType: %s\n\n", ((NegativeKeyword)sharedListItem).getMatchType())); } } @@ -984,7 +1003,7 @@ static void outputEntityNegativeKeywords(ArrayOfEntityNegativeKeyword entityNega outputStatusMessage("EntityNegativeKeyword items:\n"); for (EntityNegativeKeyword entityNegativeKeyword : entityNegativeKeywords.getEntityNegativeKeywords()) { - outputStatusMessage(String.format("\tEntityId: %d\n", entityNegativeKeyword.getEntityId())); + outputStatusMessage(String.format("\tEntityId: %s\n", entityNegativeKeyword.getEntityId())); outputStatusMessage(String.format("\tEntityType: %s\n\n", entityNegativeKeyword.getEntityType())); outputNegativeKeywords(entityNegativeKeyword.getNegativeKeywords()); } @@ -1001,7 +1020,7 @@ static void outputSharedEntityIdentifiers(ArrayOfSharedEntity sharedEntities) th SharedEntity sharedEntity = sharedEntities.getSharedEntities().get(index); if (sharedEntity.getId() != null) { - outputStatusMessage(String.format("SharedEntity[%d] (%s) has SharedEntity Id %d.\n\n", + outputStatusMessage(String.format("SharedEntity[%s] (%s) has SharedEntity Id %s.\n\n", index, sharedEntities.getSharedEntities().get(index).getName(), sharedEntities.getSharedEntities().get(index).getId())); @@ -1022,8 +1041,8 @@ static void outputPartialErrors(ArrayOfBatchError partialErrors) outputStatusMessage("BatchError (PartialErrors) items:\n"); for (BatchError error : partialErrors.getBatchErrors()) { - outputStatusMessage(String.format("\tIndex: %d\n", error.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", error.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", error.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", error.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", error.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n\n", error.getMessage())); @@ -1033,7 +1052,7 @@ static void outputPartialErrors(ArrayOfBatchError partialErrors) outputStatusMessage(String.format("\tDisapprovedText: %s\n", ((EditorialError)(error)).getDisapprovedText())); outputStatusMessage(String.format("\tLocation: %s\n", ((EditorialError)(error)).getLocation())); outputStatusMessage(String.format("\tPublisherCountry: %s\n", ((EditorialError)(error)).getPublisherCountry())); - outputStatusMessage(String.format("\tReasonCode: %d\n\n", ((EditorialError)(error)).getReasonCode())); + outputStatusMessage(String.format("\tReasonCode: %s\n\n", ((EditorialError)(error)).getReasonCode())); } } } @@ -1059,7 +1078,7 @@ static void outputNegativeKeywordIdsWithPartialErrors( // Determine if the corresponding index has a valid identifier if(sharedListItemIds.getLongs().get(index) > 0) { - outputStatusMessage(String.format("NegativeKeyword[%d] (%s) successfully added to NegativeKeywordList (%d) and assigned Negative Keyword Id %d.\n", + outputStatusMessage(String.format("NegativeKeyword[%s] (%s) successfully added to NegativeKeywordList (%s) and assigned Negative Keyword Id %s.\n", index, ((NegativeKeyword)(sharedListItems.getSharedListItems().get(index))).getText(), sharedListId, @@ -1089,9 +1108,9 @@ static void outputSharedEntityAssociations(ArrayOfSharedEntityAssociation associ outputStatusMessage("SharedEntityAssociation items:\n"); for (SharedEntityAssociation sharedEntityAssociation : associations.getSharedEntityAssociations()) { - outputStatusMessage(String.format("\tEntityId: %d\n", sharedEntityAssociation.getEntityId())); + outputStatusMessage(String.format("\tEntityId: %s\n", sharedEntityAssociation.getEntityId())); outputStatusMessage(String.format("\tEntityType: %s\n", sharedEntityAssociation.getEntityType())); - outputStatusMessage(String.format("\tSharedEntityId: %d\n", sharedEntityAssociation.getSharedEntityId())); + outputStatusMessage(String.format("\tSharedEntityId: %s\n", sharedEntityAssociation.getSharedEntityId())); outputStatusMessage(String.format("\tSharedEntityType: %s\n\n", sharedEntityAssociation.getSharedEntityType())); } } @@ -1114,8 +1133,8 @@ static void outputNestedPartialErrors(ArrayOfBatchErrorCollection nestedPartialE { if (collection.getCode() != null) { - outputStatusMessage(String.format("\tIndex: %d\n", collection.getIndex())); - outputStatusMessage(String.format("\tCode: %d\n", collection.getCode())); + outputStatusMessage(String.format("\tIndex: %s\n", collection.getIndex())); + outputStatusMessage(String.format("\tCode: %s\n", collection.getCode())); outputStatusMessage(String.format("\tErrorCode: %s\n", collection.getErrorCode())); outputStatusMessage(String.format("\tMessage: %s\n\n", collection.getMessage())); } diff --git a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java index 062d97a93d..e248110ae5 100644 --- a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java +++ b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java @@ -101,7 +101,7 @@ public static void main(java.lang.String[] args) { // If you do not set this element, then ManualCpcBiddingScheme is used by default. campaign.setBiddingScheme(new EnhancedCpcBiddingScheme()); - // Used with FinalUrls shown in the text ads that we will add below. + // Used with FinalUrls shown in the expanded text ads that we will add below. campaign.setTrackingUrlTemplate( "http://tracker.example.com/?season={_season}&promocode={_promocode}&u={lpurl}"); @@ -182,42 +182,36 @@ public static void main(java.lang.String[] args) { // In this example only the first 3 ads should succeed. - // The Title of the fourth ad is empty and not valid, + // The TitlePart2 of the fourth ad is empty and not valid, // and the fifth ad is a duplicate of the second ad. ArrayOfAd ads = new ArrayOfAd(); for(int i=0; i < 5; i++){ - TextAd textAd = new TextAd(); - textAd.setText("Huge Savings on red shoes."); - textAd.setDisplayUrl("Contoso.com"); - - // If you are currently using the Destination URL, you must upgrade to Final URLs. - // Here is an example of a DestinationUrl you might have used previously. - // textAd.setDestinationUrl("http://www.contoso.com/womenshoesale/?season=spring&promocode=PROMO123"); - - // To migrate from DestinationUrl to FinalUrls for existing ads, you can set DestinationUrl - // to an empty string when updating the ad. If you are removing DestinationUrl, - // then FinalUrls is required. - // textAd.setDestinationUrl(""); + ExpandedTextAd expandedTextAd = new ExpandedTextAd(); + expandedTextAd.setTitlePart1("Contoso"); + expandedTextAd.setTitlePart2("Fast & Easy Setup"); + expandedTextAd.setText("Find New Customers & Increase Sales! Start Advertising on Contoso Today."); + expandedTextAd.setPath1("seattle"); + expandedTextAd.setPath2("shoe sale"); // With FinalUrls you can separate the tracking template, custom parameters, and // landing page URLs. com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring finalUrls = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring(); finalUrls.getStrings().add("http://www.contoso.com/womenshoesale"); - textAd.setFinalUrls(finalUrls); + expandedTextAd.setFinalUrls(finalUrls); // Final Mobile URLs can also be used if you want to direct the user to a different page // for mobile devices. com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring finalMobileUrls = new com.microsoft.bingads.v10.campaignmanagement.ArrayOfstring(); finalMobileUrls.getStrings().add("http://mobile.contoso.com/womenshoesale"); - textAd.setFinalMobileUrls(finalMobileUrls); + expandedTextAd.setFinalMobileUrls(finalMobileUrls); // You could use a tracking template which would override the campaign level // tracking template. Tracking templates defined for lower level entities // override those set for higher level entities. // In this example we are using the campaign level tracking template. - textAd.setTrackingUrlTemplate(null); + expandedTextAd.setTrackingUrlTemplate(null); // Set custom parameters that are specific to this ad, // and can be used by the ad, ad group, campaign, or account level tracking template. @@ -233,16 +227,15 @@ public static void main(java.lang.String[] args) { customParameter2.setValue("summer"); customParameters.getCustomParameters().add(customParameter2); urlCustomParameters.setParameters(customParameters); - textAd.setUrlCustomParameters(urlCustomParameters); + expandedTextAd.setUrlCustomParameters(urlCustomParameters); - ads.getAds().add(textAd); + ads.getAds().add(expandedTextAd); } - ((TextAd)(ads.getAds().get(0))).setTitle("Women's Shoe Sale"); - ((TextAd)(ads.getAds().get(1))).setTitle("Women's Super Shoe Sale"); - ((TextAd)(ads.getAds().get(2))).setTitle("Women's Red Shoe Sale"); - ((TextAd)(ads.getAds().get(3))).setTitle(""); - ((TextAd)(ads.getAds().get(4))).setTitle("Women's Super Shoe Sale"); + ((ExpandedTextAd)(ads.getAds().get(1))).setTitlePart2("Quick & Easy Setu"); + ((ExpandedTextAd)(ads.getAds().get(2))).setTitlePart2("Fast & Simple Setup"); + ((ExpandedTextAd)(ads.getAds().get(3))).setTitlePart2(""); + ((ExpandedTextAd)(ads.getAds().get(4))).setTitlePart2("Quick & Easy Setup"); // Add the campaign, ad group, keywords, and ads @@ -367,7 +360,8 @@ else if(getCampaign != null) { // The UpdateCampaigns operation only accepts 100 Campaign objects per call. // To simply the example we will update the first 100. - List campaignSubList = updateCampaigns.getCampaigns().subList(0, 99); + int maxIndex = updateCampaigns.getCampaigns().size() < 100 ? updateCampaigns.getCampaigns().size() : 99; + List campaignSubList = updateCampaigns.getCampaigns().subList(0, maxIndex); updateCampaigns = new ArrayOfCampaign(); for (Campaign updateCampaign : campaignSubList){ updateCampaigns.getCampaigns().add(updateCampaign); @@ -420,29 +414,29 @@ else if(getCampaign != null) ArrayOfAd updateAds = new ArrayOfAd(); - TextAd updateTextAd1 = new TextAd(); - updateTextAd1.setId(adIds.getLongs().get(0)); - updateTextAd1.setText("Huge Savings on All Red Shoes."); + ExpandedTextAd updateExpandedTextAd1 = new ExpandedTextAd(); + updateExpandedTextAd1.setId(adIds.getLongs().get(0)); + updateExpandedTextAd1.setText("Huge Savings on All Red Shoes."); // Set the UrlCustomParameters element to null or empty to retain any // existing custom parameters. CustomParameters urlCustomParameters1 = null; - updateTextAd1.setUrlCustomParameters(urlCustomParameters1); - updateAds.getAds().add(updateTextAd1); + updateExpandedTextAd1.setUrlCustomParameters(urlCustomParameters1); + updateAds.getAds().add(updateExpandedTextAd1); - TextAd updateTextAd2 = new TextAd(); - updateTextAd2.setId(adIds.getLongs().get(1)); - updateTextAd2.setText("Huge Savings on All Red Shoes."); + ExpandedTextAd updateExpandedTextAd2 = new ExpandedTextAd(); + updateExpandedTextAd2.setId(adIds.getLongs().get(1)); + updateExpandedTextAd2.setText("Huge Savings on All Red Shoes."); // To remove all custom parameters, set the Parameters element of the // CustomParameters object to null or empty. CustomParameters urlCustomParameters2 = new CustomParameters(); ArrayOfCustomParameter customParameters2 = null; urlCustomParameters2.setParameters(customParameters2); - updateTextAd2.setUrlCustomParameters(urlCustomParameters2); - updateAds.getAds().add(updateTextAd2); + updateExpandedTextAd2.setUrlCustomParameters(urlCustomParameters2); + updateAds.getAds().add(updateExpandedTextAd2); - TextAd updateTextAd3 = new TextAd(); - updateTextAd3.setId(adIds.getLongs().get(2)); - updateTextAd3.setText("Huge Savings on All Red Shoes."); + ExpandedTextAd updateExpandedTextAd3 = new ExpandedTextAd(); + updateExpandedTextAd3.setId(adIds.getLongs().get(2)); + updateExpandedTextAd3.setText("Huge Savings on All Red Shoes."); // To remove a subset of custom parameters, specify the custom parameters that // you want to keep in the Parameters element of the CustomParameters object. CustomParameters urlCustomParameters3 = new CustomParameters(); @@ -452,8 +446,8 @@ else if(getCampaign != null) ArrayOfCustomParameter customParameters3 = new ArrayOfCustomParameter(); customParameters3.getCustomParameters().add(customParameter3); urlCustomParameters3.setParameters(customParameters3); - updateTextAd3.setUrlCustomParameters(urlCustomParameters3); - updateAds.getAds().add(updateTextAd3); + updateExpandedTextAd3.setUrlCustomParameters(urlCustomParameters3); + updateAds.getAds().add(updateExpandedTextAd3); // As an exercise you can step through using the debugger and view the results. From 2a26ad1261db14f31bed7adb306aa05cf9c113f9 Mon Sep 17 00:00:00 2001 From: Eric Urban Date: Thu, 27 Oct 2016 12:49:41 -0700 Subject: [PATCH 2/2] expanded text ads --- .../java/com/microsoft/bingads/examples/v10/KeywordsAds.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java index e248110ae5..caea7f48db 100644 --- a/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java +++ b/examples/BingAdsDesktopApp/src/main/java/com/microsoft/bingads/examples/v10/KeywordsAds.java @@ -232,7 +232,7 @@ public static void main(java.lang.String[] args) { ads.getAds().add(expandedTextAd); } - ((ExpandedTextAd)(ads.getAds().get(1))).setTitlePart2("Quick & Easy Setu"); + ((ExpandedTextAd)(ads.getAds().get(1))).setTitlePart2("Quick & Easy Setup"); ((ExpandedTextAd)(ads.getAds().get(2))).setTitlePart2("Fast & Simple Setup"); ((ExpandedTextAd)(ads.getAds().get(3))).setTitlePart2(""); ((ExpandedTextAd)(ads.getAds().get(4))).setTitlePart2("Quick & Easy Setup");