コード例 #1
0
        private dynamic GetProductsByUrlOrKeywordAction(DealFinderContext context)
        {
            dynamic result = null;

            var timer = new TimerProvider(context, "get-url-mapping-data");

            var urlMappingProvider = new UrlMappingProvider();
            var urlMapping         = urlMappingProvider.GetUrlMappingData(context.Url);

            timer.StopTimer();

            if (urlMapping != null && urlMapping.data != null)
            {
                context.ProductName      = urlMapping.data.pagetype == "search" ? urlMapping.data.keyword : null;
                context.PageType         = urlMapping.data.pagetype == "search" ? "search" : "product";
                context.IsDefaultPrice   = urlMapping.data.pagetype == "search" ? true : false;
                context.CachedValue      = urlMapping.data.pagetype == "search" ? context.ProductName : null;
                context.SearchDomainName = urlMapping.data.pagetype == "search" ? string.Format("ac.search.{0}", context.Country.ToLower()) : null;
            }

            if (context.ProductName == null)
            {
                result = GetProductsByUrlAction(context);
            }
            else
            {
                result = GetProductsByKeywordAction(context);
            }

            return(result);
        }
コード例 #2
0
        private dynamic GetProductsByKeywordAction(DealFinderContext context)
        {
            var appCachedValue = string.Format("GetProductsByKeyword:{0}:{1}", context.Url, context.CampaignId);
            var products       = new List <CseProductInfo>();
            var pcmInfo        = new CsePcmInfo();

            if (MemoryCache.Default.Get(appCachedValue) == null || context.QaMode == true)
            {
                products = RetrieveProducts(context, out pcmInfo);

                dynamic cacheObject = new
                {
                    products = products,
                    pcm      = pcmInfo
                };

                MemoryCache.Default.Add(appCachedValue, cacheObject, DateTimeOffset.Now.AddHours(4));
            }
            else
            {
                context.Status = 1;

                var cacheOject = (dynamic)MemoryCache.Default[appCachedValue];

                products = cacheOject.products;
                pcmInfo  = cacheOject.pcm;
            }

            context.Currency = pcmInfo.Currency;

            var result = GetResult(context, pcmInfo, products);

            return(result);
        }
コード例 #3
0
        private void AddDebugParameters(DealFinderContext context)
        {
            context.AddDebug("Time Stamp", DateTime.Now.ToString());
            context.AddDebug("Url", context.Url);
            context.AddDebug("Trigger", context.CurrentTrigger);
            context.AddDebug("Campaign ID", context.CampaignId);
            context.AddDebug("GUID", context.NewUserId);
            context.AddDebug("Impression ID", context.NewImpressionId);
            context.AddDebug("Domain", context.DomainName);
            context.AddDebug("Is Domain In DataBase?", context.IsDomainInDataBase ? "Yes" : "No");
            context.AddDebug("Page Type", context.PageType);
            context.AddDebug("Country", context.Country);
            context.AddDebug("SKU", context.CachedValue);
            context.AddDebug("SKU in PCM?", context.IsExistInPcm ? "Yes" : "No");
            context.AddDebug("Is Get Site Data Executed?", context.IsGetSiteDataExecuted ? "Yes" : "No");
            context.AddDebug("Is Get Site Data Failed?", context.IsGetSiteDataFailed ? "Yes" : "No");
            context.AddDebug("Product Name", context.ProductName);
            context.AddDebug("Product Price", context.Price.ToString());
            context.AddDebug("Domain Price Rule", context.DomainPriceRule);
            context.AddDebug("Currency", context.Currency);
            context.AddDebug("SKU Optimized By", JsonConvert.SerializeObject(context.CseOptimizationMapping));
            context.AddDebug("Pre Filtered Products", JsonConvert.SerializeObject(context.CseNumberOfRawResults));
            context.AddDebug("Total Offers Available To Display", context.TotalNumberOfOffersToDisplay.ToString());
            context.AddDebug("CSE Call Status", JsonConvert.SerializeObject(context.CseExecutionFailure));

            context.AddDebug("Is Retargeting Enabled", context.IsRetargetingEnabled ? "Yes" : "No");
            context.AddDebug("Is Retargeting Result", context.IsRetargetingResult ? "Yes" : "No");
            context.AddDebug("Is eCommerce Domain", context.IsEcommerceDomain ? "Yes" : "No");
            context.AddDebug("eCommerce Recency", context.EcommerceRecency);
            context.AddDebug("Non eCommerce Recency", context.NonEcommerceRecency);
            context.AddDebug("Non eCommerce Frequency", context.NonEcommerceFrequency);
        }
