示例#1
0
        public async Task <PartOutResult> GetPartOutValueFromPageAsync(string itemNo, Condition condition = Condition.New,
                                                                       bool includeInstructions           = true, bool breakMinifigs   = false, bool includeBox          = false,
                                                                       bool includeExtraParts             = false, bool breakSetsInSet = false, PartOutItemType itemType = PartOutItemType.Set,
                                                                       string?currencyCode = null)
        {
            var split         = itemNo.Split('-');
            var rawItemNumber = split[0];

            var sequenceNumber = 1;

            if (split.Length > 1)
            {
                if (!int.TryParse(split[1], out int temp))
                {
                    throw new ArgumentException($"{itemNo} '{itemNo}' has an invalid sequence number. The section after the '-' must be numeric.",
                                                nameof(itemNo));
                }

                sequenceNumber = temp;
            }

            var url = "https://www.bricklink.com/catalogPOV.asp?" +
                      $"itemType={itemType.GetStringValueOrDefault()}&itemNo={rawItemNumber}&itemSeq={sequenceNumber}&itemQty=1&" +
                      $"breakType={(breakMinifigs ? "P" : "M")}&itemCondition={condition.GetStringValueOrDefault()}" +
                      $"&incInstr={(includeInstructions ? "Y" : "N")}&incBox={(includeBox ? "Y" : "N")}&" +
                      $"incParts={(includeExtraParts ? "Y" : "N")}&breakSets={(breakSetsInSet ? "Y" : "N")}";

            var response = await _httpClient.GetAsync(url);

            var htmlResponse = await response.Content.ReadAsStringAsync();

            var result = PartOutResponseParser.ParseResponse(htmlResponse, url);

            result.ItemNumber = $"{rawItemNumber}-{sequenceNumber}";
            result.Condition  = condition;

            if (currencyCode != null)
            {
                var exchangeRate = await _currencyRatesService.GetExchangeRateAsync("USD", currencyCode);

                result.Average6MonthsSalesValueMyCurrency = Math.Round(result.Average6MonthsSalesValueUsd * exchangeRate, 3);
                result.CurrentSalesValueMyCurreny         = Math.Round(result.CurrentSalesValueUsd * exchangeRate, 3);
            }

            return(result);
        }
示例#2
0
        private async Task GetPartOutValueFromPageAsync_ItemExists(string itemNumber, PartOutItemType itemType)
        {
            using var client = BricklinkClientFactory.Build();

            var result = await client.GetPartOutValueFromPageAsync(itemNumber, itemType : itemType);

            Assert.True(result.Average6MonthsSalesValueUsd > 0.0M);
            Assert.True(result.CurrentSalesValueUsd > 0.0M);
            Assert.True(result.IncludedItemsCount > 0);
            Assert.True(result.IncludedLotsCount > 0);
        }