From 0f2bbdff098d109527d0e4677f46697a7d57271b Mon Sep 17 00:00:00 2001 From: Laura Cordero Date: Tue, 26 Mar 2024 10:34:46 +0100 Subject: [PATCH] =?UTF-8?q?M=C3=A1s=20preguntas=20a=C3=B1adidas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template-questions/question-service.js | 114 +++++++++++++----- .../template-questions/wikidata-query.js | 26 +--- webapp/src/components/Game.js | 7 +- 3 files changed, 86 insertions(+), 61 deletions(-) diff --git a/questions/template-questions/question-service.js b/questions/template-questions/question-service.js index 7de6157d..d522e90a 100644 --- a/questions/template-questions/question-service.js +++ b/questions/template-questions/question-service.js @@ -5,12 +5,52 @@ const Wikidata = require('./wikidata-query'); const app = express(); const port = 8004; -const jsonPreg={ - text:'¿Cuál es la capital de', - queryCorrect:'SELECT ?countryLabel ?capitalLabel WHERE {' + - '?country wdt:P31 wd:Q6256. ?country wdt:P36 ?capital. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es".}}', - queryIncorrect:'SELECT ?capitalLabel WHERE { ?capital wdt:P31 wd:Q5119. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }}' -}; +const jsonPreg=[ + { + textStart:'¿Cuál es la capital de ', + textEnd:'?', + queryCorrect:'SELECT ?preguntaLabel ?respuestaLabel WHERE {' + + '?pregunta wdt:P31 wd:Q6256. ?pregunta wdt:P36 ?respuesta. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es".}}' + }, + { + textStart:'¿Quién es el director de la película ', + textEnd:'?', + queryCorrect:'SELECT DISTINCT ?preguntaLabel ?respuestaLabel WHERE {'+ + '?pregunta wdt:P31 wd:Q11424.'+ + '?pregunta wdt:P57 ?respuesta.'+ + 'SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }'+ + '} LIMIT 100' + }, + { + textStart:'¿Quién es el autor del libro ', + textEnd:'?', + queryCorrect:'SELECT ?preguntaLabel ?respuestaLabel WHERE {'+ + '?pregunta wdt:P31 wd:Q7725634.'+ + '?pregunta wdt:P50 ?respuesta.'+ + 'SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }'+ + '} LIMIT 100' + }, + { + textStart:'¿Quién es el cantante de ', + textEnd:'?', + queryCorrect:'SELECT ?preguntaLabel ?respuestaLabel WHERE {'+ + '?pregunta wdt:P31 wd:Q134556.'+ + '?pregunta wdt:P175 ?respuesta.'+ + 'SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }'+ + '} LIMIT 100' + }, + { + textStart:'¿Dónde se encuentra el monumento ', + textEnd:'?', + queryCorrect:'SELECT ?preguntaLabel ?respuestaLabel WHERE {'+ + '?pregunta wdt:P31 wd:Q570116.'+ + '?pregunta wdt:P17 ?respuesta.'+ + 'SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }'+ + '} LIMIT 100' + } + +] +; //const json = JSON.parse(jsonPreg); @@ -23,40 +63,48 @@ app.use(bodyParser.json()); app.post("/questions", async (req, res) => { try { let resultadosGuardados; - console.log("entra post random questions"); - wiki.ejecutarConsultaSPARQL(jsonPreg.queryCorrect) + + //Escoge un valor aleatorio para escoger la pregunta + let sizeJson = jsonPreg.length; + let randQuery= Math.floor(Math.random() * sizeJson); + + wiki.ejecutarConsultaSPARQL(jsonPreg[randQuery].queryCorrect) .then((resultados) => { + //Escoge un valor aleatorio de la consulta para la respuesta correcta let size = resultados.results.bindings.length; let random = Math.floor(Math.random() * size); - let randoms = []; - while (randoms.length < 3) { - let numero = Math.floor(Math.random() * size); - if (!randoms.includes(numero) && numero!=random) { - randoms.push(numero); - } - } - resultadosGuardados = { - pregunta: jsonPreg.text + ' ' +resultados.results.bindings[random].countryLabel.value + '?', - correcta: resultados.results.bindings[random].capitalLabel.value, - incorrectas: [ - resultados.results.bindings[randoms[0]].capitalLabel.value, - resultados.results.bindings[randoms[1]].capitalLabel.value, - resultados.results.bindings[randoms[2]].capitalLabel.value - ] - } + + //Valor aleatorio para las respuestas incorrectas + let randoms = []; + while (randoms.length < 3) { + let numero = Math.floor(Math.random() * size); + if (!randoms.includes(numero) && numero!=random) { + randoms.push(numero); + } + } + //Json generado para enviar al post + resultadosGuardados = { + pregunta: jsonPreg[randQuery].textStart + resultados.results.bindings[random].preguntaLabel.value + jsonPreg[randQuery].textEnd, + correcta: resultados.results.bindings[random].respuestaLabel.value, + incorrectas: [ + resultados.results.bindings[randoms[0]].respuestaLabel.value, + resultados.results.bindings[randoms[1]].respuestaLabel.value, + resultados.results.bindings[randoms[2]].respuestaLabel.value + ] + } - console.log(resultadosGuardados.incorrectas); - console.log(resultados.results.bindings[randoms[0]].capitalLabel.value); - console.log(resultados.results.bindings[randoms[1]].capitalLabel.value); - console.log(resultados.results.bindings[randoms[2]].capitalLabel.value); + // console.log(resultadosGuardados.incorrectas); + // console.log(resultados.results.bindings[randoms[0]].capitalLabel.value); + // console.log(resultados.results.bindings[randoms[1]].capitalLabel.value); + // console.log(resultados.results.bindings[randoms[2]].capitalLabel.value); res.send(resultadosGuardados); - }) - .catch((error) => { - console.error('Error al ejecutar la consulta:', error); - }); + }) + .catch((error) => { + console.error('Error al ejecutar la consulta:', error); + }); - } catch (error) { + } catch (error) { //Catch del try console.error("Error:", error); // Maneja el error res.status(500).send(error); // Envía una respuesta de error al cliente } diff --git a/questions/template-questions/wikidata-query.js b/questions/template-questions/wikidata-query.js index fa4db37b..daf3968b 100644 --- a/questions/template-questions/wikidata-query.js +++ b/questions/template-questions/wikidata-query.js @@ -1,7 +1,5 @@ -class Wikidata { - - +class Wikidata { async ejecutarConsultaSPARQL(query) { try { const axios = require('axios'); @@ -32,24 +30,4 @@ class Wikidata { } } -module.exports = Wikidata; - -/* const random = Math.floor(Math.random() * 100) -const endpointUrl = 'https://query.wikidata.org/sparql'; -const sparqlQuery = ` -SELECT ?filmLabel ?directorLabel WHERE { - ?film wdt:P31 wd:Q11424; - wdt:P57 ?director. - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } -} -LIMIT 100 -`; - -const queryDispatcher = new SPARQLQueryDispatcher( endpointUrl ); -const query= queryDispatcher.query( sparqlQuery ).then( function (value) { - console.log(value.results.bindings[random]); // Success! -}, -function (reason) { - console.log(reason); // Error! -}, -); */ \ No newline at end of file +module.exports = Wikidata; \ No newline at end of file diff --git a/webapp/src/components/Game.js b/webapp/src/components/Game.js index 347d252f..a05b9727 100644 --- a/webapp/src/components/Game.js +++ b/webapp/src/components/Game.js @@ -98,10 +98,9 @@ const Game = () => { }; - // useEffect(() => { - // console.log('El componente se ha montado'); - // addPregunta().then(console.log("hi" + pregunta) ); - // }, []) + useEffect(() => { + addPregunta(); + }, []) return (