diff --git a/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs b/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs index bbc2f4b9..fa743720 100644 --- a/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs +++ b/AideDeJeu/AideDeJeu/Models/Monsters/Monster.cs @@ -8,7 +8,6 @@ namespace AideDeJeuLib.Monsters { public class Monster : Item { - public string Power { get; set; } public string Type { get; set; } public string Size { get; set; } public string Alignment { get; set; } @@ -33,198 +32,10 @@ namespace AideDeJeuLib.Monsters public string Languages { get; set; } public string Challenge { get; set; } public string Description { get; set; } - private string _Picture = null; - public string Picture - { - get - { - if(_Picture != null) - { - return "https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/Monsters" + _Picture.Substring(_Picture.LastIndexOf('/')); - } - return null; - } - set - { - _Picture = value; - } - } public IEnumerable SpecialFeatures { get; set; } - [IgnoreDataMember] - public IEnumerable SpecialFeaturesNodes - { - set - { - SpecialFeatures = NodeListToStringList(value); - } - } - public IEnumerable Actions { get; set; } - [IgnoreDataMember] - public IEnumerable ActionsNodes - { - set - { - Actions = NodeListToStringList(value); - } - } - public IEnumerable Reactions { get; set; } - public IEnumerable LegendaryActions { get; set; } - [IgnoreDataMember] - public IEnumerable LegendaryActionsNodes - { - set - { - LegendaryActions = NodeListToStringList(value); - } - } - - - public void ParseHtml() - { - var pack = new XmlDocument(); - pack.LoadXml(this.Html); - var divSpell = pack.DocumentElement.SelectSingleNode("//div[contains(@class,'bloc')]"); - ParseNode(divSpell); - } - - //public static Monster FromHtml(HtmlNode divBloc) - //{ - public void ParseNode(XmlNode divBloc) - { - //monster.Html = divBloc.OuterHtml; - var divMonster = divBloc?.SelectSingleNode("div[contains(@class,'monstre')]"); - this.Name = divMonster?.SelectSingleNode("h1").InnerText; - - var divTrad = divMonster.SelectSingleNode("div[@class='trad']"); - - var linkVO = divTrad.SelectSingleNode("a").Attributes["href"].InnerText; - var matchIdVF = new Regex(@"\?vf=(?.*)").Match(linkVO); - this.IdVF = matchIdVF?.Groups["idvf"]?.Value; - var matchIdVO = new Regex(@"\?vo=(?.*)").Match(linkVO); - this.IdVO = matchIdVO?.Groups["idvo"]?.Value; - - - var altNames = divTrad?.InnerText; - if (altNames != null) - { - var matchNames = new Regex(@"\[ (?.*?) \](?: \[ (?.*?) \])?").Match(altNames); - this.NameVO = matchNames.Groups["vo"].Value; - this.NamePHB = string.IsNullOrEmpty(matchNames.Groups["alt"].Value) ? this.Name : matchNames.Groups["alt"].Value; - } - else - { - this.NamePHB = this.Name; - } - - var divSansSerif = divMonster?.SelectSingleNode("div[contains(@class,'sansSerif')]"); - var typeSizeAlignment = divSansSerif?.SelectSingleNode("h2/em")?.InnerText; - if (typeSizeAlignment != null) - { - var matchesTypeSizeAlignment = new Regex("(?.*) de taille (?.*), (?.*)").Match(typeSizeAlignment); - this.Type = matchesTypeSizeAlignment?.Groups["type"]?.Value?.Trim(); - this.Size = matchesTypeSizeAlignment?.Groups["size"]?.Value?.Trim(); - this.Alignment = matchesTypeSizeAlignment?.Groups["alignment"]?.Value?.Trim(); - - if (string.IsNullOrEmpty(this.Type)) - { - matchesTypeSizeAlignment = new Regex("(?.*) (?.*), (?.*)").Match(typeSizeAlignment); - this.Type = matchesTypeSizeAlignment?.Groups["type"]?.Value?.Trim(); - this.Size = matchesTypeSizeAlignment?.Groups["size"]?.Value?.Trim(); - this.Alignment = matchesTypeSizeAlignment?.Groups["alignment"]?.Value?.Trim(); - } - } - var divRed = divSansSerif?.SelectSingleNode("div[contains(@class,'red')]"); - this.ArmorClass = divRed?.SelectSingleNode("strong[contains(text(),'armure') or contains(text(),'Armor Class')]")?.NextSibling?.InnerText; - this.HitPoints = divRed?.SelectSingleNode("strong[contains(text(),'Points de vie') or contains(text(),'Hit Points')]")?.NextSibling?.InnerText; - this.Speed = divRed?.SelectSingleNode("strong[contains(text(),'Vitesse') or contains(text(),'Speed')]")?.NextSibling?.InnerText; - - this.Strength = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'FOR') or contains(text(),'STR')]")?.NextSibling?.NextSibling?.InnerText; - this.Dexterity = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'DEX')]")?.NextSibling?.NextSibling?.InnerText; - this.Constitution = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'CON')]")?.NextSibling?.NextSibling?.InnerText; - this.Intelligence = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'INT')]")?.NextSibling?.NextSibling?.InnerText; - this.Wisdom = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'SAG') or contains(text(),'WIS')]")?.NextSibling?.NextSibling?.InnerText; - this.Charisma = divRed?.SelectSingleNode("div[contains(@class,'carac')]/strong[contains(text(),'CHA')]")?.NextSibling?.NextSibling?.InnerText; - - - this.SavingThrows = divRed?.SelectSingleNode("strong[contains(text(),'Jets de sauvegarde') or contains(text(),'Saving Throws')]")?.NextSibling?.InnerText; - this.Skills = divRed?.SelectSingleNode("strong[contains(text(),'Compétences') or contains(text(),'Skills')]")?.NextSibling?.InnerText; - - this.DamageVulnerabilities = divRed?.SelectSingleNode("strong[contains(text(),'Vulnérabilités aux dégâts') or contains(text(),'Damage vulnerabilities')]")?.NextSibling?.InnerText; - this.DamageResistances = divRed?.SelectSingleNode("strong[contains(text(),'Résistances aux dégâts') or contains(text(),'Damage Resistances')]")?.NextSibling?.InnerText; - this.DamageImmunities = divRed?.SelectSingleNode("strong[contains(text(),'Immunités aux dégâts') or contains(text(),'Damage Immunities')]")?.NextSibling?.InnerText; - this.ConditionImmunities = divRed?.SelectSingleNode("strong[contains(text(),'Immunités aux conditions') or contains(text(),'Conditions Immunities')]")?.NextSibling?.InnerText; - - this.Senses = divRed?.SelectSingleNode("strong[contains(text(),'Sens') or contains(text(),'Senses')]")?.NextSibling?.InnerText; - this.Languages = divRed?.SelectSingleNode("strong[contains(text(),'Langues') or contains(text(),'Languages')]")?.NextSibling?.InnerText; - this.Challenge = divRed?.SelectSingleNode("strong[contains(text(),'Puissance') or contains(text(),'Challenge')]")?.NextSibling?.InnerText; - - List nodes = new List(); - List specialFeatures = null; - List actions = null; - List legendaryActions = null; - var node = divSansSerif.SelectSingleNode("p"); - while(node != null) - { - if(node.NodeType == XmlNodeType.Element && node.Name == "div") - { - if(node.InnerText == "ACTIONS") - { - specialFeatures = nodes; - nodes = new List(); - } - else if (node.InnerText == "ACTIONS LÉGENDAIRES" || node.InnerText == "LEGENDARY ACTIONS") - { - actions = nodes; - nodes = new List(); - } - } - else - { - nodes.Add(node); - } - node = node.NextSibling; - } - if(actions == null) - { - if(specialFeatures == null) - { - specialFeatures = nodes; - } - else - { - actions = nodes; - } - } - else - { - legendaryActions = nodes; - } - - this.SpecialFeaturesNodes = specialFeatures; - this.ActionsNodes = actions; - //this.ReactionsNodes = actions; - this.LegendaryActionsNodes = legendaryActions; - - var divDescription = divBloc?.SelectSingleNode("div[contains(@class,'description')]"); - this.Description = divDescription?.InnerText; - - var divSource = divBloc?.SelectSingleNode("div[contains(@class,'source')]"); - this.Source = divSource?.InnerText; - - var img = divBloc?.SelectSingleNode("div[contains(@class,'center')]/img[contains(@class,'picture')]"); - this.Picture = img?.Attributes["src"].InnerText; - } - - public static Monster FromHtml(XmlNode node) - { - var monster = new Monster(); - monster.Html = node.OuterXml; - monster.ParseNode(node); - return monster; - } } } diff --git a/AideDeJeu/AideDeJeu/Models/Monsters/MonstersScrappers.cs b/AideDeJeu/AideDeJeu/Models/Monsters/MonstersScrappers.cs deleted file mode 100644 index e853ab35..00000000 --- a/AideDeJeu/AideDeJeu/Models/Monsters/MonstersScrappers.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Xml; - -namespace AideDeJeuLib.Monsters -{ - public class MonstersScrappers : IDisposable - { - private HttpClient _Client = null; - public HttpClient GetHttpClient() - { - if (_Client == null) - { - var client = new HttpClient(); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xhtml+xml")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr-FR")); - _Client = client; - } - return _Client; - } - - #region IDisposable Support - private bool disposedValue = false; // Pour détecter les appels redondants - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // TODO: supprimer l'état managé (objets managés). - if (_Client != null) - { - _Client.Dispose(); - _Client = null; - } - } - - // TODO: libérer les ressources non managées (objets non managés) et remplacer un finaliseur ci-dessous. - // TODO: définir les champs de grande taille avec la valeur Null. - - disposedValue = true; - } - } - - // TODO: remplacer un finaliseur seulement si la fonction Dispose(bool disposing) ci-dessus a du code pour libérer les ressources non managées. - // ~SpellsScrappers() { - // // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus. - // Dispose(false); - // } - - // Ce code est ajouté pour implémenter correctement le modèle supprimable. - public void Dispose() - { - // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus. - Dispose(true); - // TODO: supprimer les marques de commentaire pour la ligne suivante si le finaliseur est remplacé ci-dessus. - // GC.SuppressFinalize(this); - } - #endregion - - - public async Task> GetMonsters(string category = "", string type = "", string minPower = "", string maxPower = "", string size = "", string legendary = "", string source = "srd") - { - string html = null; - var client = GetHttpClient(); - // https://www.aidedd.org/regles/monstres/?min=.25&max=20&c=M&sz=TP&lg=si&t=Humano%C3%AFde&s=srd - - //html = await client.GetStringAsync(string.Format($"https://www.aidedd.org/regles/monstres/?c={category}&t={type}&min={minPower}&max={maxPower}&sz={size}&lg={legendary}&s={source}", category, type, minPower, maxPower, size, legendary, source)); - var url = string.Format($"https://www.aidedd.org/dnd-filters/monstres.php?c={category}&t={type}&min={minPower}&max={maxPower}&sz={size}&lg={legendary}&s={source}", category, type, minPower, maxPower, size, legendary, source); - html = await client.GetStringAsync(url); - - var pack = new XmlDocument(); - pack.LoadXml(html); - //var trs = pack.GetElementbyId("liste").Element("table").Elements("tr").ToList(); - var trs = pack.DocumentElement.SelectSingleNode("//table[contains(@class,'liste')]").SelectNodes("tr"); - var monsters = new List(); - foreach (var tro in trs) - { - var tr = tro as XmlNode; - var tds = tr.SelectNodes("td"); - if (tds.Count > 0) - { - var monster = new Monster(); - var aname = tds[1].SelectSingleNode("a"); - var spanname = aname.SelectSingleNode("span"); - if (spanname != null) - { - monster.NamePHB = spanname.Attributes["title"].InnerText; - monster.Name = spanname.InnerText; - } - else - { - monster.NamePHB = aname.InnerText; - monster.Name = aname.InnerText; - } - - //monster.Name = tds[0].InnerText; - var href = aname.Attributes["href"].InnerText; - var regex = new Regex("vf=(?.*)"); - monster.Id = regex.Match(href).Groups["id"].Value; - monster.Power = tds[2].InnerText; - monster.Type = tds[3].InnerText; - monster.Size = tds[4].InnerText; - monster.Alignment = tds[5].InnerText; - monster.Legendary = tds[6].InnerText; - monsters.Add(monster); - } - } - return monsters; - } - - public async Task GetMonster(string id) - { - string html = null; - var client = GetHttpClient(); - // https://www.aidedd.org/dnd/monstres.php?vf=aarakocra - - html = await client.GetStringAsync(string.Format($"https://www.aidedd.org/dnd/monstres.php?vf={id}", id)); - - var pack = new XmlDocument(); - pack.LoadXml(html); - var divBloc = pack.DocumentElement.SelectSingleNode("//div[contains(@class,'bloc')]"); - var monster = Monster.FromHtml(divBloc); - monster.Id = id; - return monster; - } - - } -} diff --git a/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs b/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs index e525987b..9eff0d05 100644 --- a/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs +++ b/AideDeJeu/AideDeJeu/Models/Spells/Spell.cs @@ -87,54 +87,5 @@ namespace AideDeJeuLib.Spells public string NoOverflow { get; set; } public string Source { get; set; } - public void ParseHtml() - { - var pack = new XmlDocument(); - pack.LoadXml(this.Html); - var divSpell = pack.DocumentElement.SelectSingleNode("//div[contains(@class,'bloc')]"); - ParseNode(divSpell); - } - - public void ParseNode(XmlNode nodeSpell) - { - this.Name = nodeSpell.SelectSingleNode("h1").InnerText; - var divTrad = nodeSpell.SelectSingleNode("div[@class='trad']"); - - var linkVO = divTrad.SelectSingleNode("a").Attributes["href"].InnerText; - var matchIdVF = new Regex(@"\?vf=(?.*)").Match(linkVO); - this.IdVF = matchIdVF?.Groups["idvf"]?.Value; - var matchIdVO = new Regex(@"\?vo=(?.*)").Match(linkVO); - this.IdVO = matchIdVO?.Groups["idvo"]?.Value; - var altNames = divTrad?.InnerText; - if (altNames != null) - { - var matchNames = new Regex(@"\[ (?.*?) \](?: \[ (?.*?) \])?").Match(altNames); - this.NameVO = matchNames.Groups["vo"].Value; - this.NamePHB = string.IsNullOrEmpty(matchNames.Groups["alt"].Value) ? this.Name : matchNames.Groups["alt"].Value; - } - else - { - this.NamePHB = this.Name; - } - this.LevelType = nodeSpell.SelectSingleNode("h2/em").InnerText; - this.Level = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[0].Split(' ')[1]; - this.Type = this.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[1]; - this.CastingTime = nodeSpell.SelectSingleNode("div[@class='paragraphe']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; - this.Range = nodeSpell.SelectSingleNode("div[strong/text()='Portée' or strong/text()='Range']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; - this.Components = nodeSpell.SelectSingleNode("div[strong/text()='Composantes' or strong/text()='Components']")?.InnerText?.Split(new string[] { ": " }, StringSplitOptions.None)?[1]; - this.Duration = nodeSpell.SelectSingleNode("div[strong/text()='Durée' or strong/text()='Duration']").InnerText.Split(new string[] { ": " }, StringSplitOptions.None)[1]; - this.DescriptionDiv = nodeSpell.SelectSingleNode("div[contains(@class,'description')]"); - this.Overflow = nodeSpell.SelectSingleNode("div[@class='overflow']")?.InnerText; - this.NoOverflow = nodeSpell.SelectSingleNode("div[@class='nooverflow']")?.InnerText; - this.Source = nodeSpell.SelectSingleNode("div[@class='source']").InnerText; - } - - public static Spell FromHtml(XmlNode nodeSpell) - { - var spell = new Spell(); - spell.Html = nodeSpell.OuterXml; - spell.ParseNode(nodeSpell); - return spell; - } } } diff --git a/AideDeJeu/AideDeJeu/Models/Spells/SpellsScrappers.cs b/AideDeJeu/AideDeJeu/Models/Spells/SpellsScrappers.cs deleted file mode 100644 index cfc12fdb..00000000 --- a/AideDeJeu/AideDeJeu/Models/Spells/SpellsScrappers.cs +++ /dev/null @@ -1,302 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Xml; -using System.Xml.Linq; - -namespace AideDeJeuLib.Spells -{ - public class SpellsScrappers : IDisposable - { - private HttpClient _Client = null; - public HttpClient GetHttpClient() - { - if (_Client == null) - { - var client = new HttpClient(); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xhtml+xml")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr-FR")); - _Client = client; - } - return _Client; - } - - #region IDisposable Support - private bool disposedValue = false; // Pour détecter les appels redondants - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // TODO: supprimer l'état managé (objets managés). - if (_Client != null) - { - _Client.Dispose(); - _Client = null; - } - } - - // TODO: libérer les ressources non managées (objets non managés) et remplacer un finaliseur ci-dessous. - // TODO: définir les champs de grande taille avec la valeur Null. - - disposedValue = true; - } - } - - // TODO: remplacer un finaliseur seulement si la fonction Dispose(bool disposing) ci-dessus a du code pour libérer les ressources non managées. - // ~SpellsScrappers() { - // // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus. - // Dispose(false); - // } - - // Ce code est ajouté pour implémenter correctement le modèle supprimable. - public void Dispose() - { - // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus. - Dispose(true); - // TODO: supprimer les marques de commentaire pour la ligne suivante si le finaliseur est remplacé ci-dessus. - // GC.SuppressFinalize(this); - } - #endregion - - public async Task> GetSpells(string classe = "", string niveauMin = "", string niveauMax = "", string ecole = "", string rituel = "", string source = "srd") - { - string html = null; - var client = GetHttpClient(); - // https://www.aidedd.org/regles/sorts/ - - //var url = string.Format("https://www.aidedd.org/regles/sorts/?c={0}&min={1}&max={2}&e={3}&r={4}&s={5}", classe, niveauMin, niveauMax, ecole, rituel, source); - var url = string.Format("https://www.aidedd.org/dnd-filters/sorts.php?c={0}&min={1}&max={2}&e={3}&r={4}&s={5}", classe, niveauMin, niveauMax, ecole, rituel, source); - html = await client.GetStringAsync(url); - - var pack = new XmlDocument(); - pack.LoadXml(html); - //var tdssort = pack.GetElementbyId("liste").Element("table").Elements("tr").ToList(); - var tdssort = pack.DocumentElement.SelectSingleNode("//table[contains(@class,'liste')]").SelectNodes("tr"); - var spells = new List(); - foreach (var tdsortt in tdssort) - { - var tdsort = tdsortt as XmlNode; - var thssort = tdsort.SelectNodes("td"); - if (thssort.Count > 0) - { - Spell spell = new Spell(); - var aname = thssort[1].SelectSingleNode("a"); - var spanname = aname.SelectSingleNode("span"); - if(spanname != null) - { - spell.NamePHB = spanname.Attributes["title"].InnerText; - spell.Name = spanname.InnerText; - } - else - { - spell.NamePHB = aname.InnerText; - spell.Name = aname.InnerText; - } - var href = aname.Attributes["href"].InnerText; - var regex = new Regex("vf=(?.*)"); - spell.Id = regex.Match(href).Groups["id"].Value; - - spell.Level = thssort[2].InnerText; - spell.Type = thssort[3].InnerText; - spell.CastingTime = thssort[4].InnerText; - spell.Concentration = thssort[5].InnerText; - spell.Rituel = thssort[6].InnerText; - spells.Add(spell); - } - } - return spells; - } - - public async Task GetSpell(string id) - { - string html = null; - var client = GetHttpClient(); - // https://www.aidedd.org/dnd/sorts.php?vo=ray-of-frost - // https://www.aidedd.org/dnd/sorts.php?vf=rayon-de-givre - - html = await client.GetStringAsync(string.Format("https://www.aidedd.org/dnd/sorts.php?vf={0}", id)); - - var pack = new XmlDocument(); - pack.LoadXml(html); - var divSpell = pack.DocumentElement.SelectSingleNode("//div[contains(@class,'bloc')]"); - var spell = Spell.FromHtml(divSpell); - spell.Id = id; - return spell; - } - - public async Task> GetSpellIds(string classe, string niveauMin = "Z", string niveauMax = "9") - { - string html = null; - var client = GetHttpClient(); - // https://www.aidedd.org/dnd/sorts.php?vo=ray-of-frost - // https://www.aidedd.org/dnd/sorts.php?vf=rayon-de-givre - // https://www.aidedd.org/regles/sorts/ - - html = await client.GetStringAsync(string.Format("https://www.aidedd.org/adj/livre-sorts/?c={0}&min={1}&max={2}", classe, niveauMin, niveauMax)); - - var pack = new XmlDocument(); - pack.LoadXml(html); - return pack.DocumentElement.SelectNodes("//input[@name='select_sorts[]']").Cast().Select(node => node.Attributes["value"].InnerText); - } - - public async Task> GetSpells(IEnumerable spellIds) - { - string html = null; - var client = GetHttpClient(); - var content = new MultipartFormDataContent(); - content.Add(new StringContent("card"), "format"); - foreach (var spellId in spellIds) - { - content.Add(new StringContent(spellId), "select_sorts[]"); - } - var response = await client.PostAsync("http://www.aidedd.org/dnd/sorts.php", content); - html = await response.Content.ReadAsStringAsync(); - - var pack = new XmlDocument(); - pack.LoadXml(html); - var newSpells = new List(); - var spells = pack.DocumentElement.SelectNodes("//div[contains(@class,'blocCarte')]"); - foreach (var spell in spells) - { - //var newSpell = new Spell(); - var newSpell = Spell.FromHtml(spell as XmlNode); - //newSpell.Name = spell.SelectSingleNode("h1").InnerText; - //newSpell.NameVO = spell.SelectSingleNode("div[@class='trad']").InnerText; - //newSpell.LevelType = spell.SelectSingleNode("h2/em").InnerText; - //newSpell.Level = newSpell.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[0].Split(' ')[1]; - //newSpell.Type = newSpell.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[1]; - //newSpell.CastingTime = spell.SelectSingleNode("div[@class='paragraphe']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - //newSpell.Range = spell.SelectSingleNode("div[strong/text()='Portée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - //newSpell.Components = spell.SelectSingleNode("div[strong/text()='Composantes']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - //newSpell.Duration = spell.SelectSingleNode("div[strong/text()='Durée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - //newSpell.DescriptionDiv = spell.SelectSingleNode("div[contains(@class,'description')]"); - ////newSpell.DescriptionHtml = newSpell.DescriptionDiv.InnerHtml; - ////newSpell.Description = newSpell.DescriptionDiv.InnerText; - //newSpell.Overflow = spell.SelectSingleNode("div[@class='overflow']")?.InnerText; - //newSpell.NoOverflow = spell.SelectSingleNode("div[@class='nooverflow']")?.InnerText; - //newSpell.Source = spell.SelectSingleNode("div[@class='source']").InnerText; - newSpells.Add(newSpell); - } - return newSpells; - } - - /* - public async Task OnGetAsync(IReadOnlyDictionary context) - { - var client = new HttpClient(); - //client.DefaultRequestHeaders.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue(new System.Net.Http.Headers.ProductHeaderValue("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"))); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xhtml+xml")); - client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr")); - client.DefaultRequestHeaders.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("fr-FR")); - //client.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip")); - //client.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("deflate")); - //client.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("br")); - var content = new MultipartFormDataContent(); - //content.Add(new StringContent("Afficher+%28FR%29"), "displayFR"); - content.Add(new StringContent("card"), "format"); - //content.Add(new StringContent("%27amis%27"), "select_sorts%5B%5D"); - //content.Add(new StringContent("\"amis\""), "select_sorts[]"); - //var bod = await content.ReadAsStringAsync(); - //Debug.WriteLine(bod); - - // https://www.aidedd.org/dnd/sorts.php?vo=ray-of-frost - // https://www.aidedd.org/dnd/sorts.php?vf=rayon-de-givre - // https://www.aidedd.org/regles/sorts/ - - - // - // - // - // - // - // - // - // - - string c = context["c"]; - var htmlSpellBook = await client.GetStringAsync("https://www.aidedd.org/adj/livre-sorts/?c=" + c + "&min=10&max=19"); - var pack = new HtmlDocument(); - pack.LoadHtml(htmlSpellBook); - var selectSorts = pack.DocumentNode.SelectNodes("//input[@name='select_sorts[]']").ToList(); - foreach (var selectSort in selectSorts) - { - content.Add(new StringContent(selectSort.GetAttributeValue("value", "")), "select_sorts[]"); - } - var response = await client.PostAsync("http://www.aidedd.org/dnd/sorts.php", content); - var htmlSpell = await response.Content.ReadAsStringAsync(); - pack.LoadHtml(htmlSpell); - var newSpells = new List(); - var cardDatas = new List(); - var spells = pack.DocumentNode.SelectNodes("//div[contains(@class,'blocCarte')]").ToList(); - foreach (var spell in spells) - { - var newSpell = new Spell(); - newSpell.Title = spell.SelectSingleNode("h1").InnerText; - newSpell.TitleUS = spell.SelectSingleNode("div[@class='trad']").InnerText; - newSpell.LevelType = spell.SelectSingleNode("h2/em").InnerText; - newSpell.Level = newSpell.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[0].Split(' ')[1]; - newSpell.Type = newSpell.LevelType.Split(new string[] { " - " }, StringSplitOptions.None)[1]; - newSpell.CastingTime = spell.SelectSingleNode("div[@class='paragraphe']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - newSpell.Range = spell.SelectSingleNode("div[strong/text()='Portée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - newSpell.Components = spell.SelectSingleNode("div[strong/text()='Composantes']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - newSpell.Duration = spell.SelectSingleNode("div[strong/text()='Durée']").InnerText.Split(new string[] { " : " }, StringSplitOptions.None)[1]; - newSpell.DescriptionDiv = spell.SelectSingleNode("div[contains(@class,'description')]"); - //newSpell.Description = newSpell.DescriptionDiv.InnerHtml; - newSpell.Overflow = spell.SelectSingleNode("div[@class='overflow']")?.InnerText; - newSpell.NoOverflow = spell.SelectSingleNode("div[@class='nooverflow']")?.InnerText; - newSpell.Source = spell.SelectSingleNode("div[@class='source']").InnerText; - newSpells.Add(newSpell); - cardDatas.AddRange(Converters.ToCardDatas(context, newSpell)); - } - //Debug.WriteLine(htmlSpell); - - var sampleCardDatas = cardDatas.Take(4).ToArray(); - foreach (var scd in sampleCardDatas) - { - int totalHeight = 0; - foreach (var cc in scd.Contents) - { - totalHeight += cc.Height; - Debug.WriteLine(string.Format("{0} - {1} => {2}", cc.Height, totalHeight, cc.ToString())); - } - } - //var own = new CardDataOwner() { CardDatas = cardDatas.ToArray() }; - MemoryStream stream = new MemoryStream(); - DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(CardData[])); - serializer.WriteObject(stream, cardDatas.ToArray()); - stream.Seek(0, SeekOrigin.Begin); - StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8); - //context.Response.Headers["encoding"] - return await sr.ReadToEndAsync(); - //Result = await sr.ReadToEndAsync(); - - - - - //JavaScriptSerializer serializer = new JavaScriptSerializer(); - //string json = serializer.Serialize((object)yourDictionary); - //Debug.WriteLine(result); - - //using (var file = new FileStream(@"C:\Users\yanma\Downloads\_\JdR\Chroniques Oubliées\crobi-rpg-cards-065974f\generator\data\out.js", FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) - //{ - // var bytes = System.Text.Encoding.UTF8.GetBytes(result); - // Response.Body.Write(bytes, 0, bytes.Length); - // //await file.WriteAsync(bytes, 0, bytes.Length); - //} - - } - */ - - } -} diff --git a/AideDeJeu/AideDeJeu/ViewModels/MonsterDetailViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MonsterDetailViewModel.cs index 341d5980..8ac83dc3 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/MonsterDetailViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/MonsterDetailViewModel.cs @@ -198,85 +198,6 @@ namespace AideDeJeu.ViewModels } } - - - //public FormattedString Description - //{ - // get - // { - // var fs = new FormattedString(); - // if (Item?.DescriptionDiv != null) - // { - // FormatedTextHelpers.HtmlToFormatedString(Item?.DescriptionDiv, fs, FontAttributes.None); - // } - // return fs; - // } - //} - - //public FormattedString TypeLevel - //{ - // get - // { - // var fd = FormatedTextHelpers.FontData.FromResource("contentital"); - // var fs = new FormattedString(); - // var capType = Item.Type.First().ToString().ToUpper() + Item.Type.Substring(1); - // fs.Spans.Add(new Span() { Text = string.Format("{0} de niveau {1}", capType, Item.Level), FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor}); - // return fs; - // } - //} - - //public FormattedString CastingTime - //{ - // get - // { - // var fd = FormatedTextHelpers.FontData.FromResource("content"); - // var fdb = FormatedTextHelpers.FontData.FromResource("contentbold"); - // var fs = new FormattedString(); - // fs.Spans.Add(new Span() { Text = "Durée d'incantation : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor }); - // fs.Spans.Add(new Span() { Text = Item.CastingTime, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor }); - // return fs; - // } - //} - - //public FormattedString Range - //{ - // get - // { - // var fd = FormatedTextHelpers.FontData.FromResource("content"); - // var fdb = FormatedTextHelpers.FontData.FromResource("contentbold"); - // var fs = new FormattedString(); - // fs.Spans.Add(new Span() { Text = "Portée : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor }); - // fs.Spans.Add(new Span() { Text = Item.Range, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor }); - // return fs; - // } - //} - - //public FormattedString Components - //{ - // get - // { - // var fd = FormatedTextHelpers.FontData.FromResource("content"); - // var fdb = FormatedTextHelpers.FontData.FromResource("contentbold"); - // var fs = new FormattedString(); - // fs.Spans.Add(new Span() { Text = "Composantes : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor }); - // fs.Spans.Add(new Span() { Text = Item.Components, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor }); - // return fs; - // } - //} - - //public FormattedString Duration - //{ - // get - // { - // var fd = FormatedTextHelpers.FontData.FromResource("content"); - // var fdb = FormatedTextHelpers.FontData.FromResource("contentbold"); - // var fs = new FormattedString(); - // fs.Spans.Add(new Span() { Text = "Durée : ", FontFamily = fdb.FontFamily, FontAttributes = fdb.FontAttributes, FontSize = fdb.FontSize, ForegroundColor = fdb.TextColor }); - // fs.Spans.Add(new Span() { Text = Item.Duration, FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor }); - // return fs; - // } - //} - public Command LoadItemCommand { get; set; } public MonsterDetailViewModel(Monster item = null) @@ -287,31 +208,6 @@ namespace AideDeJeu.ViewModels } async Task ExecuteLoadItemCommand() { - if (IsBusy) - return; - - IsBusy = true; - - try - { - //Item.ParseHtml(); - //Item = _Item; - //Items.Clear(); - //var item = await new MonstersScrappers().GetMonster(Item.Id); - //Item = item; - //foreach (var item in items) - //{ - // Items.Add(item); - //} - } - catch (Exception ex) - { - Debug.WriteLine(ex); - } - finally - { - IsBusy = false; - } } } diff --git a/AideDeJeu/AideDeJeu/Views/MonsterDetailPage.xaml b/AideDeJeu/AideDeJeu/Views/MonsterDetailPage.xaml index 304c6e56..dda08003 100644 --- a/AideDeJeu/AideDeJeu/Views/MonsterDetailPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/MonsterDetailPage.xaml @@ -96,13 +96,6 @@ -