コード例 #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);
        }
コード例 #5
0
        private dynamic LogResult(DealFinderContext context, dynamic result)
        {
            int    index         = 0;
            int    totalOffers   = result.products.Count;
            double minOfferPrice = totalOffers == 0 ? 0 : result.products[0].product_price_raw;
            double maxOfferPrice = totalOffers == 0 ? 0 : result.products[result.products.Count - 1].product_price_raw;

            var businessLogerProvider = new BusinessLoggerProvider();

            foreach (var offer in result.products)
            {
                context.Category = offer.category;

                businessLogerProvider.LogImpression(totalOffers.ToString(),
                                                    "0", minOfferPrice.ToString(),
                                                    maxOfferPrice.ToString(), result.price.ToString(),
                                                    context.CachedValue, index.ToString(), offer.product_price_raw.ToString(),
                                                    offer.merchant_id, offer.cse.ToString(),
                                                    offer.product_id, result.keyword, context);

                index++;
            }

            businessLogerProvider.LogImpression(totalOffers.ToString(), totalOffers.ToString(),
                                                "0", "0", result.price.ToString(), context.CachedValue, context.Status == -1 ? "-2" : "-1", "0",
                                                context.Status.ToString(), "0", "0", result.keyword, context);

            return(result);
        }
コード例 #6
0
        public dynamic GetProductsByUrl(string url, string campaignId, dynamic cookies, bool qaMode)
        {
            var context = new DealFinderContext(HttpContext.Current)
            {
                Url             = HttpUtility.UrlDecode(url),
                DomainName      = GetDomainName(HttpUtility.UrlDecode(url)),
                CampaignId      = campaignId,
                QaMode          = qaMode,
                NewUserId       = cookies.userId == "" ? Guid.NewGuid().ToString() : cookies.userId,
                NewImpressionId = Guid.NewGuid().ToString(),
            };

            context.UserId       = context.NewUserId;
            context.ImpressionId = context.NewImpressionId;

            dynamic result = null;

            try
            {
                result = GetProductsByUrlOrKeywordAction(context);
            }
            catch (Exception ex)
            {
                context.Status = 3;

                var pcmInfo  = new CsePcmInfo();
                var products = new List <CseProductInfo>();

                result = GetResult(context, pcmInfo, products);
            }

            result = LogResult(context, result);

            return(result);
        }
