Esempio n. 1
0
        private string GetPageTypeByUrl(Dictionary <string, string> debug, string domain, string url)
        {
            var pageTypeMappingDt = CseToMongoEtlProvider.GetDataTable("Get_Domain_PageTypes",
                                                                       new Dictionary <string, object> {
                { "@domain", domain }
            },
                                                                       "SQLCacheConnectionString", 60);

            if (pageTypeMappingDt == null || pageTypeMappingDt.Rows.Count == 0)
            {
                debug.Add("could not find page type mappings for", domain);
                return(null);
            }

            for (int i = 0; i < pageTypeMappingDt.Rows.Count; i++)
            {
                if (Regex.IsMatch(url, (string)pageTypeMappingDt.Rows[i]["Regex"]))
                {
                    string pageType = (string)pageTypeMappingDt.Rows[i]["pagetype"];
                    debug.Add("pagetype", pageType.ToLower());
                    return(pageType);
                }
            }

            debug.Add("could determin page type for", url);

            return(null);
        }
Esempio n. 2
0
        private string GetSearchKeyword(Dictionary <string, string> debug, string domain, string url)
        {
            var searchParamsDt = CseToMongoEtlProvider.GetDataTable("Get_Domain_SearchParam",
                                                                    new Dictionary <string, object> {
                { "@domain", domain }
            },
                                                                    "SQLCacheConnectionString", 60);

            if (searchParamsDt == null || searchParamsDt.Rows.Count == 0)
            {
                debug.Add("could not find search params for", domain);
                return(null);
            }

            var uri   = new Uri(url);
            var query = HttpUtility.ParseQueryString(uri.Query);

            for (int i = 0; i < searchParamsDt.Rows.Count; i++)
            {
                var param         = (string)searchParamsDt.Rows[i]["SearchParam"];
                var searchKeyword = query[param];

                if (!string.IsNullOrEmpty(searchKeyword))
                {
                    debug.Add("search keyword", searchKeyword);
                    return(searchKeyword);
                }
            }

            debug.Add("could not find search params in", url);
            return(null);
        }
Esempio n. 3
0
        public dynamic GetRtSettings()
        {
            var dataTable = CseToMongoEtlProvider.GetDataTable("sp_GET_DealFinder_RT_Settings",
                                                               new Dictionary <string, object>
            {
                { "@CampaignId", _context.CampaignId }
            },
                                                               "SQLCacheConnectionString", 60);

            if (dataTable == null || dataTable.Rows.Count == 0)
            {
                return(new
                {
                    rt_campaign_id = "",
                    is_active = false,
                    freq = 0,
                    non_e_com_rec = 0,
                    e_com_rec = 0
                });
            }

            return(new
            {
                rt_campaign_id = (string)dataTable.Rows[0]["CampaignID_RT"],
                is_active = ((byte)dataTable.Rows[0]["active"]) == 1 ? true : false,
                freq = (short)dataTable.Rows[0]["Frequency_Not30K"],
                non_e_com_rec = (short)dataTable.Rows[0]["Reccency_Not30K"],
                e_com_rec = (short)dataTable.Rows[0]["Reccency_30K"]
            });
        }
Esempio n. 4
0
        private List <string> GetDomainTriggersAndCountry(DealFinderContext context)
        {
            var timer     = new TimerProvider(context, "get-domain-triggers");
            var dataTable = CseToMongoEtlProvider.GetDataTable("sp_Get_DomainTrigger",

                                                               new Dictionary <string, object>
            {
                { "Domain", context.DomainName }
            },
                                                               "SQLCacheConnectionString", 60);

            timer.StopTimer();

            timer = new TimerProvider(context, "domain-triggers-match-time");

            var domainTriggers = new List <string>();

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                domainTriggers.Add((string)dataTable.Rows[i][0]);
                context.Country = dataTable.Rows[i][1] == DBNull.Value ? "US" : (string)dataTable.Rows[i][1];
            }

            timer.StopTimer();

            return(domainTriggers);
        }
