/// <summary> /// Désérialisation d'une liste de jeux /// </summary> /// <param name="stream"></param> /// <returns></returns> private ListeFichesJeuxJVC DeserialiserListeJeux(Stream stream) { string machine; string urlFiche; ListeFichesJeuxJVC listeFichesJeuxJVC = new ListeFichesJeuxJVC(); try { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Début DeserialiserListeJeux"); StreamReader streamReader = new StreamReader(stream); string resultat = streamReader.ReadToEnd(); int indexDebut = resultat.LastIndexOf("[")+1; int indexFin = resultat.IndexOf("]")-1; resultat = resultat.Substring(indexDebut, indexFin - indexDebut); indexDebut = resultat.IndexOf("ul>") + 3; resultat = resultat.Substring(indexDebut, resultat.Length - indexDebut); resultat = resultat.Replace("&", "and"); XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(resultat); XPathNavigator xpathNavigator; xpathNavigator = xdoc.CreateNavigator(); XPathNodeIterator xpathNodeIterator; xpathNodeIterator = xpathNavigator.Select("/div/h3"); // On parcourt les chunks while (xpathNodeIterator.MoveNext()) { // On recupère le nom de machine machine = xpathNodeIterator.Current.Value; //on va à ul xpathNodeIterator.Current.MoveToNext(); // balises li xpathNodeIterator.Current.MoveToChild("li", ""); do { // Chaque balise li correspond à une fiche FicheJeuJVC ficheJeuJVC = new FicheJeuJVC(); ficheJeuJVC.Machine = xpathNodeIterator.Current.Value; xpathNodeIterator.Current.MoveToChild("a", ""); ficheJeuJVC.Titre = xpathNodeIterator.Current.Value; urlFiche = xpathNodeIterator.Current.GetAttribute("href", ""); urlFiche = urlFiche.Replace("jv:/", "http://ws.jeuxvideo.com"); ficheJeuJVC.UrlSimple = urlFiche; xpathNodeIterator.Current.MoveToParent(); if (xpathNodeIterator.Current.MoveToChild("strong", "")) { ficheJeuJVC.Machine = xpathNodeIterator.Current.Value; xpathNodeIterator.Current.MoveToParent(); } else { ficheJeuJVC.Machine = machine; } FicheJeuJVC ficheComplementaire = ObtenirFicheSimpleJeu(urlFiche); ficheJeuJVC.UrlVignette = ficheComplementaire.UrlVignette; ficheJeuJVC.Editeur = ficheComplementaire.Editeur; ficheJeuJVC.Developpeur = ficheComplementaire.Developpeur; ficheJeuJVC.DateSortie = ficheComplementaire.DateSortie; ficheJeuJVC.NomJaquette = ficheComplementaire.NomJaquette; ficheJeuJVC.Genre = ficheComplementaire.Genre; listeFichesJeuxJVC.AjouterFicheJeuJVC(ficheJeuJVC); } while (xpathNodeIterator.Current.MoveToNext()); xpathNodeIterator.Current.MoveToParent(); } foreach (FicheJeuJVC fiche in listeFichesJeuxJVC) { Console.WriteLine(fiche.ToString()); } return listeFichesJeuxJVC; } catch (Exception ex) { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Erreur = " + ex.Message); throw; } finally { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Fin DeserialiserListeJeux"); } }
/// <summary> /// Fonction qui retourne les films correspondant au critère de recherche /// </summary> /// <param name="critere"></param> public ListeFichesJeuxJVC RechercherJeu(string critere) { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Début RechercherJeu"); try { string responseValue = String.Empty; //critere.Replace(" ", "+"); // Construction de l'url de recherche string url = string.Format(Properties.Settings.Default.UrlRechercheJVC, HttpUtility.HtmlEncode(critere)); // Création de la requête HttpWebRequest request = CreateWebRequest(url); request.Timeout = 5000; // Récupération de la réponse HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode != HttpStatusCode.OK) { string message = String.Format("GET failed. Received HTTP {0}", response.StatusCode); throw new ApplicationException(message); } // Récupération du flux Stream responseStream = response.GetResponseStream(); ListeFichesJeuxJVC liste = DeserialiserListeJeux(responseStream); ListeFichesJeuxJVC listeARetourner = new ListeFichesJeuxJVC(); foreach (FicheJeuJVC ficheJeu in liste) { bool aTraiter = true; foreach(string s in critere.Split(' ')) { if(!ficheJeu.Titre.ToLower().Contains(s.ToLower())) { aTraiter = false; } } if (aTraiter) { url = string.Format(Properties.Settings.Default.UrlObtenirFicheJVC, ficheJeu.CodeJeu); request = CreateWebRequest(url); // Récupération de la réponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode != HttpStatusCode.OK) { string message = String.Format("GET failed. Received HTTP {0}", response.StatusCode); throw new ApplicationException(message); } // Récupération du flux responseStream = response.GetResponseStream(); FicheJeuJVC fiche2 = DeserialiserJeu(responseStream); fiche2.TypeMachine = ficheJeu.TypeMachine; fiche2.CodeJeu = ficheJeu.CodeJeu; listeARetourner.AjouterFicheJeuJVC(fiche2); } } // Désérialisation return listeARetourner; } catch (Exception ex) { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Erreur = " + ex.Message); throw ex; } finally { Log.MonitoringLogger().Info(KS_NOM_MODULE + "Fin RechercherJeu"); } }