コード例 #7
0
        private dynamic GetProductsByTriggerAction(DealFinderContext context)
        {
            var  domainTriggers = GetDomainTriggersAndCountry(context);
            bool hasMatch       = CheckIfCurrentDomainHasMatchForCurrentUrl(context, domainTriggers);

            var  retargetingProvider = new RetargetingProvider(context);
            var  retargetingInfo     = retargetingProvider.GetRetargetingInfo();
            var  retargetingSettings = retargetingProvider.GetRtSettings();
            bool isEcommerceDomain   = retargetingProvider.IsEcommerceDomain();

            context.IsRetargetingEnabled  = retargetingSettings.is_active;
            context.IsEcommerceDomain     = isEcommerceDomain;
            context.EcommerceRecency      = retargetingSettings.e_com_rec.ToString() + " Minutes";
            context.NonEcommerceRecency   = retargetingSettings.non_e_com_rec.ToString() + " Minutes";
            context.NonEcommerceFrequency = retargetingSettings.freq.ToString();

            dynamic result = null;

            if (hasMatch)
            {
                result = GetProductsByUrlOrKeywordAction(context);

                int stackCount = 0;
                var stack      = retargetingProvider.UpdateProductIdsStack(context.RtStack, (string)result.product_id, out stackCount);

                result.rt_stack      = stack;
                result.rt_pointer    = (stackCount - 1).ToString();
                result.rt_last_shown = DateTime.Now.Ticks.ToString();
            }
            else
            {
                context.Status             = -1;
                context.PageType           = "No Trigger";
                context.IsDomainInDataBase = GetDomainCache(context.DomainName).Length > 0;

                if (retargetingInfo == null)
                {
                    var pcmInfo  = new CsePcmInfo();
                    var products = new List <CseProductInfo>();

                    result = GetResult(context, pcmInfo, products);
                }
                else
                {
                    context.IsRetargetingResult = true;
                    context.PageType            = isEcommerceDomain ? "Retargeting eCom" : "Retargeting non eCom";

                    result = GetProductsByPcmIdAction(context, (ObjectId)retargetingInfo.product_id);

                    result.rt_pointer    = retargetingInfo.pointer;
                    result.rt_show_count = retargetingInfo.show_count.ToString();
                    result.rt_last_shown = DateTime.Now.Ticks.ToString();
                }
            }

            return(result);
        }
コード例 #8
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);
        }
コード例 #9
0
        public dynamic GetProductsByTrigger(string url, string campaignId, string sid, dynamic cookies, bool qaMode)
        {
            var context = new DealFinderContext(HttpContext.Current)
            {
                Url             = HttpUtility.UrlDecode(url),
                DomainName      = GetDomainName(HttpUtility.UrlDecode(url)),
                CampaignId      = campaignId,
                QaMode          = qaMode,
                RtPointer       = cookies.rtPointer,
                RtLastShown     = cookies.rtLastShown,
                RtShowCount     = cookies.rtShowCount,
                RtStack         = cookies.rtStack,
                NewUserId       = cookies.userId == "" ? Guid.NewGuid().ToString() : cookies.userId,
                NewImpressionId = Guid.NewGuid().ToString(),
                CookiesEnabled  = cookies.cookiesEnabled,
                Sid             = sid,
                Nid             = campaignId,
                Op = GetOP(campaignId, sid, campaignId)
            };

            var timer = new TimerProvider(context, "global-server-time");

            context.UserId       = context.NewUserId;
            context.ImpressionId = context.NewImpressionId;

            dynamic result = null;

            try
            {
                result = GetProductsByTriggerAction(context);
            }
            catch (Exception ex)
            {
                context.Status = 3;

                var pcmInfo  = new CsePcmInfo();
                var products = new List <CseProductInfo>();

                result = GetResult(context, pcmInfo, products);
            }

            result = LogResult(context, result);

            AddDebugParameters(context);

            timer.StopTimer();

            return(result);
        }
コード例 #10
0
        private string GetMoreDealsUrl(DealFinderContext context, string productName)
        {
            productName = productName.Replace(" ", "+");

            string result = null;

            if (context.Currency == "$")
            {
                result = context.ProductName != "" ? @"http://www.shoppingedge.com/keyword-" + productName + "/search.html?campaign=5900007" : "";
            }
            else
            {
                result = context.ProductName != "" ? @"http://www.uk.cybercie.com/keyword-" + productName + "/search.html?campaign=5900007" : "";
            }

            return(result);
        }
