Example #1
0
 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);
        }