diff --git a/webapp/src/components/Game.js b/webapp/src/components/Game.js index 60474d6f..bfddd5b1 100644 --- a/webapp/src/components/Game.js +++ b/webapp/src/components/Game.js @@ -31,79 +31,65 @@ const Game=() =>{ setquestionBody(response.data.questionBody);//obtengo los datos del cuerpo de la pregunta setQuestionType(response.data.typeQuestion); setAnswerType(response.data.typeAnswer); + + obtenerDatos(response.data.typeQuestion); } catch (error) { console.error("Error al obtener la pregunta aleatoria", error); } }; - - + + // Diccionario con el tipo de pregunta y la consulta SPARQL correspondiente + const questionTypes = { + "pais": { + query: ` + SELECT ?country ?countryLabel ?capital ?capitalLabel + WHERE { + ?country wdt:P31 wd:Q6256. + ?country wdt:P36 ?capital. + SERVICE wikibase:label { + bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". + } + } + ORDER BY RAND() + LIMIT 150 + `, + questionLabel: 'countryLabel', + answerLabel: 'capitalLabel' + }, + // Añadir el resto de tipos de preguntas + }; + // Obtener info de wikidata segun el tipo de la pregunta y la respuesta para esa pregunta - //questionType, answerType - const obtenerPais = async () => { - + const obtenerDatos = async (questionType) => { try { - // Consulta SPARQL//obtengo - const sparqlQuery = ` - SELECT ?country ?countryLabel ?capital ?capitalLabel - WHERE { - ?country wdt:P31 wd:Q6256. # P31 instancias de -> wd:Q6256 (país) - ?country wdt:P36 ?capital. # P36 instancias de -> ?capital (capital) - SERVICE wikibase:label { - bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". - } - } - ORDER BY RAND() - LIMIT 150 - `; - - // URL del punto de acceso SPARQL de Wikidata - const apiUrl = `https://query.wikidata.org/sparql?query=${encodeURIComponent(sparqlQuery)}`; - + const { query, questionLabel, answerLabel } = questionTypes[questionType]; + + const apiUrl = `https://query.wikidata.org/sparql?query=${encodeURIComponent(query)}`; const headers = { "Accept": "application/json" }; - - //obtengo datos api - // Realizar la solicitud con la cabecera adecuada para la API de consulta SPARQL de Wikidata + const respuestaWikidata = await fetch(apiUrl, {headers}); - - + if (respuestaWikidata.ok) { - const data = await respuestaWikidata.json();//obtengo los datos en json - - //saco uno de los elementos al azar - const numEles = data.results.bindings.length; - const index = Math.floor(Math.random() * numEles);//index al azar - const result = data.results.bindings[index]; - - setInformacionWikidata(result.countryLabel.value+`?`); - - setRespuestaCorrecta(result.capitalLabel.value); - - } else { + const data = await respuestaWikidata.json(); + const numEles = data.results.bindings.length; + const index = Math.floor(Math.random() * numEles); + const result = data.results.bindings[index]; + + setInformacionWikidata(result[questionLabel].value + '?'); + setRespuestaCorrecta(result[answerLabel].value); + } else { console.error("Error al realizar la consulta en Wikidata. Estado de respuesta:", respuestaWikidata.status); } } catch (error) { console.error("Error al realizar la consulta en Wikidata", error); } - }; + const handleButtonClick = () => { - - setNumberClics(numberClics + 1);//aumento el numero de clics en 1 - + setNumberClics(numberClics + 1); obtenerPreguntaAleatoria(); - //pais, libro,actor, edificio - if (questionType=='pais'){ - obtenerPais();} - else if (questionType =='libro'){ - obtenerPais();} - else if (questionType ==='actor'){ - obtenerPais();} - else if (questionType=='edificio'){ - obtenerPais();} - //etc... - obtenerPais();//para que de momento genere un pais hasta tener el resto de queries }; return ( diff --git a/{ b/{ new file mode 100644 index 00000000..e69de29b