コード例 #11
0
        public void LogImpression(string shownProducts, string shownStores, string minStoresPrice, string maxStoresPrice,
                                  string prodPrice, string prodSku, string storePos, string storePrice, string storeMid,
                                  string storeApi, string storePid, string query, DealFinderContext dealFinderContext)
        {
            DfImpressionBusinessMessage impression = new DfImpressionBusinessMessage("df", "df_impression", DateTime.Now);

            impression.AbTestId        = dealFinderContext.AbTestGroupId;
            impression.AbTestStatus    = dealFinderContext.AbTestShowWidget;
            impression.Application     = "DealFinder";
            impression.CampaignID      = dealFinderContext.CampaignId.ToString();
            impression.CategoryID      = dealFinderContext.Category;
            impression.Currency        = dealFinderContext.Currency;
            impression.DomainName      = dealFinderContext.DomainName;
            impression.GUID            = dealFinderContext.UserId;
            impression.IMPID           = dealFinderContext.ImpressionId;
            impression.MachineIP       = dealFinderContext.HostName;
            impression.RequestIP       = dealFinderContext.Ip;
            impression.MessageVersion  = "1";
            impression.PageID          = dealFinderContext.Sid;
            impression.PageType        = string.IsNullOrEmpty(dealFinderContext.PageType) ? "category" : dealFinderContext.PageType;
            impression.Query           = query;
            impression.Rendered        = dealFinderContext.CookiesEnabled ? "0" : "-1";
            impression.RequestRaw      = dealFinderContext.RequestUrl;
            impression.SubCampaignID   = dealFinderContext.Country;
            impression.URL             = HttpUtility.UrlDecode(dealFinderContext.Referrer);
            impression.UserAgent       = dealFinderContext.UserAgent;
            impression.WidgetAlgorithm = "default";

            impression.SKU = prodSku;
            impression.MID = storeMid;
            impression.PID = storePid;
            impression.API = storeApi;

            impression.ProdPrice     = prodPrice;
            impression.ShownOffers   = shownStores;
            impression.ShownProducts = shownProducts;
            impression.MinPrice      = minStoresPrice;
            impression.MaxPrice      = maxStoresPrice;
            impression.StorePos      = storePos;
            impression.StorePrice    = storePrice;

            BusinessMessageWriter writer = new BusinessMessageWriter();

            //writer.WriteMessageToQueue(impression);
        }
コード例 #12
0
        private dynamic GetProductsByPcmIdAction(DealFinderContext context, ObjectId pcmId)
        {
            var appCachedValue = string.Format("GetProductsByPcmId:{0}", pcmId);
            var products       = new List <CseProductInfo>();
            var pcmInfo        = new CsePcmInfo();

            context.Status = 1;

            if (MemoryCache.Default.Get(appCachedValue) == null || context.QaMode == true)
            {
                var pcmProvider = new PcmProvider(context);
                pcmInfo = pcmProvider.GetProductFromPcmById(pcmId);

                context.IsExistInPcm   = true;
                context.ProductName    = pcmInfo.ProductName;
                context.Price          = pcmInfo.Price;
                context.IsDefaultPrice = pcmInfo.IsDefaultPrice;

                var productsProvider = new ProductsProvider(context);
                products = productsProvider.GetProductsFromPcm(pcmInfo);

                dynamic cacheObject = new
                {
                    products = products,
                    pcm      = pcmInfo
                };

                MemoryCache.Default.Add(appCachedValue, cacheObject, DateTimeOffset.Now.AddHours(4));
            }
            else
            {
                var cacheOject = (dynamic)MemoryCache.Default[appCachedValue];

                products = cacheOject.products;
                pcmInfo  = cacheOject.pcm;
            }

            context.Currency = pcmInfo.Currency;

            var result = GetResult(context, pcmInfo, products);

            return(result);
        }
