Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Método genérico para consultas #66

Merged
merged 3 commits into from
Feb 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.