Skip to content

Commit

Permalink
Método genérico para consultas
Browse files Browse the repository at this point in the history
  • Loading branch information
uo277310 committed Feb 26, 2024
1 parent 43af1f9 commit 9ac0da2
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 54 deletions.
94 changes: 40 additions & 54 deletions webapp/src/components/Game.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down
Empty file added {
Empty file.

0 comments on commit 9ac0da2

Please sign in to comment.