Skip to content

Commit c308fd3

Browse files
authored
Merge pull request #215 from BingAds/v13.0.24
v13.0.24
2 parents 4d6593f + 4c84705 commit c308fd3

File tree

159 files changed

+8541
-566
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

159 files changed

+8541
-566
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The Bing Ads Java SDK includes and depends on the microsoft.bingads Maven artifa
1616
<dependency>
1717
<groupId>com.microsoft.bingads</groupId>
1818
<artifactId>microsoft.bingads</artifactId>
19-
<version>13.0.23.2</version>
19+
<version>13.0.24</version>
2020
</dependency>
2121
```
2222
If you are not using a Maven project, you must include the correct version of each dependency. You can review the complete list of Bing Ads Java SDK dependencies at the [Maven Repository](http://mvnrepository.com/artifact/com.microsoft.bingads/microsoft.bingads/).
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
package com.microsoft.bingads.examples.v13;
2+
3+
import com.microsoft.bingads.*;
4+
import com.microsoft.bingads.v13.campaignmanagement.*;
5+
6+
import java.util.ArrayList;
7+
import java.util.Arrays;
8+
import java.io.ByteArrayOutputStream;
9+
import java.io.File;
10+
import java.io.IOException;
11+
import java.io.InputStream;
12+
import java.io.UnsupportedEncodingException;
13+
import java.net.URL;
14+
import java.nio.file.Files;
15+
import java.rmi.RemoteException;
16+
import java.util.Base64;
17+
import java.util.Calendar;
18+
import java.util.List;
19+
import java.util.stream.Collectors;
20+
21+
public class ResponsiveAdRecommendation extends ExampleBase {
22+
public static void main(java.lang.String[] args) {
23+
24+
// To run this example you'll need to provide a valid Ad Final URL
25+
String AdFinalURL = "https://contoso.com";
26+
27+
// Set to false to disable cleanup of created entities at the end
28+
boolean DoCleanup = true;
29+
30+
try {
31+
authorizationData = getAuthorizationData();
32+
33+
CampaignManagementExampleHelper.CampaignManagementService = new ServiceClient<ICampaignManagementService>(
34+
authorizationData,
35+
API_ENVIRONMENT,
36+
ICampaignManagementService.class);
37+
38+
CreateResponsiveAdRecommendationRequest request = new CreateResponsiveAdRecommendationRequest();
39+
40+
request.setFinalUrls(new ArrayOfstring(Arrays.asList(AdFinalURL)));
41+
42+
System.out.println("Getting ad recommendation for URL " + AdFinalURL + " ...");
43+
44+
CreateResponsiveAdRecommendationResponse recommendationResponse =
45+
CampaignManagementExampleHelper.CampaignManagementService.getService().createResponsiveAdRecommendation(request);
46+
47+
ResponsiveAd ad = recommendationResponse.getResponsiveAd();
48+
49+
List<AdRecommendationImageSuggestion> imageSuggestions = recommendationResponse
50+
.getImageSuggestions()
51+
.getAdRecommendationImageSuggestions();
52+
53+
// select a few images from the suggested list. This example picks first 5 images
54+
List<AdRecommendationImageSuggestion> selectedImages = imageSuggestions.subList(0, 5);
55+
56+
// add selected images to your media library
57+
saveImages(selectedImages);
58+
59+
ad.setImages(new ArrayOfAssetLink(selectedImages.stream().map(x -> x.getAssetLink()).collect(Collectors.toList())));
60+
61+
ad.setBusinessName("Contoso");
62+
ad.setCallToActionLanguage(LanguageName.ENGLISH);
63+
64+
// Create an Audience campaign with one ad group and a responsive ad.
65+
66+
ArrayOfCampaign campaigns = new ArrayOfCampaign();
67+
Campaign campaign = new Campaign();
68+
campaign.setBudgetType(BudgetLimitType.DAILY_BUDGET_STANDARD);
69+
// CampaignType must be set for Audience campaigns
70+
ArrayList<CampaignType> campaignTypes = new ArrayList<CampaignType>();
71+
campaignTypes.add(CampaignType.AUDIENCE);
72+
campaign.setCampaignType(campaignTypes);
73+
campaign.setDailyBudget(50.00);
74+
ArrayOfstring languages = new ArrayOfstring();
75+
languages.getStrings().add("All");
76+
campaign.setLanguages(languages);
77+
campaign.setName("Ad recommendation test " + new java.util.Date());
78+
campaign.setTimeZone("PacificTimeUSCanadaTijuana");
79+
campaigns.getCampaigns().add(campaign);
80+
81+
outputStatusMessage("-----\nAddCampaigns:");
82+
AddCampaignsResponse addCampaignsResponse = CampaignManagementExampleHelper.addCampaigns(
83+
authorizationData.getAccountId(),
84+
campaigns);
85+
ArrayOfNullableOflong campaignIds = addCampaignsResponse.getCampaignIds();
86+
ArrayOfBatchError campaignErrors = addCampaignsResponse.getPartialErrors();
87+
outputStatusMessage("CampaignIds:");
88+
CampaignManagementExampleHelper.outputArrayOfNullableOflong(campaignIds);
89+
outputStatusMessage("PartialErrors:");
90+
CampaignManagementExampleHelper.outputArrayOfBatchError(campaignErrors);
91+
92+
// Add an ad group within the campaign.
93+
94+
ArrayOfAdGroup adGroups = new ArrayOfAdGroup();
95+
AdGroup adGroup = new AdGroup();
96+
adGroup.setName("Holiday Sale");
97+
adGroup.setStartDate(null);
98+
Calendar calendar = Calendar.getInstance();
99+
adGroup.setEndDate(new com.microsoft.bingads.v13.campaignmanagement.Date());
100+
adGroup.getEndDate().setDay(31);
101+
adGroup.getEndDate().setMonth(12);
102+
adGroup.getEndDate().setYear(calendar.get(Calendar.YEAR));
103+
Bid CpcBid = new Bid();
104+
CpcBid.setAmount(0.09);
105+
adGroup.setCpcBid(CpcBid);
106+
// Network cannot be set for ad groups in Audience campaigns
107+
adGroup.setNetwork(null);
108+
adGroups.getAdGroups().add(adGroup);
109+
110+
outputStatusMessage("-----\nAddAdGroups:");
111+
AddAdGroupsResponse addAdGroupsResponse = CampaignManagementExampleHelper.addAdGroups(
112+
campaignIds.getLongs().get(0),
113+
adGroups,
114+
false);
115+
ArrayOfNullableOflong adGroupIds = addAdGroupsResponse.getAdGroupIds();
116+
ArrayOfBatchError adGroupErrors = addAdGroupsResponse.getPartialErrors();
117+
outputStatusMessage("AdGroupIds:");
118+
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adGroupIds);
119+
outputStatusMessage("PartialErrors:");
120+
CampaignManagementExampleHelper.outputArrayOfBatchError(adGroupErrors);
121+
122+
// Add a responsive ad within the ad group.
123+
124+
ArrayOfAd ads = new ArrayOfAd();
125+
126+
ads.getAds().add(ad);
127+
128+
outputStatusMessage("-----\nAddAds:");
129+
AddAdsResponse addAdsResponse = CampaignManagementExampleHelper.addAds(
130+
adGroupIds.getLongs().get(0),
131+
ads);
132+
ArrayOfNullableOflong adIds = addAdsResponse.getAdIds();
133+
ArrayOfBatchError adErrors = addAdsResponse.getPartialErrors();
134+
outputStatusMessage("AdIds:");
135+
CampaignManagementExampleHelper.outputArrayOfNullableOflong(adIds);
136+
outputStatusMessage("PartialErrors:");
137+
CampaignManagementExampleHelper.outputArrayOfBatchError(adErrors);
138+
139+
System.out.println("\nCreated campaign: " + campaign.getName());
140+
141+
if (!DoCleanup) {
142+
return;
143+
}
144+
145+
// Delete the account's media.
146+
147+
ArrayOflong mediaIds = new ArrayOflong(ad.getImages().getAssetLinks().stream().map(x -> x.getAsset().getId()).collect(Collectors.toList()));
148+
149+
outputStatusMessage("-----\nDeleteMedia:");
150+
CampaignManagementExampleHelper.deleteMedia(
151+
authorizationData.getAccountId(),
152+
mediaIds);
153+
154+
for (java.lang.Long id : mediaIds.getLongs()) {
155+
outputStatusMessage(String.format("Deleted Media Id %s", id));
156+
}
157+
158+
// Delete the campaign and everything it contains e.g., ad groups and ads.
159+
160+
outputStatusMessage("-----\nDeleteCampaigns:");
161+
ArrayOflong deleteCampaignIds = new ArrayOflong();
162+
deleteCampaignIds.getLongs().add(campaignIds.getLongs().get(0));
163+
CampaignManagementExampleHelper.deleteCampaigns(
164+
authorizationData.getAccountId(),
165+
deleteCampaignIds);
166+
outputStatusMessage(String.format("Deleted CampaignId %d", deleteCampaignIds.getLongs().get(0)));
167+
} catch (Exception ex) {
168+
String faultXml = ExampleExceptionHelper.getBingAdsExceptionFaultXml(ex, System.out);
169+
outputStatusMessage(faultXml);
170+
String message = ExampleExceptionHelper.handleBingAdsSDKException(ex, System.out);
171+
outputStatusMessage(message);
172+
}
173+
}
174+
175+
// Get image media that can be managed with the Campaign Management API.
176+
177+
static Image getImageMedia(
178+
java.lang.String mediaType,
179+
java.lang.String imageFileName) throws UnsupportedEncodingException, IOException {
180+
Image image = new Image();
181+
image.setData(getBmpBase64String(imageFileName));
182+
image.setMediaType(mediaType);
183+
image.setType("Image");
184+
185+
return image;
186+
}
187+
188+
// Get the image media as base64 string.
189+
190+
static java.lang.String getBmpBase64String(
191+
java.lang.String imageFileName) throws UnsupportedEncodingException, IOException {
192+
File fi = new File(imageFileName);
193+
byte[] imageBytes = Files.readAllBytes(fi.toPath());
194+
java.lang.String base64String = new java.lang.String(Base64.getEncoder().encode(imageBytes), "UTF-8");
195+
return base64String;
196+
}
197+
198+
private static void saveImages(List<AdRecommendationImageSuggestion> imageSuggestions) throws RemoteException, Exception {
199+
ArrayOfMedia mediaToAdd = new ArrayOfMedia();
200+
201+
for (AdRecommendationImageSuggestion imageSuggestion : imageSuggestions) {
202+
Image image = imageSuggestion.getImage();
203+
204+
byte[] imageBytes = downloadBytes(new URL(imageSuggestion.getImageUrl()));
205+
206+
String imageBase64 = new String(Base64.getEncoder().encode(imageBytes));
207+
208+
image.setData(imageBase64);
209+
210+
mediaToAdd.getMedias().add(image);
211+
}
212+
213+
ArrayOflong mediaIds = CampaignManagementExampleHelper.addMedia(
214+
authorizationData.getAccountId(),
215+
mediaToAdd).getMediaIds();
216+
217+
for (int i = 0; i < mediaIds.getLongs().size(); i++) {
218+
imageSuggestions.get(i).getAssetLink().getAsset().setId(mediaIds.getLongs().get(i));
219+
}
220+
}
221+
222+
private static byte[] downloadBytes(URL url) throws IOException {
223+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
224+
225+
byte[] buffer = new byte[4096];
226+
227+
int bytesRead;
228+
229+
InputStream inputStream = null;
230+
231+
try {
232+
inputStream = url.openStream();
233+
234+
while ((bytesRead = inputStream.read(buffer)) > 0) {
235+
outputStream.write(buffer, 0, bytesRead);
236+
}
237+
238+
return outputStream.toByteArray();
239+
} finally {
240+
if (inputStream != null) {
241+
inputStream.close();
242+
}
243+
}
244+
}
245+
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
22
<modelVersion>4.0.0</modelVersion>
33
<groupId>com.microsoft.bingads</groupId>
4-
<version>13.0.23.2</version>
4+
<version>13.0.24</version>
55
<name>Bing Ads Java SDK</name>
66
<description>The Bing Ads Java SDK is a library improving developer experience when working with the Bing Ads services by providing high-level access to features such as Bulk API, OAuth Authorization and SOAP API.</description>
77
<url>https://github.com/BingAds/BingAds-Java-SDK</url>

proxies/com/microsoft/bingads/v13/bulk/DownloadEntity.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@
197197
* <enumeration value="CampaignImpressionBasedRemarketingListAssociations"/>
198198
* <enumeration value="CampaignNegativeImpressionBasedRemarketingListAssociations"/>
199199
* <enumeration value="AssetGroupUrlTargets"/>
200+
* <enumeration value="NewCustomerAcquisitionGoal"/>
201+
* <enumeration value="ConversionValueRule"/>
202+
* <enumeration value="AccountPlacementExclusionList"/>
203+
* <enumeration value="AccountPlacementExclusionListItem"/>
204+
* <enumeration value="CampaignAccountPlacementExclusionListAssociation"/>
200205
* </restriction>
201206
* </simpleType>
202207
* }</pre>
@@ -573,7 +578,17 @@ public enum DownloadEntity {
573578
@XmlEnumValue("CampaignNegativeImpressionBasedRemarketingListAssociations")
574579
CAMPAIGN_NEGATIVE_IMPRESSION_BASED_REMARKETING_LIST_ASSOCIATIONS("CampaignNegativeImpressionBasedRemarketingListAssociations"),
575580
@XmlEnumValue("AssetGroupUrlTargets")
576-
ASSET_GROUP_URL_TARGETS("AssetGroupUrlTargets");
581+
ASSET_GROUP_URL_TARGETS("AssetGroupUrlTargets"),
582+
@XmlEnumValue("NewCustomerAcquisitionGoal")
583+
NEW_CUSTOMER_ACQUISITION_GOAL("NewCustomerAcquisitionGoal"),
584+
@XmlEnumValue("ConversionValueRule")
585+
CONVERSION_VALUE_RULE("ConversionValueRule"),
586+
@XmlEnumValue("AccountPlacementExclusionList")
587+
ACCOUNT_PLACEMENT_EXCLUSION_LIST("AccountPlacementExclusionList"),
588+
@XmlEnumValue("AccountPlacementExclusionListItem")
589+
ACCOUNT_PLACEMENT_EXCLUSION_LIST_ITEM("AccountPlacementExclusionListItem"),
590+
@XmlEnumValue("CampaignAccountPlacementExclusionListAssociation")
591+
CAMPAIGN_ACCOUNT_PLACEMENT_EXCLUSION_LIST_ASSOCIATION("CampaignAccountPlacementExclusionListAssociation");
577592
private final String value;
578593

579594
DownloadEntity(String v) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
package com.microsoft.bingads.v13.campaignmanagement;
3+
4+
import jakarta.xml.bind.annotation.XmlAccessType;
5+
import jakarta.xml.bind.annotation.XmlAccessorType;
6+
import jakarta.xml.bind.annotation.XmlType;
7+
8+
9+
/**
10+
* <p>Java class for AccountPlacementExclusionList complex type.
11+
*
12+
* <p>The following schema fragment specifies the expected content contained within this class.
13+
*
14+
* <pre>{@code
15+
* <complexType name="AccountPlacementExclusionList">
16+
* <complexContent>
17+
* <extension base="{https://bingads.microsoft.com/CampaignManagement/v13}SharedList">
18+
* <sequence>
19+
* </sequence>
20+
* </extension>
21+
* </complexContent>
22+
* </complexType>
23+
* }</pre>
24+
*
25+
*
26+
*/
27+
@XmlAccessorType(XmlAccessType.FIELD)
28+
@XmlType(name = "AccountPlacementExclusionList")
29+
public class AccountPlacementExclusionList
30+
extends SharedList
31+
{
32+
public AccountPlacementExclusionList() {
33+
this.type = "AccountPlacementExclusionList";
34+
}
35+
36+
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
package com.microsoft.bingads.v13.campaignmanagement;
3+
4+
import jakarta.xml.bind.annotation.XmlAccessType;
5+
import jakarta.xml.bind.annotation.XmlAccessorType;
6+
import jakarta.xml.bind.annotation.XmlType;
7+
8+
9+
/**
10+
* <p>Java class for AccountPlacementInclusionList complex type.
11+
*
12+
* <p>The following schema fragment specifies the expected content contained within this class.
13+
*
14+
* <pre>{@code
15+
* <complexType name="AccountPlacementInclusionList">
16+
* <complexContent>
17+
* <extension base="{https://bingads.microsoft.com/CampaignManagement/v13}SharedList">
18+
* <sequence>
19+
* </sequence>
20+
* </extension>
21+
* </complexContent>
22+
* </complexType>
23+
* }</pre>
24+
*
25+
*
26+
*/
27+
@XmlAccessorType(XmlAccessType.FIELD)
28+
@XmlType(name = "AccountPlacementInclusionList")
29+
public class AccountPlacementInclusionList
30+
extends SharedList
31+
{
32+
public AccountPlacementInclusionList() {
33+
this.type = "AccountPlacementInclusionList";
34+
}
35+
36+
37+
}

0 commit comments

Comments
 (0)