Esempio n. 5
0
        private DataRow[] GetDomainCache(string strDomain)
        {
            string    exp                 = "DomainName = '" + strDomain + "'";
            string    sortOrder           = "Priority DESC,isPrefixCacheRegex DESC";
            DataTable dtCacheDomainsCache = CseToMongoEtlProvider.GetDataTable("dtCacheDomains", "", "SQLCacheConnectionString", 60);

            //  DataTable dtCacheDomainsCache = CU.GetCacheTable("dtCacheDomains", "SQLCacheConnectionString", 11);
            DataRow[] drw = new DataRow[0];
            try
            {
                //drw = dtCacheDomainsCache.Select(exp, sortOrder);
                DataView dv;
                lock (dtCacheDomainsCache)
                {
                    dv = new DataView(dtCacheDomainsCache, exp, sortOrder, DataViewRowState.Added);

                    if (dv.Count == 0)
                    {
                        dv = new DataView(dtCacheDomainsCache, exp, sortOrder, DataViewRowState.OriginalRows);
                    }

                    drw = dv.ToTable().Select();
                }
            }
            catch
            {
            }
            return(drw);
        }
Esempio n. 6
0
        private string GetDomainToMidMapping(int cse)
        {
            var dt = CseToMongoEtlProvider.GetDataTable("Get_Domain_Mids",
                                                        new Dictionary <string, object>
            {
                { "@domain", _context.DomainName }
            },
                                                        "SQLCacheConnectionString", 24);

            if (dt == null || dt.Rows.Count == 0)
            {
                return("undefined");
            }

            var rows = dt.Select("api = " + cse.ToString());

            if (rows.Length == 0)
            {
                return("undefined");
            }

            string mid = rows[0][0] as string;

            return(mid);
        }
Esempio n. 7
0
        private dynamic GetDomainPriceInterval()
        {
            var dt = CseToMongoEtlProvider.GetDataTable("Get_DomainPriceRange",
                                                        new Dictionary <string, object>
            {
                { "@domain", _context.DomainName }
            },
                                                        "SQLCacheConnectionString", 24);

            if (dt == null || dt.Rows.Count == 0)
            {
                return(new
                {
                    min = 0,
                    max = 0
                });
            }
            else
            {
                return(new
                {
                    min = (double)((int)dt.Rows[0]["min"]) / 100,
                    max = (double)((int)dt.Rows[0]["max"]) / 100
                });
            }
        }
Esempio n. 8
0
        private List <short> GetCseApisAndCurrencyForCurrentCampaignId()
        {
            var dt = CseToMongoEtlProvider.GetDataTable("Get_Campaign_Apis",
                                                        new Dictionary <string, object>
            {
                { "CampaignID", string.IsNullOrEmpty(_context.Country) ? _context.CampaignId.ToString() : _context.Country }
            },
                                                        "SQLCacheConnectionString", 24);

            if (dt == null || dt.Rows.Count == 0)
            {
                return(new List <short>());
            }

            _context.Currency = dt.Rows[0][1].ToString();

            var apis = new List <short>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                apis.Add((short)dt.Rows[i][0]);
            }

            return(apis);
        }
Esempio n. 9
0
        public static string GenerateOuterClickUrl(string offerUrl, string pageId, int shownProducts, int shownStores, int storePos,
                                                   string prodPrice, string storePrice, string prodSku, string minStorePrice,
                                                   string maxStorePrice, DealFinderContext dealFinderContext, string api,
                                                   bool encode)
        {
            var queryParams = new StringBuilder();

            queryParams.Append(string.Format("productURL={0}&", HttpUtility.UrlEncode(offerUrl)));
            queryParams.Append(string.Format("domainName={0}&", dealFinderContext.DomainName));
            queryParams.Append(string.Format("pageId={0}&", pageId));
            queryParams.Append(string.Format("currency={0}&", dealFinderContext.Currency));
            queryParams.Append(string.Format("category={0}&", dealFinderContext.Category));
            queryParams.Append(string.Format("country={0}&", dealFinderContext.Country));
            queryParams.Append(string.Format("impressionId={0}&", dealFinderContext.ImpressionId));
            queryParams.Append(string.Format("userId={0}&", dealFinderContext.UserId));
            queryParams.Append(string.Format("campaignId={0}&", dealFinderContext.CampaignId));
            queryParams.Append(string.Format("shownProducts={0}&", shownProducts));
            queryParams.Append(string.Format("shownStores={0}&", shownStores));
            queryParams.Append(string.Format("storeApi={0}&", api));
            queryParams.Append(string.Format("storePos={0}&", storePos));
            queryParams.Append(string.Format("storePrice={0}&", storePrice));
            queryParams.Append(string.Format("productPrice={0}&", prodPrice));
            queryParams.Append(string.Format("minStorePrice={0}&", minStorePrice));
            queryParams.Append(string.Format("maxStorePrice={0}&", maxStorePrice));
            queryParams.Append(string.Format("clickType={0}&", 1));
            queryParams.Append(string.Format("prodSku={0}", prodSku));

            string url = queryParams.ToString();

            string clickUrl = null;

            if (!encode)
            {
                clickUrl = string.Format("{0}/?{1}", ConfigurationManager.AppSettings["ClickUrl"], url);
            }
            else
            {
                var query         = new StringBuilder();
                var mongoProvider = new CseToMongoEtlProvider();
                var offerUrlId    = mongoProvider.GetUrlId(url);

                query.Append(string.Format("data={0}", offerUrlId));
                query.Append(string.Format("&nid={0}", dealFinderContext.Nid));
                query.Append(string.Format("&sid={0}", dealFinderContext.Sid == null ? "0" : dealFinderContext.Sid));

                clickUrl = string.Format("{0}/?{1}", ConfigurationManager.AppSettings["ClickUrl"], query.ToString());
            }

            return(clickUrl);
        }
