public int compareTo(BackpackListing comparedListing) { if (priceRefinedMetal > comparedListing.priceRefinedMetal) { return(-1); } else if (priceRefinedMetal < comparedListing.priceRefinedMetal) { return(1); } return(0); }
BackpackListingArrays getListings(string hatName) { BackpackListingArrays finalListings; List <BackpackListing> currentBuyListings = new List <BackpackListing>(); List <BackpackListing> currentSellListings = new List <BackpackListing>(); int totalCycles = -1; int currentCycle = 0; string urlStart = "https://backpack.tf/api/classifieds/search/v1?"; string Key = "key=" + backpackAPIKey; string Quality = "&quality=5"; string pageSize = "&page_size=30"; string Slot = "&slot=misc"; string Folding = "&fold=0"; //No impact on results //string Intent = (buyOrder) ? "&intent=sell" : "&intent=buy"; string Item = "&item=" + hatName; string Page; long previousTime; while (totalCycles >= currentCycle || totalCycles == -1) { Page = "&page=" + currentCycle; string buildURL = urlStart + Key + Quality + Item + pageSize + Slot + Page + Folding; string HTML = downloadWebPage(buildURL); previousTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();; if (int.Parse(HTML.Split(new[] { "\"total\":" }, StringSplitOptions.None)[1].Split(',')[0]) == 0) { //Don't return anything! throw new Exception("No listings found!"); } string[] splitBuyListings = HTML.Split(new[] { "\"sell\":" }, StringSplitOptions.None)[0].Split(new[] { "\"item\":" }, StringSplitOptions.None); string[] splitSellListings = HTML.Split(new[] { "\"sell\":" }, StringSplitOptions.None)[1].Split(new[] { "\"item\":" }, StringSplitOptions.None); if (totalCycles == -1) { //30.0: Page limit; 0.5: Round-up properly. totalCycles = (int)Math.Round((int.Parse(HTML.Split(new[] { "\"total\":" }, StringSplitOptions.None)[1].Split(',')[0]) / 30.0) + 0.5); } for (int i = 1; i < splitBuyListings.Length; i++) { string currentCurrency = splitBuyListings[i].Split(new[] { "\"currencies\":" }, StringSplitOptions.None)[1]; double currentMetal = 0; double currentKeys = 0; if (currentCurrency.Contains("keys")) { currentKeys = Double.Parse(currentCurrency.Split('}')[0].Split(new[] { "\"keys\":" }, StringSplitOptions.None)[1]); if (currentCurrency.Contains("metal")) { currentMetal = Double.Parse(currentCurrency.Split(',')[0].Split(new[] { "\"metal\":" }, StringSplitOptions.None)[1]); } } else { currentMetal = Double.Parse(currentCurrency.Split('}')[0].Split(new[] { "\"metal\":" }, StringSplitOptions.None)[1]); } string effectName = splitBuyListings[i].Split(new[] { "\"name\":\"" }, StringSplitOptions.None)[1].Split(new[] { hatName.Replace("%20", " ") }, StringSplitOptions.None)[0].Replace(" ", ""); if (effectName.Equals("Unusual")) { effectName = "Any"; currentCycle = totalCycles; } BackpackListing currentListing = new BackpackListing(currentKeys * refinedPerKey + currentMetal, effectName); currentBuyListings.Add(currentListing); } for (int i = 1; i < splitSellListings.Length; i++) { string currentCurrency = splitSellListings[i].Split(new[] { "\"currencies\":" }, StringSplitOptions.None)[1]; double currentMetal = 0; double currentKeys = 0; if (currentCurrency.Contains("keys")) { currentKeys = Double.Parse(currentCurrency.Split('}')[0].Split(new[] { "\"keys\":" }, StringSplitOptions.None)[1]); if (currentCurrency.Contains("metal")) { currentMetal = Double.Parse(currentCurrency.Split(',')[0].Split(new[] { "\"metal\":" }, StringSplitOptions.None)[1]); } } else { currentMetal = Double.Parse(currentCurrency.Split('}')[0].Split(new[] { "\"metal\":" }, StringSplitOptions.None)[1]); } string effectName = splitSellListings[i].Split(new[] { "\"name\":\"" }, StringSplitOptions.None)[1].Split(new[] { hatName.Replace("%20", " ") }, StringSplitOptions.None)[0].Replace(" ", ""); if (effectName.Equals("Unusual")) { effectName = "Any"; currentCycle = totalCycles; } BackpackListing currentListing = new BackpackListing(currentKeys * refinedPerKey + currentMetal, effectName); currentSellListings.Add(currentListing); } currentCycle++; } int Index = 0; BackpackListing[] buyOrders = new BackpackListing[currentBuyListings.Count], sellOrders = new BackpackListing[currentSellListings.Count]; foreach (BackpackListing Listing in currentBuyListings) { buyOrders[Index] = Listing; Index++; } Index = 0; foreach (BackpackListing Listing in currentSellListings) { sellOrders[Index] = Listing; Index++; } finalListings = new BackpackListingArrays(buyOrders, sellOrders); return(finalListings); }