// 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; }
/// <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; }
/// <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; }
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; }