/// <summary> /// Constructor de la pregunta /// </summary> /// <param name="pPregunta"></param> /// <param name="pRespuestaCorrecta"></param> /// <param name="pRespuestasIncorrectas"></param> /// <param name="pDificultad"></param> /// <param name="pCategoria"></param> /// <param name="pConjunto"></param> public Pregunta(string pPregunta, string pRespuestaCorrecta, List <string> pRespuestasIncorrectas, Dificultad pDificultad, CategoriaPregunta pCategoria, ConjuntoPreguntas pConjunto) { Id = pPregunta; RespuestaCorrecta = pRespuestaCorrecta; Dificultad = pDificultad; Categoria = pCategoria; Conjunto = pConjunto; RespuestaIncorrecta1 = pRespuestasIncorrectas[0]; RespuestaIncorrecta2 = pRespuestasIncorrectas[1]; RespuestaIncorrecta3 = pRespuestasIncorrectas[2]; }
/// <summary> /// Metodo para poder obtener preguntas de la pagina de OpentDB /// </summary> /// <param name="pCantidad"></param> /// <param name="pConjunto"></param> /// <param name="pDificultad"></param> /// <param name="pCategoria"></param> /// <returns></returns> public override List <Pregunta> getPreguntas(string pCantidad, string pConjunto, string pDificultad, CategoriaPregunta pCategoria) { { // Establecimiento del protocolo ssl de transporte System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; CultureInfo provider = new CultureInfo("en-us"); // Creacion de URL var mUrl = CrearURL(pCantidad, pDificultad, pCategoria.OpentDbId.ToString(provider)); // Se crea el request http HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(mUrl); try { // Se ejecuta la consulta WebResponse mResponse = mRequest.GetResponse(); // Se obtiene los datos de respuesta using (Stream responseStream = mResponse.GetResponseStream()) { StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); // Se parsea la respuesta y se serializa a JSON a un objeto dynamic dynamic mResponseJSON = JsonConvert.DeserializeObject(reader.ReadToEnd()); // Se iteran cada uno de los resultados. foreach (var bResponseItem in mResponseJSON.results) { // De esta manera se accede a los componentes de cada item string pregunta = HttpUtility.HtmlDecode(bResponseItem.question.ToString()); string respuestaCorrecta = HttpUtility.HtmlDecode(bResponseItem.correct_answer.ToString()); CategoriaPregunta categoria = new CategoriaPregunta(bResponseItem.category.ToString()); Dificultad dificultad = new Dificultad(HttpUtility.HtmlDecode(bResponseItem.difficulty.ToString())); List <string> incorrectas = bResponseItem.incorrect_answers.ToObject <List <string> >(); List <string> respIncorrectas = new List <string>(); foreach (string respInc in incorrectas) { string respuestaIncorrecta = HttpUtility.HtmlDecode(respInc); respIncorrectas.Add(respuestaIncorrecta); } Pregunta preg = new Pregunta(pregunta, respuestaCorrecta, respIncorrectas, dificultad, categoria, new ConjuntoPreguntas(pConjunto)); //se agrega cada una de las preguntas a la lista listaPreguntas.Add(preg); } } } catch (WebException ex) { Bitacora.GuardarLog(ex.Message); /* WebResponse mErrorResponse = ex.Response; * using (Stream mResponseStream = mErrorResponse.GetResponseStream()) * { * StreamReader mReader = new StreamReader(mResponseStream, Encoding.GetEncoding("utf-8")); * String mErrorText = mReader.ReadToEnd(); * }*/ } catch (Exception ex) { } return(listaPreguntas); } }