public void Run(AdWordsUser user)
{
// Get the TrafficEstimatorService.
TrafficEstimatorService trafficEstimatorService = (TrafficEstimatorService) user.GetService(
AdWordsService.v201306.TrafficEstimatorService);
// Create keywords. Up to 2000 keywords can be passed in a single request.
Keyword keyword1 = new Keyword();
keyword1.text = "mars cruise";
keyword1.matchType = KeywordMatchType.BROAD;
Keyword keyword2 = new Keyword();
keyword2.text = "cheap cruise";
keyword2.matchType = KeywordMatchType.PHRASE;
Keyword keyword3 = new Keyword();
keyword3.text = "cruise";
keyword3.matchType = KeywordMatchType.EXACT;
Keyword[] keywords = new Keyword[] {keyword1, keyword2, keyword3};
// Create a keyword estimate request for each keyword.
List<KeywordEstimateRequest> keywordEstimateRequests = new List<KeywordEstimateRequest>();
foreach (Keyword keyword in keywords) {
KeywordEstimateRequest keywordEstimateRequest = new KeywordEstimateRequest();
keywordEstimateRequest.keyword = keyword;
keywordEstimateRequests.Add(keywordEstimateRequest);
}
// Create negative keywords.
Keyword negativeKeyword1 = new Keyword();
negativeKeyword1.text = "moon walk";
negativeKeyword1.matchType = KeywordMatchType.BROAD;
KeywordEstimateRequest negativeKeywordEstimateRequest = new KeywordEstimateRequest();
negativeKeywordEstimateRequest.keyword = negativeKeyword1;
negativeKeywordEstimateRequest.isNegative = true;
keywordEstimateRequests.Add(negativeKeywordEstimateRequest);
// Create ad group estimate requests.
AdGroupEstimateRequest adGroupEstimateRequest = new AdGroupEstimateRequest();
adGroupEstimateRequest.keywordEstimateRequests = keywordEstimateRequests.ToArray();
adGroupEstimateRequest.maxCpc = new Money();
adGroupEstimateRequest.maxCpc.microAmount = 1000000;
// Create campaign estimate requests.
CampaignEstimateRequest campaignEstimateRequest = new CampaignEstimateRequest();
campaignEstimateRequest.adGroupEstimateRequests = new AdGroupEstimateRequest[] {
adGroupEstimateRequest};
// See http://code.google.com/apis/adwords/docs/appendix/countrycodes.html
// for a detailed list of country codes.
Location countryCriterion = new Location();
countryCriterion.id = 2840; //US
// See http://code.google.com/apis/adwords/docs/appendix/languagecodes.html
// for a detailed list of language codes.
Language languageCriterion = new Language();
languageCriterion.id = 1000; //en
campaignEstimateRequest.criteria = new Criterion[] {countryCriterion, languageCriterion};
// Create the selector.
TrafficEstimatorSelector selector = new TrafficEstimatorSelector();
selector.campaignEstimateRequests = new CampaignEstimateRequest[] {campaignEstimateRequest};
try {
// Get traffic estimates.
TrafficEstimatorResult result = trafficEstimatorService.get(selector);
// Display traffic estimates.
if (result != null && result.campaignEstimates != null &&
result.campaignEstimates.Length > 0) {
CampaignEstimate campaignEstimate = result.campaignEstimates[0];
if (campaignEstimate.adGroupEstimates != null &&
campaignEstimate.adGroupEstimates.Length > 0) {
AdGroupEstimate adGroupEstimate = campaignEstimate.adGroupEstimates[0];
if (adGroupEstimate.keywordEstimates != null) {
for (int i = 0; i < adGroupEstimate.keywordEstimates.Length; i++) {
Keyword keyword = keywordEstimateRequests[i].keyword;
KeywordEstimate keywordEstimate = adGroupEstimate.keywordEstimates[i];
if (keywordEstimateRequests[i].isNegative) {
continue;
}
// Find the mean of the min and max values.
long meanAverageCpc = (keywordEstimate.min.averageCpc.microAmount
+ keywordEstimate.max.averageCpc.microAmount) / 2;
double meanAveragePosition = (keywordEstimate.min.averagePosition
+ keywordEstimate.max.averagePosition) / 2;
float meanClicks = (keywordEstimate.min.clicksPerDay
+ keywordEstimate.max.clicksPerDay) / 2;
long meanTotalCost = (keywordEstimate.min.totalCost.microAmount
+ keywordEstimate.max.totalCost.microAmount) / 2;
Console.WriteLine("Results for the keyword with text = '{0}' and match type = " +
"'{1}':", keyword.text, keyword.matchType);
Console.WriteLine(" Estimated average CPC: {0}", meanAverageCpc);
Console.WriteLine(" Estimated ad position: {0:0.00}", meanAveragePosition);
Console.WriteLine(" Estimated daily clicks: {0}", meanClicks);
Console.WriteLine(" Estimated daily cost: {0}", meanTotalCost);
}
}
}
} else {
Console.WriteLine("No traffic estimates were returned.\n");
}
} catch (Exception ex) {
throw new System.ApplicationException("Failed to retrieve traffic estimates.", ex);
}
}