// Copyright 2016 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package adwords.axis.v201607.extensions; import com.google.api.ads.adwords.axis.factory.AdWordsServices; import com.google.api.ads.adwords.axis.v201607.cm.ApiException; import com.google.api.ads.adwords.axis.v201607.cm.CustomerExtensionSetting; import com.google.api.ads.adwords.axis.v201607.cm.CustomerExtensionSettingOperation; import com.google.api.ads.adwords.axis.v201607.cm.CustomerExtensionSettingReturnValue; import com.google.api.ads.adwords.axis.v201607.cm.CustomerExtensionSettingServiceInterface; import com.google.api.ads.adwords.axis.v201607.cm.DayOfWeek; import com.google.api.ads.adwords.axis.v201607.cm.ExtensionFeedItem; import com.google.api.ads.adwords.axis.v201607.cm.ExtensionSetting; import com.google.api.ads.adwords.axis.v201607.cm.FeedItemCampaignTargeting; import com.google.api.ads.adwords.axis.v201607.cm.FeedItemSchedule; import com.google.api.ads.adwords.axis.v201607.cm.FeedItemScheduling; import com.google.api.ads.adwords.axis.v201607.cm.FeedType; import com.google.api.ads.adwords.axis.v201607.cm.MinuteOfHour; import com.google.api.ads.adwords.axis.v201607.cm.Money; import com.google.api.ads.adwords.axis.v201607.cm.MoneyWithCurrency; import com.google.api.ads.adwords.axis.v201607.cm.Operator; import com.google.api.ads.adwords.axis.v201607.cm.PriceExtensionPriceQualifier; import com.google.api.ads.adwords.axis.v201607.cm.PriceExtensionPriceUnit; import com.google.api.ads.adwords.axis.v201607.cm.PriceExtensionType; import com.google.api.ads.adwords.axis.v201607.cm.PriceFeedItem; import com.google.api.ads.adwords.axis.v201607.cm.PriceTableRow; import com.google.api.ads.adwords.axis.v201607.cm.UrlList; 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.client.auth.oauth2.Credential; import com.google.common.collect.Lists; import adwords.axis.v201607.basicoperations.AddCampaigns; import java.rmi.RemoteException; import java.util.List; /** * This example adds a price extension and associates it with an account. Campaign targeting is * also set using the specified campaign ID. * * <p>To get campaigns, run {@link AddCampaigns}. * * <p>Credentials and properties in {@code fromFile()} are pulled from the * "ads.properties" file. See README for more info. */ public class AddPrices { public static void main(String[] args) throws Exception { // Generate a refreshable OAuth2 credential. Credential oAuth2Credential = new OfflineCredentials.Builder() .forApi(Api.ADWORDS) .fromFile() .build() .generateCredential(); // Construct an AdWordsSession. AdWordsSession session = new AdWordsSession.Builder() .fromFile() .withOAuth2Credential(oAuth2Credential) .build(); AdWordsServices adWordsServices = new AdWordsServices(); Long campaignId = Long.valueOf("INSERT_CAMPAIGN_ID_HERE"); runExample(adWordsServices, session, campaignId); } public static void runExample( AdWordsServices adWordsServices, AdWordsSession session, Long campaignId) throws ApiException, RemoteException { // Get the CustomerExtensionSettingService. CustomerExtensionSettingServiceInterface customerExtensionSettingService = adWordsServices.get(session, CustomerExtensionSettingServiceInterface.class); // Create the price extension feed item. PriceFeedItem priceFeedItem = new PriceFeedItem(); priceFeedItem.setPriceExtensionType(PriceExtensionType.SERVICES); // Price qualifier is optional. priceFeedItem.setPriceQualifier(PriceExtensionPriceQualifier.FROM); priceFeedItem.setTrackingUrlTemplate("http://tracker.example.com/?u={lpurl}"); priceFeedItem.setLanguage("en"); FeedItemCampaignTargeting campaignTargeting = new FeedItemCampaignTargeting(); campaignTargeting.setTargetingCampaignId(campaignId); priceFeedItem.setCampaignTargeting(campaignTargeting); priceFeedItem.setScheduling( new FeedItemScheduling( new FeedItemSchedule[] { new FeedItemSchedule(DayOfWeek.SUNDAY, 10, MinuteOfHour.ZERO, 18, MinuteOfHour.ZERO), new FeedItemSchedule(DayOfWeek.SATURDAY, 10, MinuteOfHour.ZERO, 22, MinuteOfHour.ZERO) })); // To create a price extension, at least three table rows are needed. List<PriceTableRow> priceTableRows = Lists.newArrayList(); String currencyCode = "USD"; priceTableRows.add( createPriceTableRow( "Scrubs", "Body Scrub, Salt Scrub", "http://www.example.com/scrubs", 60000000, currencyCode, PriceExtensionPriceUnit.PER_HOUR)); priceTableRows.add( createPriceTableRow( "Hair Cuts", "Once a month", "http://www.example.com/haircuts", 75000000, currencyCode, PriceExtensionPriceUnit.PER_MONTH)); priceTableRows.add( createPriceTableRow( "Skin Care Package", "Four times a month", "http://www.example.com/skincarepackage", 250000000, currencyCode, PriceExtensionPriceUnit.PER_MONTH)); priceFeedItem.setTableRows(priceTableRows.toArray(new PriceTableRow[priceTableRows.size()])); // Create your campaign extension settings. This associates the sitelinks // to your campaign. CustomerExtensionSetting customerExtensionSetting = new CustomerExtensionSetting(); customerExtensionSetting.setExtensionType(FeedType.PRICE); ExtensionSetting extensionSetting = new ExtensionSetting(); extensionSetting.setExtensions(new ExtensionFeedItem[] {priceFeedItem}); customerExtensionSetting.setExtensionSetting(extensionSetting); CustomerExtensionSettingOperation operation = new CustomerExtensionSettingOperation(); operation.setOperand(customerExtensionSetting); operation.setOperator(Operator.ADD); // Add the extensions. CustomerExtensionSettingReturnValue returnValue = customerExtensionSettingService.mutate(new CustomerExtensionSettingOperation[] {operation}); if (returnValue.getValue() != null && returnValue.getValue().length > 0) { CustomerExtensionSetting newExtensionSetting = returnValue.getValue(0); System.out.printf( "Extension setting with type '%s' was added.%n", newExtensionSetting.getExtensionType().getValue()); } else { System.out.println("No extension settings were created."); } } /** * Creates a new {@link PriceTableRow} with the specified attributes. */ private static PriceTableRow createPriceTableRow( String header, String description, String finalUrl, long priceInMicros, String currencyCode, PriceExtensionPriceUnit priceUnit) { PriceTableRow priceTableRow = new PriceTableRow(); priceTableRow.setHeader(header); priceTableRow.setDescription(description); UrlList finalUrls = new UrlList(); finalUrls.setUrls(new String[] {finalUrl}); priceTableRow.setFinalUrls(finalUrls); MoneyWithCurrency price = new MoneyWithCurrency(); Money priceMoney = new Money(); price.setCurrencyCode(currencyCode); priceMoney.setMicroAmount(priceInMicros); price.setMoney(priceMoney); priceTableRow.setPrice(price); priceTableRow.setPriceUnit(priceUnit); return priceTableRow; } }