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();
            }
        }
    }
示例#2
0
        /// <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);
        }
示例#3
0
    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();
            }
        }
    }
示例#4
0
        /// <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);
        }