/// <summary> /// Gets the excluded keyword search parameters. /// </summary> /// <param name="negativeTerms">The negative terms.</param> /// <returns>The excluded search parameters.</returns> private static ExcludedKeywordSearchParameter GetExcludedKeywordSearchParams( SeedKeyword[] negativeTerms) { ExcludedKeywordSearchParameter excludedKeywords = new ExcludedKeywordSearchParameter(); List <AdWords.v201502.Keyword> keywords = new List <AdWords.v201502.Keyword>(); foreach (SeedKeyword negativeTerm in negativeTerms) { keywords.Add(new AdWords.v201502.Keyword() { text = negativeTerm.Keyword.Text, matchType = negativeTerm.Keyword.MatchType }); } excludedKeywords.keywords = keywords.ToArray(); return(excludedKeywords); }
/// <summary> /// Gets keyword ideas for the list of Seed keywords. /// </summary> /// <param name="user">The user for which keyword ideas are generated. /// </param> /// <param name="seedKeywords">The seed keywords for generating ideas. /// </param> /// <param name="searchParameters">The search parameters to be used when /// generating keyword ideas.</param> /// <returns>A list of keyword ideas.</returns> private List <KeywordIdea> GetKeywordIdeas(AdWordsUser user, List <string> seedKeywords, SeedKeyword[] negativeTerms) { // Get the TargetingIdeaService. TargetingIdeaService targetingIdeaService = (TargetingIdeaService)user.GetService(AdWordsService.v201502.TargetingIdeaService); ExcludedKeywordSearchParameter excludedTerms = null; if (negativeTerms.Length > 0) { excludedTerms = GetExcludedKeywordSearchParams(negativeTerms); } LanguageSearchParameter languageParams = GetLanguageSearchParams(); LocationSearchParameter locationParams = GetLocationSearchParams(); List <KeywordIdea> retval = new List <KeywordIdea>(); for (int i = 0; i < seedKeywords.Count; i += Settings.TIS_KEYWORDS_LIST_SIZE) { List <string> keywordsToSearch = new List <string>(); for (int j = i; j < i + Settings.TIS_KEYWORDS_LIST_SIZE && j < seedKeywords.Count; j++) { keywordsToSearch.Add(seedKeywords[j]); } // Create selector. TargetingIdeaSelector selector = new TargetingIdeaSelector(); selector.requestType = RequestType.IDEAS; selector.ideaType = IdeaType.KEYWORD; selector.requestedAttributeTypes = new AttributeType[] { AttributeType.KEYWORD_TEXT, AttributeType.SEARCH_VOLUME, AttributeType.AVERAGE_CPC, AttributeType.COMPETITION }; List <SearchParameter> paramList = new List <SearchParameter>(); paramList.Add(new RelatedToQuerySearchParameter() { queries = keywordsToSearch.ToArray(), }); if (excludedTerms != null) { paramList.Add(excludedTerms); } paramList.Add(locationParams); paramList.Add(languageParams); selector.searchParameters = paramList.ToArray(); // Set selector paging (required for targeting idea service). Paging paging = new Paging(); paging.startIndex = 0; paging.numberResults = Settings.PAGE_SIZE; selector.paging = paging; int offset = 0; int pageSize = 500; TargetingIdeaPage page = new TargetingIdeaPage(); try { do { selector.paging.startIndex = offset; selector.paging.numberResults = pageSize; // Get related keywords. page = targetingIdeaService.get(selector); // Display related keywords. if (page.entries != null && page.entries.Length > 0) { foreach (TargetingIdea targetingIdea in page.entries) { string keyword = null; long averageMonthlySearches = 0; long averageCpc = 0; double competition = 0f; foreach (Type_AttributeMapEntry entry in targetingIdea.data) { if (entry.key == AttributeType.KEYWORD_TEXT) { StringAttribute temp = (entry.value as StringAttribute); if (temp != null) { keyword = temp.value; } } if (entry.key == AttributeType.SEARCH_VOLUME) { LongAttribute temp = (entry.value as LongAttribute); if (temp != null) { averageMonthlySearches = temp.value; } } if (entry.key == AttributeType.AVERAGE_CPC) { MoneyAttribute temp = (entry.value as MoneyAttribute); if (temp != null && temp.value != null) { averageCpc = temp.value.microAmount; } } if (entry.key == AttributeType.COMPETITION) { DoubleAttribute temp = (entry.value as DoubleAttribute); if (temp != null) { competition = temp.value; } } } KeywordIdea keywordIdea = new KeywordIdea() { KeywordText = keyword, AverageSearches = averageMonthlySearches, AverageCpc = averageCpc, Competition = Math.Round(competition, Settings.ACCURACY, MidpointRounding.AwayFromZero) }; retval.Add(keywordIdea); } } offset += pageSize; } while (offset < page.totalNumEntries); } catch (Exception ex) { throw new System.ApplicationException("Failed to retrieve related keywords.", ex); } } return(retval); }