public CallWalmartProcessing(ILogService log, ITime time, ICacheService cacheService, IDbFactory dbFactory, IEmailService emailService, IItemHistoryService itemHistoryService, WalmartApi walmartApi, CompanyDTO company) { _log = log; _time = time; _dbFactory = dbFactory; _cacheService = cacheService; _walmartApi = walmartApi; _company = company; _emailService = emailService; _itemHistoryService = itemHistoryService; _actionService = new SystemActionService(_log, _time); _htmlScraper = new HtmlScraperService(log, time, dbFactory); _barcodeService = new BarcodeService(log, time, dbFactory); _openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx"); _autoCreateListingService = new AutoCreateWalmartListingService(log, time, dbFactory, _cacheService, _barcodeService, _emailService, _openApi, itemHistoryService, AppSettings.IsDebug); }
public void SearchByBarcode(string barcode) { var openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx"); var products = openApi.SearchProductsByBarcode(barcode, WalmartUtils.ApparelCategoryId); _log.Info(products.ToString()); }
public virtual ActionResult GetBarcode(string barcode) { LogI("GetBarcode, barcode=" + barcode); ItemBarcodeViewModel model = new ItemBarcodeViewModel(); string message = null; bool isSuccess = false; if (string.IsNullOrEmpty(barcode)) { return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, "barcode is empty", model))); } if (barcode.Length != 12 && barcode.Length != 13) { return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, "incorect barcode format", model))); } try { var marketplaceManager = new MarketplaceKeeper(DbFactory, false); marketplaceManager.Init(); IMarketApi api = new MarketFactory(marketplaceManager.GetAll(), Time, LogService, DbFactory, null) .GetApi((AccessManager.Company ?? AccessManager.DefaultCompany).Id, MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId); model.Items.AddRange(ItemBarcodeViewModel.GetUrlItemsByBarcodeFromAmazonApi(api, barcode) .Select(x => new ItemBarcodeListingViewModel() { Marketplace = "Amazon", Url = x })); var openApi = new WalmartOpenApi(LogService, "trn9fdghvb8p9gjj9j6bvjwx"); model.Items.AddRange(ItemBarcodeViewModel.GetUrlItemsByBarcodeFromWalmartApi(openApi, new ItemBarcodeSearchFilter { Keywords = barcode, CategoryId = "", MinPrice = null, MaxPrice = null, StartIndex = 1, LimitCount = 10, }).Select(x => new ItemBarcodeListingViewModel() { Marketplace = "Walmart", Url = x })); isSuccess = true; } catch (Exception ex) { LogE("GetRank", ex); message = ex.Message; isSuccess = false; } return(JsonGet(new ValueResult <ItemBarcodeViewModel>(isSuccess, message, model))); }
public static List <string> GetUrlItemsByBarcodeFromWalmartApi(WalmartOpenApi api, ItemBarcodeSearchFilter filter) { var searchResult = api.SearchProducts(filter.Keywords, filter.CategoryId, filter.MinPrice, filter.MaxPrice, filter.StartIndex, filter.LimitCount); if (searchResult != null && searchResult.IsSuccess && searchResult.Data.Count > 0) { return(searchResult.Data.Select(x => "https://www.walmart.com/ip/item/" + x.ItemId).ToList()); } return(new List <string>() { "---" }); }
public static IList <MarketBarcodeViewModel> SearchBarcodes(ILogService log, string productUrl) { var itemId = (productUrl ?? "").Split("/".ToCharArray()).LastOrDefault(); var items = new List <MarketBarcodeViewModel>(); if (!String.IsNullOrEmpty(itemId)) { var walmartService = new WalmartOpenApi(log, "trn9fdghvb8p9gjj9j6bvjwx"); var productResult = walmartService.LookupProductWithVariations(itemId); if (productResult.IsSuccess) { items = productResult.Data.Select(p => new MarketBarcodeViewModel() { ItemId = p.SourceMarketId, Barcode = p.Barcode, Size = p.Size, Color = p.Color, }).ToList(); } } return(items); }
public BargainSearchResult Search(BargainSearchFilter filter, AmazonApi api) { //"id": "5438", //"name": "Apparel", var openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx"); var searchResult = openApi.SearchProducts(filter.Keywords, filter.CategoryId, filter.MinPrice, filter.MaxPrice, filter.StartIndex, filter.LimitCount); var results = new List <BargainItem>(); if (searchResult.IsSuccess) { var walmartItems = searchResult.Data.Where(i => //i.AvailableOnline && !String.IsNullOrEmpty(i.UPC)).ToList(); var index = 0; var step = 5; while (index < walmartItems.Count) { var stepWalmartItems = walmartItems.Skip(index).Take(step).ToList(); var amazonItems = api.GetProductForBarcode(stepWalmartItems.Select(i => i.UPC).ToList()); var newItems = new List <BargainItem>(); foreach (var walmartItem in stepWalmartItems) { var amazonItem = amazonItems.FirstOrDefault(i => i.Barcode == walmartItem.UPC); newItems.Add(new BargainItem() { Barcode = walmartItem.UPC, Name = walmartItem.Name, WalmartImage = walmartItem.ThumbnailImage, AmazonItem = amazonItem, AmazonPrice = amazonItem != null ? amazonItem.CurrentPrice : (decimal?)null, AvailableOnAmazon = amazonItem != null ? amazonItem.AmazonRealQuantity > 0 : false, WalmartPrice = walmartItem.SalePrice, AvailableOnWalmart = walmartItem.AvailableOnline, WalmartItem = new ItemDTO() { SourceMarketId = walmartItem.ItemId, CurrentPrice = walmartItem.SalePrice ?? 0, AmazonRealQuantity = walmartItem.Stock == "Available" ? 1 : 0, Size = walmartItem.Size, Color = walmartItem.Color, Name = walmartItem.Name, Barcode = walmartItem.UPC, } }); } var asinList = newItems.Where(i => i.AmazonItem != null && !String.IsNullOrEmpty(i.AmazonItem.ASIN)) .Select(i => i.AmazonItem.ASIN) .ToList(); if (asinList.Any()) { var amazonPrices = api.GetLowestOfferListingsForASIN(asinList).ToList(); foreach (var amazonPrice in amazonPrices) { var item = newItems.FirstOrDefault( i => i.AmazonItem != null && i.AmazonItem.ASIN == amazonPrice.ASIN); if (item != null) { item.AmazonPrice = amazonPrice.LowestPrice; item.AmazonItem.AmazonRealQuantity = 1; //NOTE: has offer => Available } } } results.AddRange(newItems); index += step; } } return(new BargainSearchResult() { Bargains = results, StartIndex = filter.StartIndex, Total = searchResult.Total, }); }
public void FindListingsPositionInSearch() { var results = new List <StylePositionOnWM>(); using (var db = _dbFactory.GetRWDb()) { var openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx"); var wmItems = db.Items.GetAll().Where(i => i.ItemPublishedStatus == (int)PublishedStatuses.Published && i.Market == (int)MarketType.Walmart).ToList(); var styleIdList = wmItems.Where(i => i.StyleId.HasValue).Select(i => i.StyleId.Value).ToList(); //var styleList = db.Styles.GetAll().Where(st => styleIdList.Contains(st.Id)).ToList(); var groupByStyle = from siCache in db.StyleItemCaches.GetAll() group siCache by siCache.StyleId into byStyle select new { StyleId = byStyle.Key, OneHasStrongQty = byStyle.Any(s => s.RemainingQuantity > 20), //NOTE: >20 Qty = byStyle.Sum(s => s.RemainingQuantity) }; var styleList = (from s in db.Styles.GetAll() join sCache in db.StyleCaches.GetAll() on s.Id equals sCache.Id join qty in groupByStyle on s.Id equals qty.StyleId where styleIdList.Contains(s.Id) orderby qty.Qty descending select s) .Take(100) .ToList(); var mainLicenseFeatures = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.MAIN_LICENSE }).ToList(); var subLicenseFeatures = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.SUB_LICENSE1 }).ToList(); var itemStyleFeatures = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(styleIdList, new[] { StyleFeatureHelper.ITEMSTYLE }).ToList(); var resultsCache = new Dictionary <string, IList <OpenItem> >(); foreach (var style in styleList) { var mainLicenseFeature = mainLicenseFeatures.FirstOrDefault(f => f.StyleId == style.Id); var subLicenseFeature = subLicenseFeatures.FirstOrDefault(f => f.StyleId == style.Id); var itemStyleFeature = itemStyleFeatures.FirstOrDefault(f => f.StyleId == style.Id); var brandName = ItemExportHelper.GetBrandName(mainLicenseFeature?.Value, subLicenseFeature?.Value); var manufacture = brandName; if (String.IsNullOrEmpty(manufacture)) { manufacture = style.Manufacturer; } var itemStyle = itemStyleFeature?.Value ?? "Pajamas"; itemStyle = itemStyle.Replace("– 2pc", "").Replace("– 3pc", "").Replace("– 4pc", "").Trim(); var keywords = StringHelper.JoinTwo(" ", manufacture, itemStyle); _log.Info("Searching: " + keywords); IList <OpenItem> foundItems = new List <OpenItem>(); if (resultsCache.ContainsKey(keywords)) { foundItems = resultsCache[keywords]; } else { var searchResult = openApi.SearchProducts(keywords, WalmartUtils.ApparelCategoryId, null, null, 1, 100); if (searchResult.IsSuccess) { foundItems = searchResult.Data; resultsCache.Add(keywords, searchResult.Data); } } int? position = null; string positionItemId = null; string buyBoxWinner = null; var itemsByStyle = wmItems.Where(i => i.StyleId == style.Id).ToList(); var itemIds = itemsByStyle.Where(i => !String.IsNullOrEmpty(i.SourceMarketId)).Select(i => i.SourceMarketId).ToList(); for (int i = 0; i < foundItems.Count; i++) { if (itemIds.Contains(foundItems[i].ItemId) && position == null) { position = i + 1; positionItemId = foundItems[i].ItemId; buyBoxWinner = foundItems[i].SellerInfo; } } _log.Info(style.StyleID + ", position: " + position + ", " + keywords + ", " + buyBoxWinner + ", " + positionItemId); results.Add(new StylePositionOnWM() { StyleId = style.Id, StyleString = style.StyleID, SearchKeywords = keywords, RequestedSearchResults = foundItems.Count, BestPosition = position, BuyBoxWinner = buyBoxWinner, BestPositionUrl = !String.IsNullOrEmpty(positionItemId) ? String.Format("https://www.walmart.com/ip/item/{0}", positionItemId) : "" }); } } var filename = "WMListingPositions_" + DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss") + ".xls"; var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filename); var b = new ExportColumnBuilder <StylePositionOnWM>(); var columns = new List <ExcelColumnInfo>() { b.Build(p => p.StyleString, "Style Id", 25), b.Build(p => p.SearchKeywords, "Search Keywords", 25), b.Build(p => p.RequestedSearchResults, "Requested search results", 35), b.Build(p => p.BestPosition, "Best Position", 15), b.Build(p => p.BuyBoxWinner, "Buy Box Winner", 20), b.Build(p => p.BestPositionUrl, "Best Position Url", 45) }; using (var stream = ExcelHelper.Export(results, columns)) { stream.Seek(0, SeekOrigin.Begin); using (var fileStream = File.Create(filepath)) { stream.CopyTo(fileStream); } } }