private void ShowSearchCriteria() { //ListItem li = new ListItem(((Profiles)Session["ProfileSearchRequest"]).QueryDefinition.Name.FirstName.Text, List <string> searchRequestList = (List <string>)Session["ProfileSearchRequestCriteriaList"]; if (searchRequestList.Count > 0) { lstSearchCriteriaDisplay.DataSource = (List <string>)Session["ProfileSearchRequestCriteriaList"]; lstSearchCriteriaDisplay.DataBind(); } string keyWords = Convert.ToString(((Profiles)Session["ProfileSearchRequest"]).QueryDefinition.Keywords.KeywordString.Text); if (keyWords != null) { Profiles searchReq = (Profiles)Session["ProfileSearchRequest"]; string keyword = searchReq.QueryDefinition.Keywords.KeywordString.Text; string queryId = searchReq.QueryDefinition.QueryID; KeywordMatchType matchType = searchReq.QueryDefinition.Keywords.KeywordString.MatchType; bool matchExact = (matchType == KeywordMatchType.exact) ? true : false; MatchingKeywordList keywordList = new Connects.Profiles.Service.ServiceImplementation.ProfileService().GetMatchingKeywords(keyword, queryId, matchExact); if (keywordList.Count > 0) { lstSearchKeywordDisplay.DataSource = keywordList; lstSearchKeywordDisplay.DataBind(); } } }
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="campaignId">The campaign ID.</param> /// <param name="maxCpcInMicros">The max CPC in micros.</param> /// <param name="outputFile">The output file.</param> public void Run(AdWordsUser user, long campaignId, long maxCpcInMicros, string outputFile) { List <SeedKeyword> sqrKeywords = GetSeedKeywordsFromQueryReport(user, campaignId); List <SeedKeyword> accountKeywords = GetSeedKeywordsFromTopKeywords(user, campaignId); List <SeedKeyword> userKeywords = GetSeedKeywordsFromUserInput( Settings.USER_KEYWORDS_FILE_PATH); List <SeedKeyword> negativeTerms = GetNegativeTermsFromUserInput( Settings.USER_NEGATIVE_TERMS_FILE_PATH); HashSet <string> keywords = new HashSet <string>(); keywords.UnionWith(GetKeyword(sqrKeywords)); keywords.UnionWith(GetKeyword(accountKeywords)); keywords.UnionWith(GetKeyword(userKeywords)); List <KeywordIdea> ideas = GetKeywordIdeas(user, new List <string>(keywords), negativeTerms.ToArray()); KeywordMatchType[] matchTypesToSearch = new KeywordMatchType[] { KeywordMatchType.BROAD, KeywordMatchType.EXACT, KeywordMatchType.PHRASE }; List <TrafficEstimate> trafficEstimates = new List <TrafficEstimate>(); foreach (KeywordMatchType matchType in matchTypesToSearch) { List <TrafficEstimate> trafficEstimate = GetTrafficEstimates( user, ideas, matchType, maxCpcInMicros, campaignId ); trafficEstimates.AddRange(trafficEstimate); } long adGroupId = GetAdGroupForPolicyChecks(user, campaignId); CheckPolicyViolations(user, trafficEstimates, adGroupId); SaveEstimates(trafficEstimates, outputFile); }
private void ShowSearchCriteria() { List <string> searchRequestList = (List <string>)Session["ProfileSearchRequestCriteriaList"]; if (searchRequestList.Count > 0) { lstSearchCriteriaDisplay.DataSource = (List <string>)Session["ProfileSearchRequestCriteriaList"]; lstSearchCriteriaDisplay.DataBind(); } string keyword = ""; if (this.txtKeyword.Text.Length > 0) { keyword = this.txtKeyword.Text; } else if (Session["ProfileSearchRequestKeywordList"] != null) { if (((List <string>)Session["ProfileSearchRequestKeywordList"]).Count > 0) { keyword = ((List <string>)Session["ProfileSearchRequestKeywordList"])[0]; } } if (keyword.Length > 0) { Profiles searchReq = (Profiles)Session["ProfileSearchRequest"]; string searchKeyword = searchReq.QueryDefinition.Keywords.KeywordString.Text; string queryId = searchReq.QueryDefinition.QueryID; KeywordMatchType matchType = searchReq.QueryDefinition.Keywords.KeywordString.MatchType; bool matchExact = (matchType == KeywordMatchType.exact) ? true : false; MatchingKeywordList keywordList = new Connects.Profiles.Service.ServiceImplementation.ProfileService().GetMatchingKeywords(searchKeyword, queryId, matchExact); if (keywordList.Count > 0) { lstSearchKeywordDisplay.DataSource = keywordList; lstSearchKeywordDisplay.DataBind(); } } }
/// <summary> /// Gets the traffic estimates for a list of keywords. /// </summary> /// <param name="user">The user for which keyword ideas are generated.</param> /// <param name="keywords">The keywords for which traffic estimates are /// done.</param> /// <param name="matchType">Type of the keyword match to apply when making /// traffic estimates.</param> /// <param name="maxCpc">The maximum CPC to consider for the traffic.</param> /// <param name="campaignId">The campaign ID whose settings should be used /// for traffic estimation.</param> /// <returns>A list of traffic estimates for the keywords.</returns> private List <TrafficEstimate> GetTrafficEstimates(AdWordsUser user, List <KeywordIdea> keywords, KeywordMatchType matchType, long maxCpc, long campaignId) { // Get the TrafficEstimatorService. TrafficEstimatorService trafficEstimatorService = (TrafficEstimatorService)user.GetService( AdWordsService.v201607.TrafficEstimatorService); List <Criterion> trafficCriteria = GetTrafficEstimateCriteria(); List <TrafficEstimate> retval = new List <TrafficEstimate>(); // Eliminate duplicate keywords in the keyword suggestion list so that // TrafficEstimatorService doesn't complain about them. Dictionary <string, KeywordIdea> uniqueEntries = new Dictionary <string, KeywordIdea>(); for (int i = 0; i < keywords.Count; i++) { if (!uniqueEntries.ContainsKey(keywords[i].KeywordText)) { uniqueEntries[keywords[i].KeywordText] = keywords[i]; } } keywords = new List <KeywordIdea>(uniqueEntries.Values); for (int i = 0; i < keywords.Count; i += Settings.TES_KEYWORDS_LIST_SIZE) { List <KeywordEstimateRequest> keywordEstimateRequests = new List <KeywordEstimateRequest>(); for (int j = i; j < i + Settings.TES_KEYWORDS_LIST_SIZE && j < keywords.Count; j++) { KeywordEstimateRequest keywordEstimateRequest = new KeywordEstimateRequest() { keyword = new Keyword() { text = keywords[j].KeywordText, matchType = matchType } }; keywordEstimateRequests.Add(keywordEstimateRequest); } // Create campaign estimate requests. CampaignEstimateRequest campaignEstimateRequest = new CampaignEstimateRequest() { adGroupEstimateRequests = new AdGroupEstimateRequest[] { new AdGroupEstimateRequest() { keywordEstimateRequests = keywordEstimateRequests.ToArray(), maxCpc = new Money() { microAmount = maxCpc } } } }; campaignEstimateRequest.criteria = trafficCriteria.ToArray(); campaignEstimateRequest.campaignId = campaignId; // 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 k = 0; k < adGroupEstimate.keywordEstimates.Length; k++) { Keyword keyword = keywordEstimateRequests[k].keyword; KeywordEstimate keywordEstimate = adGroupEstimate.keywordEstimates[k]; if (keywordEstimateRequests[k].isNegative) { continue; } // Find the mean of the min and max values. long meanAverageCpc = 0; double meanAveragePosition = 0; long meanClicks = 0; long meanImpressions = 0; long meanTotalCost = 0; if (keywordEstimate.min != null && keywordEstimate.max != null) { if (keywordEstimate.min.averageCpc != null && keywordEstimate.max.averageCpc != null) { meanAverageCpc = (long)Math.Round( (double)(keywordEstimate.min.averageCpc.microAmount + keywordEstimate.max.averageCpc.microAmount) / 2, Settings.ACCURACY, MidpointRounding.AwayFromZero); } meanAveragePosition = Math.Round((keywordEstimate.min.averagePosition + keywordEstimate.max.averagePosition) / 2, Settings.ACCURACY, MidpointRounding.AwayFromZero); meanClicks = (long)Math.Round((keywordEstimate.min.clicksPerDay + keywordEstimate.max.clicksPerDay) / 2, MidpointRounding.AwayFromZero); meanImpressions = (long)Math.Round((keywordEstimate.min.impressionsPerDay + keywordEstimate.max.impressionsPerDay) / 2, MidpointRounding.AwayFromZero); if (keywordEstimate.min.totalCost != null && keywordEstimate.max.totalCost != null) { meanTotalCost = (keywordEstimate.min.totalCost.microAmount + keywordEstimate.max.totalCost.microAmount) / 2; } } TrafficEstimate trafficEstimate = new TrafficEstimate() { Keyword = keywords[i + k], MatchType = keyword.matchType, Clicks = meanClicks, Impressions = meanImpressions, Cost = meanTotalCost, AverageCpc = meanAverageCpc, AveragePosition = meanAveragePosition }; retval.Add(trafficEstimate); } } } } } catch (Exception e) { throw new System.ApplicationException("Failed to retrieve traffic estimates.", e); } } return(retval); }