Esempio n. 10
0
        private string GetOP(string campaignId, string sid, string nid)
        {
            Dictionary <string, object> parameters = new Dictionary <string, object>();

            parameters.Add("AID", campaignId);
            parameters.Add("PID", nid == null ? "" : nid);
            parameters.Add("SE", 0);
            parameters.Add("SID", sid == null ? "" : sid);

            DataTable aidMapping = CseToMongoEtlProvider.GetDataTable("SP_DF_GET_MappedCampaign", parameters, "SQLCacheConnectionString", 24);

            string op = aidMapping.Rows[0]["OP"].ToString();

            return(op);
        }
Esempio n. 11
0
        public bool IsEcommerceDomain()
        {
            var dataTable = CseToMongoEtlProvider.GetDataTable("sp_Domain_in30K",
                                                               new Dictionary <string, object>
            {
                { "@Domain", _context.DomainName }
            },
                                                               "SQLCacheConnectionString", 60);

            if (dataTable == null || dataTable.Rows.Count == 0)
            {
                return(false);
            }

            return(((int)dataTable.Rows[0][0]) == 0 ? false : true);
        }
Esempio n. 12
0
        private string GetProductName(Dictionary <string, string> debug, string domain, string url)
        {
            var urlKeywordMappingsDt = CseToMongoEtlProvider.GetDataTable("Get_Domain_UrlProduct",
                                                                          new Dictionary <string, object> {
                { "@domain", domain }
            },
                                                                          "SQLCacheConnectionString", 60);

            if (urlKeywordMappingsDt == null || urlKeywordMappingsDt.Rows.Count == 0)
            {
                return(null);

                //debug.Add("could not find url mapping for domain, executing get site data", domain);

                //try
                //{
                //    var siteData = MarketProvider.GetSiteData(debug, "6000666", url, false);

                //    return siteData.productName;
                //}
                //catch
                //{

                //}
            }
            else
            {
                debug.Add("url mapping found", domain);

                short  level      = (short)urlKeywordMappingsDt.Rows[0]["Level"];
                string stopString = (string)urlKeywordMappingsDt.Rows[0]["StopString"];
                string divider    = (string)urlKeywordMappingsDt.Rows[0]["Divider"];

                var uri = new Uri(url);

                string keyword = uri.Segments[level - 1];
                keyword = keyword.Replace(stopString, "");
                keyword = keyword.Replace(divider, " ");

                return(keyword);
            }

            return(null);
        }
Esempio n. 13
0
        private List <CseProductInfo> GetProductsFromPcmAction(CsePcmInfo pcmInfo, string op)
        {
            var matches         = pcmInfo.Matches;
            var cseDataProvider = new CseToMongoEtlProvider();
            var products        = new List <CseProductInfo>();

            foreach (var match in matches)
            {
                foreach (var pid in match.Pids)
                {
                    CseProductInfo product = null;

                    if (match.Cse == 9 || match.Cse == 10)
                    {
                        product = cseDataProvider.GetProduct(match.Cse, op + "_" + pid);
                    }
                    else
                    {
                        product = cseDataProvider.GetProduct(match.Cse, pid);
                    }

                    if (product == null)
                    {
                        return(new List <CseProductInfo>());
                    }

                    foreach (var offer in product.Offers)
                    {
                        offer.MerchantInfo = cseDataProvider.GetMerchant(match.Cse, offer.MerchantId);
                    }

                    products.Add(product);
                }

                _context.AddCseOptimizationMapping(match.Cse.ToString(), match.ModifiedBy);
            }

            return(products);
        }
