Esempio n. 1
0
 // Get By Rarity
 public List<BaseCard> GetCardsByRarity(BaseCard.Rarity key, List<PokemonCard> searchList)
 {
     List<BaseCard> resultList = new List<BaseCard>();
     foreach (BaseCard card in searchList)
     {
         if (card.CardRarity == key)
         {
             resultList.Add(card);
         }
     }
     return resultList;
 }
Esempio n. 2
0
        /// <summary>
        /// Search function for the cards.
        /// Returns a list of cards based on a user input search term.
        /// Searches based on pokemon name.
        /// </summary>
        /// <param name="pokemonName"></param>
        /// <returns></returns>        
        public async Task getListOfPokemonByName(string pokemonName, string cardSet, string number, 
                                                BaseCard.Rarity rarity, EnergyCard.EnergyType energyType)
        {
            HtmlDocument doc;

            List<string> urlSearchList = new List<string>();

            // This function should return all the URLs gathered by the search            
            string cardSetSearch = "";
            string cardRaritySearch = "";
            string energySearch = "";

            if (rarity != BaseCard.Rarity.None)
            {
                cardRaritySearch = rarityDictionary[rarity];
            }
            if (energyType != EnergyCard.EnergyType.None)
            {
                energySearch = energyDictionary[energyType];
            }
            if (cardSet != "All")
            {
                cardSetSearch = cardSetSearchDictionary[cardSet];
            }
            else if (cardSet == "All" || number.Contains("/"))
            {
                cardSetSearch = "";

                if (number.Contains("/"))
                {
                    cardSetSearch = "";
                    string[] splitString = number.Split('/');
                    if (cardSetNumberDictionary.ContainsKey(splitString[1]))
                    {
                        string[] cardSets = cardSetNumberDictionary[splitString[1]];

                        if (cardSets.Length > 0)
                        {
                            foreach (string setNumber in cardSets)
                            {
                                cardSetSearch += setNumber;
                            }
                            number = splitString[0];
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid Set Number Provided");
                        return;
                    }
                }
            }
            else
            {
                cardSetSearch = cardSetSearchDictionary[cardSet];
            }

            string queryString = "?" + NAME_SEARCH + pokemonName + SEARCH_ALL_POKEMON_URL + cardSetSearch + cardRaritySearch + energySearch;

            doc = web.Load(POKEMON_CARD_URL + BASE_SEARCH_URL + queryString);

            // Check if the user input returns any results on the website
            if (doc.DocumentNode.SelectSingleNode(XPATH_NO_RESULT_FOUND) != null)
            {
                // Search turned up no results
                return;
            }
            HtmlNode resultNode = doc.DocumentNode.SelectSingleNode("//*[@id='cardResults']");
            string numberOfPages = doc.DocumentNode.SelectSingleNode("//*[@id='cards-load-more']/div/span").InnerText;
            string[] stringSplit = numberOfPages.Split();
            int pagesToSearch = Int32.Parse(stringSplit[stringSplit.Length - 1]);

            if (pagesToSearch > 50)
            {                
                return;
            }

            for (int i = 1; i <= pagesToSearch; ++i)
            {
                string url = POKEMON_CARD_URL + BASE_SEARCH_URL + i.ToString() + queryString;
                urlSearchList.Add(url);
            }

            await DownloadMultipleFilesAsync(urlSearchList);
            return;
        }
Esempio n. 3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pokemonName"></param>
        /// <returns></returns>
        public async Task<List<Tuple<string, string>>> SearchWebsite(string pokemonName, string set, string number, 
                                                                     BaseCard.Rarity rarity, EnergyCard.EnergyType energyType)
        {
            List<BaseCard> allResults = new List<BaseCard>();

            //Console.WriteLine("Awaiting pokemon card results at " + DateTime.Now);
            await getListOfPokemonByName(pokemonName, set, number, rarity, energyType);
            //Console.WriteLine("Pokemon card results received at " + DateTime.Now);

            List<Tuple<string, string>> resultList = new List<Tuple<string, string>>();

            //Console.WriteLine("Downloading images at " + DateTime.Now);
            foreach (Tuple<string, string, string> result in results)
            {
                cardUrl = POKEMON_CARD_URL + result.Item1;
                string url = result.Item2;
                string filePath = "";
                string folderName = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath);
                Directory.CreateDirectory(folderName + "\\CardImages");
                string[] cardNumberSplit = url.Split('_');
                string cardNumber = cardNumberSplit[cardNumberSplit.Length - 1].Split('/', '.')[0];
                number = number.Split('/')[0];

                if (number != "" && cardNumber != number)
                {
                    // Card number did not match user input
                    // Continue with the next card
                    continue;
                }                

                string cardName = result.Item3;
                url = "http:" + url;
                try
                {
                    if (!File.Exists(folderName + "\\CardImages\\" + cardNumber + cardName + ".png"))
                    {
                        using (var client = new WebClient())
                        {                                              
                            client.DownloadFile(new Uri(url), folderName + "\\CardImages\\" + cardNumber + cardName + ".png");
                        }
                    }

                    filePath = folderName + "\\CardImages\\" + cardNumber + cardName + ".png";

                    resultList.Add(new Tuple<string, string>(cardUrl, filePath));
                }
                catch(WebException ex)
                {
                    Console.WriteLine(ex.InnerException);
                }              
                catch(Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                }          
            }
            Console.WriteLine("Images downloaded at " + DateTime.Now);
            return resultList;
        }
Esempio n. 4
0
        public List<string> getListOfPokemon(string name, string text, string evolvesFrom, string cardType, 
            BaseCard.Rarity rarity, string cardSet, int hp, int retreat, EnergyCard.EnergyType weakness,
            EnergyCard.EnergyType resistance, string illustrator)
        {
            List<string> results = new List<string>();

            string cardSetUrl = cardSetSearchDictionary[cardSet];

            string queryString = BASE_SEARCH_URL + name + SEARCH_ALL_POKEMON_URL + cardSetUrl;

            HtmlDocument doc = web.Load(Uri.EscapeUriString(POKEMON_CARD_URL + queryString));

            // Check if the user input returns any results on the website
            if (doc.DocumentNode.SelectSingleNode(XPATH_NO_RESULT_FOUND) != null)
            {
                // Search turned up no results
                return null;
            }
            HtmlNode resultNode = doc.DocumentNode.SelectSingleNode("//*[@id='cardResults']");
            string numberOfPages = doc.DocumentNode.SelectSingleNode("//*[@id='cards-load-more']/div/span").InnerText;
            string[] stringSplit = numberOfPages.Split();
            int pagesToSearch = Int32.Parse(stringSplit[stringSplit.Length - 1]);

            if (pagesToSearch > 50)
            {
                Console.WriteLine("Please enter more search criteria");
                return null;
            }
            for (int i = 1; i <= pagesToSearch; ++i)
            {
                HtmlNodeCollection resultNodes = resultNode.SelectNodes(".//li/a");
                foreach (HtmlNode searchNode in resultNodes)
                {
                    results.Add(searchNode.Attributes["href"].Value);
                }
                if (i != pagesToSearch)
                {
                    string url = doc.DocumentNode.SelectSingleNode("//*[@id='cards-load-more']/div/a[2]").Attributes["href"].Value;
                    doc = web.Load(Uri.EscapeUriString(POKEMON_CARD_URL + url));
                    resultNode = doc.DocumentNode.SelectSingleNode("//*[@id='cardResults']");
                }
            }
            return results;
        }