From e675962c35786661c386c917db3ec27aae8f3f1c Mon Sep 17 00:00:00 2001 From: Harrison Deng Date: Tue, 11 May 2021 01:52:57 -0500 Subject: [PATCH] Added Banggood shop. --- src/BanggoodShop/BanggoodShop.csproj | 16 +++ src/BanggoodShop/Shop.cs | 59 +++++++++++ src/BanggoodShop/ShopEnumerator.cs | 98 ++++++++++++++++++ src/MultiShop/DataStructures/SearchProfile.cs | 6 +- src/MultiShop/Pages/Search.razor | 4 +- src/MultiShop/Shared/MainLayout.razor | 26 ++++- .../wwwroot/modules/BanggoodShop.dll | Bin 0 -> 12288 bytes .../wwwroot/modules/HtmlAgilityPack.dll | Bin 0 -> 161792 bytes .../wwwroot/modules/modules_content.json | 4 +- test/AliExpressShop.Tests/ShopTest.cs | 7 +- test/AliExpressShop.Tests/XUnitLogger.cs | 2 +- .../BanggoodShop.Tests.csproj | 27 +++++ test/BanggoodShop.Tests/ShopTest.cs | 36 +++++++ test/BanggoodShop.Tests/XUnitLogger.cs | 33 ++++++ 14 files changed, 302 insertions(+), 16 deletions(-) create mode 100644 src/BanggoodShop/BanggoodShop.csproj create mode 100644 src/BanggoodShop/Shop.cs create mode 100644 src/BanggoodShop/ShopEnumerator.cs create mode 100644 src/MultiShop/wwwroot/modules/BanggoodShop.dll create mode 100644 src/MultiShop/wwwroot/modules/HtmlAgilityPack.dll create mode 100644 test/BanggoodShop.Tests/BanggoodShop.Tests.csproj create mode 100644 test/BanggoodShop.Tests/ShopTest.cs create mode 100644 test/BanggoodShop.Tests/XUnitLogger.cs diff --git a/src/BanggoodShop/BanggoodShop.csproj b/src/BanggoodShop/BanggoodShop.csproj new file mode 100644 index 0000000..38c6a2a --- /dev/null +++ b/src/BanggoodShop/BanggoodShop.csproj @@ -0,0 +1,16 @@ + + + + + + + + + + + + + net5.0 + + + diff --git a/src/BanggoodShop/Shop.cs b/src/BanggoodShop/Shop.cs new file mode 100644 index 0000000..3f82e85 --- /dev/null +++ b/src/BanggoodShop/Shop.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Runtime.CompilerServices; +using System.Threading; +using MultiShop.ShopFramework; + +namespace BanggoodShop +{ + public class Shop : IShop + { + public bool UseProxy { get; set; } = true; + private bool disposedValue; + + public string ShopName => "Banggood"; + + public string ShopDescription => "A online retailer based in China."; + + public string ShopModuleAuthor => "Reslate"; + + private HttpClient http; + private string query; + private Currency currency; + + public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) + { + return new ShopEnumerator(query, currency, http, UseProxy, cancellationToken); + } + + public void Initialize() + { + this.http = new HttpClient(); + } + + public void SetupSession(string query, Currency currency) + { + this.query = query; + this.currency = currency; + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + http.Dispose(); + } + disposedValue = true; + } + } + + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/BanggoodShop/ShopEnumerator.cs b/src/BanggoodShop/ShopEnumerator.cs new file mode 100644 index 0000000..3e53fc5 --- /dev/null +++ b/src/BanggoodShop/ShopEnumerator.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Xml; +using HtmlAgilityPack; +using MultiShop.ShopFramework; +using SimpleLogger; + +namespace BanggoodShop +{ + class ShopEnumerator : IAsyncEnumerator + { + const string PROXY_FORMAT = "https://cors.bridged.cc/{0}"; + private const string QUERY_FORMAT = "https://www.banggood.com/search/{0}/0-0-0-1-1-60-0-price-0-0_p-{1}.html?DCC=CA¤cy={2}"; + HttpClient http; + private string query; + private Currency currency; + private bool useProxy; + private CancellationToken cancellationToken; + + private IEnumerator pageListings; + private int currentPage; + private DateTime lastScrape; + + public ProductListing Current { get; private set; } + + public ShopEnumerator(string query, Currency currency, HttpClient http, bool useProxy, CancellationToken cancellationToken) + { + query = query.Replace(' ', '-'); + this.query = query; + this.currency = currency; + this.http = http; + this.useProxy = useProxy; + this.cancellationToken = cancellationToken; + } + + private async Task> ScrapePage(int page) + { + string requestUrl = string.Format(QUERY_FORMAT, query, page, currency.ToString()); + if (useProxy) requestUrl = string.Format(PROXY_FORMAT, requestUrl); + TimeSpan difference = DateTime.Now - lastScrape; + if (difference.TotalMilliseconds < 200) { + await Task.Delay((int)Math.Ceiling(200 - difference.TotalMilliseconds)); + } + HttpResponseMessage response = await http.GetAsync(requestUrl); + lastScrape = DateTime.Now; + HtmlDocument html = new HtmlDocument(); + html.Load(await response.Content.ReadAsStreamAsync()); + HtmlNodeCollection collection = html.DocumentNode.SelectNodes(@"//div[@class='product-list']/ul[@class='goodlist cf']/li"); + if (collection == null) return null; + List results = new List(); + foreach (HtmlNode node in collection) + { + ProductListing listing = new ProductListing(); + HtmlNode productNode = node.SelectSingleNode(@"div/a[1]"); + listing.Name = productNode.InnerText; + Logger.Log($"Found name: {listing.Name}", LogLevel.Debug); + listing.URL = productNode.GetAttributeValue("href", null); + Logger.Log($"Found URL: {listing.URL}", LogLevel.Debug); + listing.ImageURL = node.SelectSingleNode(@"div/span[@class='img notranslate']/a/img").GetAttributeValue("data-src", null); + Logger.Log($"Found image URL: {listing.ImageURL}", LogLevel.Debug); + listing.LowerPrice = float.Parse(Regex.Match(node.SelectSingleNode(@"div/span[@class='price-box']/span").InnerText, @"(\d*\.\d*)").Groups[1].Value); + Logger.Log($"Found price: {listing.LowerPrice}", LogLevel.Debug); + listing.UpperPrice = listing.LowerPrice; + listing.ReviewCount = int.Parse(Regex.Match(node.SelectSingleNode(@"div/a[2]").InnerText, @"(\d+) reviews?").Groups[1].Value); + Logger.Log($"Found reviews: {listing.ReviewCount}", LogLevel.Debug); + results.Add(listing); + } + return results; + } + + public ValueTask DisposeAsync() + { + return ValueTask.CompletedTask; + } + + public async ValueTask MoveNextAsync() + { + if (pageListings == null || !pageListings.MoveNext()) + { + currentPage += 1; + pageListings?.Dispose(); + IEnumerable pageEnumerable = await ScrapePage(currentPage); + if (pageEnumerable == null) return false; + pageListings = pageEnumerable.GetEnumerator(); + pageListings.MoveNext(); + } + Current = pageListings.Current; + return true; + } + } +} \ No newline at end of file diff --git a/src/MultiShop/DataStructures/SearchProfile.cs b/src/MultiShop/DataStructures/SearchProfile.cs index c5130b6..e0d2ed4 100644 --- a/src/MultiShop/DataStructures/SearchProfile.cs +++ b/src/MultiShop/DataStructures/SearchProfile.cs @@ -70,7 +70,7 @@ namespace MultiShop.DataStructures set { - if (value == false && !CanDisableShop()) return; + if (value == false && !(shopsEnabled.Count > 1)) return; if (value) { shopsEnabled.Add(name); @@ -81,8 +81,8 @@ namespace MultiShop.DataStructures } } } - public bool CanDisableShop() { - return shopsEnabled.Count > 1; + public bool IsToggleable(string shop) { + return (shopsEnabled.Contains(shop) && shopsEnabled.Count > 1) || !shopsEnabled.Contains(shop); } } } diff --git a/src/MultiShop/Pages/Search.razor b/src/MultiShop/Pages/Search.razor index a504b34..9867f74 100644 --- a/src/MultiShop/Pages/Search.razor +++ b/src/MultiShop/Pages/Search.razor @@ -109,7 +109,7 @@ @foreach (string shop in Shops.Keys) {
- +
} @@ -330,7 +330,7 @@ if (listing.Shipping == null && !activeProfile.keepUnknownShipping || (activeProfile.enableMaxShippingFee && listing.Shipping > activeProfile.MaxShippingFee)) continue; float shippingDifference = listing.Shipping != null ? listing.Shipping.Value : 0; if (!(listing.LowerPrice + shippingDifference >= activeProfile.lowerPrice && (!activeProfile.enableUpperPrice || listing.UpperPrice + shippingDifference <= activeProfile.UpperPrice))) continue; - if ((listing.Rating == null && !activeProfile.keepUnrated) || activeProfile.minRating > (listing.Rating == null ? 0 : listing.Rating)) continue; + if ((listing.Rating == null && !activeProfile.keepUnrated) && activeProfile.minRating > (listing.Rating == null ? 0 : listing.Rating)) continue; if ((listing.PurchaseCount == null && !activeProfile.keepUnknownPurchaseCount) || activeProfile.minPurchases > (listing.PurchaseCount == null ? 0 : listing.PurchaseCount)) continue; if ((listing.ReviewCount == null && !activeProfile.keepUnknownRatingCount) || activeProfile.minReviews > (listing.ReviewCount == null ? 0 : listing.ReviewCount)) continue; diff --git a/src/MultiShop/Shared/MainLayout.razor b/src/MultiShop/Shared/MainLayout.razor index d91bb71..c20b2fd 100644 --- a/src/MultiShop/Shared/MainLayout.razor +++ b/src/MultiShop/Shared/MainLayout.razor @@ -25,6 +25,7 @@ private bool modulesLoaded = false; private Dictionary shops = new Dictionary(); + private Dictionary unusedDependencies = new Dictionary(); protected override async Task OnInitializedAsync() { @@ -48,7 +49,7 @@ foreach (Task task in assemblyDownloadTasks) { Assembly assembly = AppDomain.CurrentDomain.Load(await task); - + bool assigned = false; foreach (Type type in assembly.GetTypes()) { if (typeof(IShop).IsAssignableFrom(type)) { @@ -58,17 +59,34 @@ shops.Add(shop.ShopName, shop); Logger.Log($"Registered and started lifetime of module for \"{shop.ShopName}\".", LogLevel.Debug); } + assigned = true; } } + if (!assigned) { + unusedDependencies.Add(assembly.FullName, assembly); + Logger.Log($"Assembly \"{assembly.FullName}\" did not contain a shop module. Storing it as potential extension.", LogLevel.Debug); + } } - + foreach (string assembly in unusedDependencies.Keys) + { + Logger.Log($"{assembly} was unused.", LogLevel.Warning); + } + unusedDependencies.Clear(); modulesLoaded = true; } private Assembly OnAssemblyDependencyRequest(object sender, ResolveEventArgs args) { - Logger.Log($"Assembly {args.RequestingAssembly} is requesting dependency assembly {args.Name}. Attempting to retrieve...", LogLevel.Debug); - return AppDomain.CurrentDomain.Load(Http.GetByteArrayAsync(Configuration["ModulesDir"] + args.Name + ".dll").Result); + Logger.Log($"Assembly {args.RequestingAssembly} is requesting dependency assembly {args.Name}.", LogLevel.Debug); + if (unusedDependencies.ContainsKey(args.Name)) + { + Logger.Log("Dependency found.", LogLevel.Debug); + Assembly dependency = unusedDependencies[args.Name]; + unusedDependencies.Remove(args.Name); + return dependency; + } + Logger.Log($"No dependency under name {args.Name}", LogLevel.Debug); + return null; } diff --git a/src/MultiShop/wwwroot/modules/BanggoodShop.dll b/src/MultiShop/wwwroot/modules/BanggoodShop.dll new file mode 100644 index 0000000000000000000000000000000000000000..e6051e5cce0db2b612d40e55e5d74324d558a9ab GIT binary patch literal 12288 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 D#G<;- literal 0 HcmV?d00001 diff --git a/src/MultiShop/wwwroot/modules/HtmlAgilityPack.dll b/src/MultiShop/wwwroot/modules/HtmlAgilityPack.dll new file mode 100644 index 0000000000000000000000000000000000000000..e18de303c1d9f6174205986ea930f01eaa6e4c6d GIT binary patch literal 161792 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 A%K!iX literal 0 HcmV?d00001 diff --git a/src/MultiShop/wwwroot/modules/modules_content.json b/src/MultiShop/wwwroot/modules/modules_content.json index 8c4a535..6c67e7b 100644 --- a/src/MultiShop/wwwroot/modules/modules_content.json +++ b/src/MultiShop/wwwroot/modules/modules_content.json @@ -1,3 +1,5 @@ [ - "AliExpressShop" + "AliExpressShop", + "HtmlAgilityPack", + "BanggoodShop" ] \ No newline at end of file diff --git a/test/AliExpressShop.Tests/ShopTest.cs b/test/AliExpressShop.Tests/ShopTest.cs index f09998f..0214025 100644 --- a/test/AliExpressShop.Tests/ShopTest.cs +++ b/test/AliExpressShop.Tests/ShopTest.cs @@ -1,7 +1,3 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using GameServiceWarden.Core.Tests; using MultiShop.ShopFramework; using SimpleLogger; using Xunit; @@ -34,10 +30,10 @@ namespace AliExpressShop.Tests count += 1; if (count > MAX_RESULTS) return; } + shop.Dispose(); } [Fact] - public async void Search_USD_ResultsFound() { //Given @@ -57,6 +53,7 @@ namespace AliExpressShop.Tests count += 1; if (count > MAX_RESULTS) return; } + shop.Dispose(); } } } diff --git a/test/AliExpressShop.Tests/XUnitLogger.cs b/test/AliExpressShop.Tests/XUnitLogger.cs index 520149c..7fe2715 100644 --- a/test/AliExpressShop.Tests/XUnitLogger.cs +++ b/test/AliExpressShop.Tests/XUnitLogger.cs @@ -2,7 +2,7 @@ using System; using SimpleLogger; using Xunit.Abstractions; -namespace GameServiceWarden.Core.Tests +namespace AliExpressShop { public class XUnitLogger : ILogReceiver { diff --git a/test/BanggoodShop.Tests/BanggoodShop.Tests.csproj b/test/BanggoodShop.Tests/BanggoodShop.Tests.csproj new file mode 100644 index 0000000..a421dbc --- /dev/null +++ b/test/BanggoodShop.Tests/BanggoodShop.Tests.csproj @@ -0,0 +1,27 @@ + + + + net5.0 + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + diff --git a/test/BanggoodShop.Tests/ShopTest.cs b/test/BanggoodShop.Tests/ShopTest.cs new file mode 100644 index 0000000..9fe8f81 --- /dev/null +++ b/test/BanggoodShop.Tests/ShopTest.cs @@ -0,0 +1,36 @@ +using MultiShop.ShopFramework; +using SimpleLogger; +using Xunit; +using Xunit.Abstractions; + +namespace BanggoodShop.Tests +{ + public class ShopTest + { + public ShopTest(ITestOutputHelper output) + { + Logger.AddLogListener(new XUnitLogger(output)); + } + + + [Fact] + public async void Search_CAD_ResultsFound() + { + //Given + const int MAX_RESULTS = 100; + Shop shop = new Shop(); + shop.UseProxy = false; + //When + shop.Initialize(); + shop.SetupSession("samsung galaxy 20 case", Currency.CAD); + //Then + int count = 0; + await foreach (ProductListing listing in shop) + { + count += 1; + Assert.False(string.IsNullOrWhiteSpace(listing.Name)); + if (count >= MAX_RESULTS) return; + } + } + } +} diff --git a/test/BanggoodShop.Tests/XUnitLogger.cs b/test/BanggoodShop.Tests/XUnitLogger.cs new file mode 100644 index 0000000..7e76ffd --- /dev/null +++ b/test/BanggoodShop.Tests/XUnitLogger.cs @@ -0,0 +1,33 @@ +using System; +using SimpleLogger; +using Xunit.Abstractions; + +namespace BanggoodShop +{ + public class XUnitLogger : ILogReceiver + { + public LogLevel Level => LogLevel.Debug; + + public string Identifier => GetType().Name; + + private ITestOutputHelper outputHelper; + + public XUnitLogger(ITestOutputHelper output) + { + this.outputHelper = output; + } + + public void Flush() + { + } + + public void LogMessage(string message, DateTime time, LogLevel level) + { + try + { + outputHelper.WriteLine($"[{time.ToShortTimeString()}][{level.ToString()}]: {message}"); + } + catch (InvalidOperationException) { }; + } + } +} \ No newline at end of file