Esempio n. 14
0
        private List <CseProductInfo> GetProductsFromCseAction(int minNumberOfOffers)
        {
            var timer = new TimerProvider(_context, "get-campaign-apis-sql");
            var apis  = GetCseApisAndCurrencyForCurrentCampaignId();

            timer.StopTimer();

            if (apis.Count == 0)
            {
                return(new List <CseProductInfo>());
            }

            var cseDataProvider = new CseToMongoEtlProvider();

            var productsList    = new List <CseProductInfo>();
            var rawProductsList = new List <CseProductInfo>();
            var merchantsList   = new List <CseMerchantInfo>();

            int totalNumberOfOffers = 0;

            while (true)
            {
                for (int i = 0; i < apis.Count; i++)
                {
                    MatchingData matchingData = null;

                    try
                    {
                        matchingData = GetProtuctsFromCseByKeyword(apis[i]);

                        if (matchingData == null)
                        {
                            matchingData = new MatchingData();
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.ErrorFormat("failed get data from cse [{0}], ex: [{1}]", apis[i], ex.Message);
                        _context.AddCseExecutionFailure(apis[i].ToString(), "Failed");
                    }

                    _context.AddCseNumberOfRawResults(apis[i].ToString(), matchingData.Matches.Count.ToString());

                    if (matchingData.Matches.Count == 0)
                    {
                        continue;
                    }

                    _context.AddCseExecutionFailure(apis[i].ToString(), "OK");

                    List <CseProductInfo>  products  = null;
                    List <CseMerchantInfo> merchants = null;

                    cseDataProvider.ParseProductAndMerchants(apis[i], "widget", matchingData.ds, out products, out merchants);

                    if (products.Count == 0)
                    {
                        continue;
                    }

                    merchantsList.AddRange(merchants.Select(x => (CseMerchantInfo)x.Clone()));
                    rawProductsList.AddRange(products.Select(x => (CseProductInfo)x.Clone()));

                    var filterProvider = new FilterProvider(_context);

                    products = filterProvider.FilterSameStore(products);
                    products = filterProvider.FilterPriceRange(products);

                    if (products.Count == 0)
                    {
                        continue;
                    }

                    productsList.AddRange(products);

                    productsList = filterProvider.FilterDuplicateStores(productsList);
                    productsList = filterProvider.FilterDuplicateProductId(productsList);

                    if (productsList.Count == 0)
                    {
                        continue;
                    }

                    totalNumberOfOffers = CountProdcutOffers(productsList);

                    if (totalNumberOfOffers >= minNumberOfOffers)
                    {
                        break;
                    }
                }

                totalNumberOfOffers = CountProdcutOffers(productsList);

                if (totalNumberOfOffers >= minNumberOfOffers)
                {
                    break;
                }

                if (!_context.IsDefaultPrice)
                {
                    var filterProvider = new FilterProvider(_context);

                    rawProductsList = filterProvider.FilterDuplicateStores(rawProductsList);
                    rawProductsList = filterProvider.FilterDuplicateProductId(rawProductsList);

                    totalNumberOfOffers = CountProdcutOffers(rawProductsList);

                    if (totalNumberOfOffers >= minNumberOfOffers)
                    {
                        productsList = rawProductsList;
                        break;
                    }
                }

                if (!ShrinkKeywordStart())
                {
                    break;
                }
            }

            ThreadPool.QueueUserWorkItem(state =>
            {
                dynamic param = state as dynamic;

                cseDataProvider.AddCseResultToMongoDb("widget", _context.Op, param.products, param.merchants, false);
            }, new
            {
                products  = new List <CseProductInfo>(rawProductsList.Select(x => (CseProductInfo)x.Clone())),
                merchants = new List <CseMerchantInfo>(merchantsList.Select(x => (CseMerchantInfo)x.Clone()))
            });

            return(productsList);
        }