コード例 #13
0
        public void LogClick(string prodPrice, string shownStores, string shownProducts, string storeApi,
                             string storeMid, string storePid, string storePos, string storePrice, string pageId,
                             string prodSku, string minStorePrice, string maxStorePrice, string clickType, string productUrl, string op,
                             DealFinderContext dealFinderContext)
        {
            DfClickBusinessMessage click = new DfClickBusinessMessage("df", "df_click", DateTime.Now);

            click.ClickType     = clickType;
            click.CampaignID    = dealFinderContext.CampaignId.ToString();
            click.SubCampaignID = dealFinderContext.Country;
            click.DomainName    = dealFinderContext.DomainName;
            click.PageID        = pageId;
            click.Query         = op;
            click.RequestIP     = dealFinderContext.Ip;
            click.MachineIP     = dealFinderContext.HostName;
            click.UserAgent     = dealFinderContext.UserAgent;
            click.URL           = productUrl;
            click.Application   = "DealFinder";
            click.IMPID         = dealFinderContext.ImpressionId;
            click.ShownOffers   = shownStores;
            click.ShownProducts = shownProducts;
            click.ProdPrice     = prodPrice;
            click.API           = storeApi;
            click.MID           = storeMid;
            click.PID           = storePid;
            click.StorePos      = storePos;
            click.StorePrice    = storePrice;
            click.Rendered      = "0";
            click.GUID          = dealFinderContext.UserId;
            click.Currency      = dealFinderContext.Category;
            click.SKU           = prodSku;
            click.MinPrice      = minStorePrice;
            click.MaxPrice      = maxStorePrice;

            BusinessMessageWriter writer = new BusinessMessageWriter();

            //writer.WriteMessageToQueue(click);
        }
コード例 #14
0
        private bool CheckIfCurrentDomainHasMatchForCurrentUrl(DealFinderContext context, List <string> domainTriggers)
        {
            foreach (dynamic trigger in domainTriggers)
            {
                Match match = Match.Empty;

                try
                {
                    match = Regex.Match(context.Url, trigger);
                }
                catch (Exception ex)
                {
                    context.AddDebug("Bad Trigger !", trigger);
                }

                if (match.Success)
                {
                    context.CurrentTrigger = trigger;
                    return(true);
                }
            }

            return(false);
        }
コード例 #15
0
 public FilterProvider(DealFinderContext context)
 {
     _context = context;
 }
コード例 #16
0
        private dynamic GetResult(DealFinderContext context, CsePcmInfo pcmInfo, List <CseProductInfo> products)
        {
            dynamic result = new ExpandoObject();

            result.html_template   = new MarketTemplateProvider().GetTemplate();
            result.keyword         = pcmInfo.ProductDisplayName;
            result.encoded_keyword = pcmInfo.ProductName;
            result.height          = "90px";
            result.more_deals_url  = GetMoreDealsUrl(context, pcmInfo.ProductName);
            result.sku             = context.CachedValue;
            result.product_id      = pcmInfo.ObjectId.ToString();
            result.rt_pointer      = null;
            result.rt_stack        = null;
            result.rt_show_count   = null;
            result.rt_last_shown   = null;
            result.price           = pcmInfo.Price;
            result.debug           = context.Debug;
            result.timers          = context.Timers;
            result.user_id         = context.NewUserId;
            result.impression_id   = context.NewImpressionId;

            var resultProductList = new List <dynamic>();

            foreach (var product in products)
            {
                foreach (var offer in product.Offers)
                {
                    var productUrl = GenerateOuterClickUrl(offer.Url,
                                                           context.PageType, 3, 3, 0, offer.Price.ToString(), offer.Price.ToString(),
                                                           context.CachedValue, offer.Price.ToString(), offer.Price.ToString(),
                                                           context, product.ShoppingEngine.ToString(), true);

                    dynamic productResult = new ExpandoObject();

                    productResult.category          = product.CategoryId;
                    productResult.product_id        = product.ProductId;
                    productResult.product_name      = product.Name.Length > 35 ? product.Name.Remove(35, product.Name.Length - 35) + "..." : product.Name;
                    productResult.product_image     = product.Image;
                    productResult.product_url       = productUrl;
                    productResult.product_price_raw = offer.Price;
                    productResult.product_price     = string.Format("{0:0.00}", offer.Price);
                    productResult.merchant_image    = offer.MerchantInfo.UseLogo ? offer.MerchantInfo.Logo : "";
                    productResult.merchant_name     = offer.MerchantInfo.Name;
                    productResult.merchant_id       = offer.MerchantInfo.MerchantId;
                    productResult.country           = context.Country;
                    productResult.cse = product.ShoppingEngine;

                    resultProductList.Add(productResult);
                }
            }

            context.TotalNumberOfOffersToDisplay = resultProductList.Count;

            var sortProvider = new SortProvider(context);

            if (context.PageType == "search")
            {
                resultProductList = sortProvider.RandomizeProducts(resultProductList, 3);
            }

            resultProductList = sortProvider.SortProducts(resultProductList);

            result.products = resultProductList.Take(3).ToList();
            result.width    = CalculateWidth(result.products);

            if (context.Status == 0 || context.Status == 1)
            {
                if (result.products.Count == 0)
                {
                    context.Status = 2;
                }

                if (result.products.Count > 0 && result.products.Count < 3)
                {
                    context.Status = 4;
                }
            }

            return(result);
        }
