Step 1: Create Google AdwordSession configuration
package com.integration.adwords.config;
import com.google.api.ads.adwords.axis.factory.AdWordsServices;
import com.google.api.ads.adwords.lib.client.AdWordsSession;
import com.google.api.ads.adwords.lib.client.reporting.ReportingConfiguration;
import com.google.api.ads.common.lib.auth.OfflineCredentials;
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 org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by tmichels on 7/31/15.
*/
@Configuration
public class GoogleAdwordsConfig {
@Value("${GOOGLE_ADWORD_CLIENTID}")
private String googleAdWordClientId;
@Value("${GOOGLE_ADWORD_SECRET}")
private String googleAdwordSecet;
@Value("${GOOGLE_ADWORDS_DEV_TOKEN}")
private String googleAdwordDevToken;
@Value("${GOOGLE_ADWORDS_REFRESH_TOKEN}")
private String googleAdwordRefreshToken;
@Value("${GOOGLE_ADWORDS_USER_AGENT}")
private String googleAdwordUserAgent;
@Value("${GOOGLE_ADWORDS_CLIENT_CUSTOMER_ID}")
private String googleAdwordClientCustomerId;
@Bean
public Credential credential() throws ValidationException, OAuthException {
Credential credential = new OfflineCredentials.Builder()
.forApi(OfflineCredentials.Api.ADWORDS)
.withClientSecrets(googleAdWordClientId, googleAdwordSecet)
.withRefreshToken(googleAdwordRefreshToken)
.build()
.generateCredential();
return credential;
}
@Bean
public AdWordsSession adWordsSession(Credential credential) throws ValidationException {
AdWordsSession adWordsSession = new AdWordsSession.Builder()
.withDeveloperToken(googleAdwordDevToken)
.withOAuth2Credential(credential)
.withClientCustomerId(googleAdwordClientCustomerId)
.withUserAgent(googleAdwordUserAgent)
.build();
return adWordsSession;
}
}
2. Create AdWord Service to export KeyWords, Campaigns, AdGroups and Ads.
package com.integration.adwords.service;
import com.google.api.ads.adwords.axis.factory.AdWordsServices;
import com.google.api.ads.adwords.axis.utils.v201506.SelectorBuilder;
import com.google.api.ads.adwords.axis.v201506.cm.*;
import com.google.api.ads.adwords.lib.client.AdWordsSession;
import com.google.api.ads.adwords.lib.selectorfields.v201502.cm.CampaignField;
import com.google.api.ads.adwords.lib.selectorfields.v201506.cm.AdGroupAdField;
import com.google.api.ads.adwords.lib.selectorfields.v201506.cm.AdGroupCriterionField;
import com.google.api.ads.adwords.lib.selectorfields.v201506.cm.AdGroupField;
import com.integration.file.FileConverter;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by tmichels on 7/31/15.
*/
@Service
public class GoogleAdwordService {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(GoogleAdwordService.class);
private static final int PAGE_SIZE = 100;
private static final String CAMPAIGNFILENAME="adwords/google/googleAdwordCampaign.csv";
private static final String KEYWORDFILENAME="adwords/google/googleAdwordKeywords.csv";
private static final String ADGROUPFILENAME="adwords/google/googleAdwordAdGroup.csv";
private static final String ADSFILENAME="adwords/google/googleAdwordAds.csv";
@Autowired
AdWordsSession adWordsSession;
@Autowired
FileConverter fileConverter;
public void getCampaigns() throws RemoteException {
List<String> campaignColumns = new ArrayList<>();
List<String> campaignData = new ArrayList<>();
// Get the CampaignService.
CampaignServiceInterface campaignService =
new AdWordsServices().get(adWordsSession, CampaignServiceInterface.class);
int offset = 0;
// Create selector.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
.fields(CampaignField.Id,
CampaignField.Name,
CampaignField.AdServingOptimizationStatus,
CampaignField.AdvertisingChannelSubType,
CampaignField.AdvertisingChannelType,
CampaignField.BiddingStrategyId,
CampaignField.BiddingStrategyName,
CampaignField.BiddingStrategyType,
CampaignField.BidType,
CampaignField.BudgetId,
CampaignField.BudgetName,
CampaignField.BudgetReferenceCount,
CampaignField.BudgetStatus,
CampaignField.DeliveryMethod,
CampaignField.Eligible,
CampaignField.EndDate,
CampaignField.FrequencyCapMaxImpressions,
CampaignField.Labels,
CampaignField.StartDate,
CampaignField.TrackingUrlTemplate,
CampaignField.UrlCustomParameters)
.orderAscBy(CampaignField.Id)
.offset(offset)
.limit(PAGE_SIZE)
.build();
campaignColumns.add(CampaignField.Id.toString());
campaignColumns.add(CampaignField.Name.toString());
campaignColumns.add(CampaignField.AdServingOptimizationStatus.toString());
campaignColumns.add(CampaignField.AdvertisingChannelSubType.toString());
campaignColumns.add(CampaignField.AdvertisingChannelType.toString());
campaignColumns.add(CampaignField.BiddingStrategyId.toString());
campaignColumns.add(CampaignField.BiddingStrategyName.toString());
campaignColumns.add(CampaignField.BiddingStrategyType.toString());
campaignColumns.add(CampaignField.BidType.toString());
campaignColumns.add(CampaignField.BudgetId.toString());
campaignColumns.add(CampaignField.BudgetName.toString());
campaignColumns.add(CampaignField.BudgetReferenceCount.toString());
campaignColumns.add(CampaignField.BudgetStatus.toString());
campaignColumns.add(CampaignField.DeliveryMethod.toString());
campaignColumns.add(CampaignField.Eligible.toString());
campaignColumns.add(CampaignField.EndDate.toString());
campaignColumns.add(CampaignField.FrequencyCapMaxImpressions.toString());
campaignColumns.add(CampaignField.Labels.toString());
campaignColumns.add(CampaignField.StartDate.toString());
campaignColumns.add(CampaignField.TrackingUrlTemplate.toString());
campaignColumns.add(CampaignField.UrlCustomParameters.toString());
CampaignPage page = null;
do {
// Get all campaigns.
page = campaignService.get(selector);
// Display campaigns.
if (page.getEntries() != null) {
for (Campaign campaign : page.getEntries()) {
campaignData.add(campaign.getId().toString());
campaignData.add(campaign.getName());
campaignData.add(campaign.getAdServingOptimizationStatus()!=null? campaign.getAdServingOptimizationStatus().toString() : "");
campaignData.add(campaign.getAdvertisingChannelSubType() != null ? campaign.getAdvertisingChannelSubType().toString() : "");
campaignData.add(campaign.getAdvertisingChannelType().toString());
campaignData.add(campaign.getBiddingStrategyConfiguration().getBiddingStrategyId() != null ? campaign.getBiddingStrategyConfiguration().getBiddingStrategyId().toString() : "");
campaignData.add(campaign.getBiddingStrategyConfiguration().getBiddingStrategyName());
campaignData.add(campaign.getBiddingStrategyConfiguration().getBiddingStrategyType() != null ? campaign.getBiddingStrategyConfiguration().getBiddingStrategyType().getValue() : "");
campaignData.add(campaign.getBudget().getBudgetId() != null ? campaign.getBudget().getBudgetId().toString() : "");
campaignData.add(campaign.getBudget().getName());
campaignData.add(campaign.getBudget().getReferenceCount() != null ? campaign.getBudget().getReferenceCount().toString() : "");
campaignData.add(campaign.getBudget().getStatus() != null ? campaign.getBudget().getStatus().getValue() : "");
campaignData.add(campaign.getBudget().getDeliveryMethod() != null ? campaign.getBudget().getDeliveryMethod().getValue() : "");
campaignData.add(campaign.getBudget().getIsExplicitlyShared() != null ? campaign.getBudget().getIsExplicitlyShared().toString() : "");
campaignData.add(campaign.getEndDate());
campaignData.add(campaign.getFrequencyCap()!=null && campaign.getFrequencyCap().getImpressions() != null ? campaign.getFrequencyCap().getImpressions().toString() : "");
campaignData.add(campaign.getLabels() != null ? campaign.getLabels().toString() : "");
campaignData.add(campaign.getStartDate());
campaignData.add(campaign.getTrackingUrlTemplate());
campaignData.add(campaign.getUrlCustomParameters()!=null && campaign.getUrlCustomParameters().getParameters() != null ? campaign.getUrlCustomParameters().getParameters().toString() : "");
}
} else {
logger.info("No campaigns were found.");
}
offset += PAGE_SIZE;
selector = builder.increaseOffsetBy(PAGE_SIZE).build();
} while (offset < page.getTotalNumEntries());
fileConverter.convertToCSV(campaignData, campaignColumns, CAMPAIGNFILENAME);
}
public void getKeyWords() throws RemoteException {
List<String> campaignColumns = new ArrayList<>();
List<String> campaignData = new ArrayList<>();
// Get the AdGroupCriterionService.
AdGroupCriterionServiceInterface adGroupCriterionService =
new AdWordsServices().get(adWordsSession, AdGroupCriterionServiceInterface.class);
int offset = 0;
boolean morePages = true;
// Create selector.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
.fields(
AdGroupCriterionField.Id,
AdGroupCriterionField.AdGroupId,
AdGroupCriterionField.KeywordMatchType,
AdGroupCriterionField.KeywordText)
.offset(offset)
.limit(PAGE_SIZE)
.equals(AdGroupCriterionField.CriteriaType, "KEYWORD")
.build();
campaignColumns.add(AdGroupCriterionField.Id.toString());
campaignColumns.add(AdGroupCriterionField.AdGroupId.toString());
campaignColumns.add(AdGroupCriterionField.KeywordMatchType.toString());
campaignColumns.add(AdGroupCriterionField.KeywordText.toString());
while (morePages) {
AdGroupCriterionPage page = adGroupCriterionService.get(selector);
if (page.getEntries() != null && page.getEntries().length > 0) {
for (AdGroupCriterion adGroupCriterionResult : page.getEntries()) {
campaignData.add(adGroupCriterionResult.getAdGroupId().toString());
campaignData.add(adGroupCriterionResult.getCriterion().getId().toString());
campaignData.add(((Keyword) adGroupCriterionResult.getCriterion()).getText());
campaignData.add(((Keyword) adGroupCriterionResult.getCriterion()).getMatchType().toString());
}
} else {
logger.info("No keywords were found.");
}
offset += PAGE_SIZE;
selector = builder.increaseOffsetBy(PAGE_SIZE).build();
morePages = offset < page.getTotalNumEntries();
}
fileConverter.convertToCSV(campaignData, campaignColumns, KEYWORDFILENAME);
}
public void getTextAds() throws RemoteException {
List<String> campaignColumns = new ArrayList<>();
List<String> campaignData = new ArrayList<>();
AdGroupAdServiceInterface adGroupAdService =
new AdWordsServices().get(adWordsSession, AdGroupAdServiceInterface.class);
int offset = 0;
boolean morePages = true;
// Create selector.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
.fields(AdGroupAdField.Id,
AdGroupAdField.AdGroupId,
AdGroupAdField.Status)
.orderAscBy(AdGroupAdField.Id)
.offset(offset)
.limit(PAGE_SIZE)
.in(AdGroupAdField.Status, "ENABLED", "PAUSED", "DISABLED")
.build();
campaignColumns.add(AdGroupAdField.Id.toString());
campaignColumns.add(AdGroupAdField.AdGroupId.toString());
campaignColumns.add(AdGroupAdField.Status.toString());
while (morePages) {
AdGroupAdPage page = adGroupAdService.get(selector);
if (page.getEntries() != null && page.getEntries().length > 0) {
for (AdGroupAd adGroupAd : page.getEntries()) {
campaignData.add(adGroupAd.getAd().getId().toString());
campaignData.add(adGroupAd.getAd().getAdType().toString());
campaignData.add(adGroupAd.getStatus().toString());
}
} else {
logger.info("No text ads were found");
}
offset += PAGE_SIZE;
selector = builder.increaseOffsetBy(PAGE_SIZE).build();
morePages = offset < page.getTotalNumEntries();
}
fileConverter.convertToCSV(campaignData, campaignColumns, ADSFILENAME);
}
public void getAdGroups() throws RemoteException {
List<String> campaignColumns = new ArrayList<>();
List<String> campaignData = new ArrayList<>();
AdGroupServiceInterface adGroupService = new AdWordsServices().get(adWordsSession, AdGroupServiceInterface.class);
int offset = 0;
boolean morePages = true;
// Create selector.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
.fields(AdGroupField.Id,
AdGroupField.Name,
AdGroupField.Status)
.orderAscBy(AdGroupField.Name)
.offset(offset)
.limit(PAGE_SIZE)
.build();
campaignColumns.add(AdGroupField.Id.toString());
campaignColumns.add(AdGroupField.Name.toString());
campaignColumns.add(AdGroupField.Status.toString());
while (morePages) {
AdGroupPage page = adGroupService.get(selector);
// Display ad groups.
if (page.getEntries() != null) {
for (AdGroup adGroup : page.getEntries()) {
campaignData.add(adGroup.getId().toString());
campaignData.add(adGroup.getName().toString());
campaignData.add(adGroup.getStatus()!=null ? adGroup.getStatus().getValue() : "");
}
} else {
logger.info("No group ads were found.");
}
offset += PAGE_SIZE;
selector = builder.increaseOffsetBy(PAGE_SIZE).build();
morePages = offset < page.getTotalNumEntries();
}
fileConverter.convertToCSV(campaignData, campaignColumns, ADGROUPFILENAME);
}
}
Like this:
Like Loading...