/// <summary> /// Gets the seed keywords from a Search Query Report. /// </summary> /// <param name="user">The user for which reports are run.</param> /// <param name="campaignId">ID of the campaign for which we are generating /// keyword ideas.</param> /// <returns>A list of seed keywords from SQR, to be used for getting /// further keyword ideas.</returns> private List <SeedKeyword> GetSeedKeywordsFromQueryReport(AdWordsUser user, long campaignId) { string query = string.Format("Select Query, MatchTypeWithVariant, Clicks, Impressions " + "from SEARCH_QUERY_PERFORMANCE_REPORT where CampaignId = {0} during LAST_MONTH", campaignId); AdWordsAppConfig config = (AdWordsAppConfig)user.Config; config.SkipReportHeader = true; config.SkipReportSummary = true; ReportUtilities utilities = new ReportUtilities(user, query, DownloadFormat.CSV.ToString()); ReportResponse response = utilities.GetResponse(); List <SeedKeyword> retval = new List <SeedKeyword>(); using (response) { byte[] data = response.Download(); string report = Encoding.UTF8.GetString(data); CsvFile csvFile = new CsvFile(); csvFile.ReadFromString(report, true); foreach (string[] row in csvFile.Records) { row[1] = row[1].Replace("(close variant)", "").Trim(); SeedKeyword sqrKeyword = new SeedKeyword() { Keyword = new LocalKeyword() { Text = row[0], MatchType = (KeywordMatchType)Enum.Parse(typeof(KeywordMatchType), row[1], true) }, Stat = new Stat() { Clicks = long.Parse(row[2]), Impressions = long.Parse(row[3]) }, Source = GetNewKeywords.Source.SQR }; retval.Add(sqrKeyword); } } LimitResults(retval, Settings.SQR_MAX_RESULTS); return(retval); }
/// <summary> /// Gets a list of the seed keywords from user input. /// </summary> /// <param name="filePath">The file path.</param> /// <returns>A list of user-provided keywords that will be used for /// generating keyword ideas.</returns> private List<SeedKeyword> GetSeedKeywordsFromUserInput(string filePath) { CsvFile csvFile = new CsvFile(); csvFile.Read(filePath, true); List<SeedKeyword> retval = new List<SeedKeyword>(); foreach (string[] row in csvFile.Records) { SeedKeyword userKeyword = new SeedKeyword() { Keyword = new LocalKeyword() { Text = row[0], MatchType = (KeywordMatchType) Enum.Parse(typeof(KeywordMatchType), row[1], true) }, Source = GetNewKeywords.Source.USER }; retval.Add(userKeyword); } return retval; }