コード例 #17
0
 public RetargetingProvider(DealFinderContext context)
 {
     _context = context;
 }
コード例 #18
0
 public GetSiteDataProvider(DealFinderContext context, bool getDebugParams)
 {
     _context        = context;
     _getDebugParams = getDebugParams;
 }
コード例 #19
0
 public TimerProvider(DealFinderContext context, string operationName)
 {
     _operationName = operationName;
     _cotext        = context;
     _startTime     = DateTime.Now;
 }
コード例 #20
0
ファイル: SortProvider.cs プロジェクト: winbuyer/ActualClick
 public SortProvider(DealFinderContext context)
 {
     _context = context;
 }
コード例 #21
0
        private List <CseProductInfo> RetrieveProducts(DealFinderContext context, out CsePcmInfo pcmInfo)
        {
            var timer   = new TimerProvider(context, "extract-cache-value-and-domain");
            var domains = GetDomainCache(context.DomainName);

            if (domains.Length > 0)
            {
                context.IsDomainInDataBase = true;
            }

            if (context.PageType == "product")
            {
                int priority = 0;

                context.CachedValue         = GetCachedValue(domains, context.Url, context.DomainName, out priority);
                context.CachedValuePriority = priority == 0 ? "" : priority.ToString();
            }

            timer.StopTimer();

            var pcmProvider = new PcmProvider(context);

            pcmInfo = pcmProvider.GetProductFromPcmByCacheValueAndDomain();
            var products = new List <CseProductInfo>();

            if (pcmInfo == null)
            {
                if (context.PageType == "product")
                {
                    timer = new TimerProvider(context, "get-site-data");

                    var getSiteDataProvider = new GetSiteDataProvider(context, true);
                    var siteData            = getSiteDataProvider.GetSiteData();

                    timer.StopTimer();

                    context.IsGetSiteDataExecuted = true;

                    if (siteData == null)
                    {
                        context.IsGetSiteDataFailed = true;

                        pcmInfo = new CsePcmInfo();

                        return(products);
                    }
                }

                var productsProvider = new ProductsProvider(context);

                products = productsProvider.GetProductsFromCse(1);

                timer   = new TimerProvider(context, "insert-product-to-pcm");
                pcmInfo = pcmProvider.UpsertProductToPcm(products);
                timer.StopTimer();
            }
            else
            {
                context.IsExistInPcm   = true;
                context.Status         = 1;
                context.ProductName    = pcmInfo.ProductName;
                context.Price          = pcmInfo.Price;
                context.IsDefaultPrice = pcmInfo.IsDefaultPrice;

                timer = new TimerProvider(context, "get-data-from-pcm");

                var productsProvider = new ProductsProvider(context);
                products = productsProvider.GetProductsFromPcm(pcmInfo);

                timer.StopTimer();
            }

            context.ProductName     = pcmInfo.ProductDisplayName;
            context.Price           = pcmInfo.Price;
            context.DomainPriceRule = pcmInfo.DomainPriceRule;

            return(products);
        }
コード例 #22
0
ファイル: PcmProvider.cs プロジェクト: winbuyer/ActualClick
 public PcmProvider(DealFinderContext context)
 {
     _context         = context;
     _pcmDataProvider = new PcmToMongoEtlProvider();
 }
コード例 #23
0
 public ProductsProvider(DealFinderContext context)
 {
     _context = context;
     _keyword = HttpUtility.UrlDecode(context.ProductName);
 }