Skip to content

Commit

Permalink
Merge branch 'service_question_generator' into webapp_interface
Browse files Browse the repository at this point in the history
  • Loading branch information
alegarman2002 committed Mar 13, 2024
2 parents 4396167 + 0692855 commit 420ef2b
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 66 deletions.
173 changes: 107 additions & 66 deletions questionsservice/questiongeneratorservice/questiongenerator-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const { Request } = require('./questiongenerator-model')
const app = express();
const port = 8006;

const WikiQueries = require('./wikidataExtractor/wikidataQueries')
// Connect to MongoDB
const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/questions';
mongoose.connect(mongoUri);
Expand All @@ -20,87 +21,127 @@ app.use(express.json());
// Middleware to enable CORS (cross-origin resource sharing). In order for the API to be accessible by other origins (domains).
app.use(cors());

const mockedQuestions = [
{
pregunta: "¿Cómo me llamo?",
respuesta_correcta: "Abel",
respuestas_incorrectas: ["Federico", "Eusebio", "Gervasio"]
},
{
pregunta: "¿Cuál es el río más largo del mundo?",
respuesta_correcta: "Amazonas",
respuestas_incorrectas: ["Nilo", "Misisipi", "Yangtsé"]
},
{
pregunta: "¿En qué año comenzó la Segunda Guerra Mundial?",
respuesta_correcta: "1939",
respuestas_incorrectas: ["1941", "1942", "1945"]
},
{
pregunta: "¿Quién escribió 'El Quijote'?",
respuesta_correcta: "Miguel de Cervantes",
respuestas_incorrectas: ["Garcilaso de la Vega", "Federico García Lorca", "Pablo Neruda"]
},
{
pregunta: "¿Cuál es el símbolo químico del oro?",
respuesta_correcta: "Au",
respuestas_incorrectas: ["Ag", "Fe", "Cu"]
},
{
pregunta: "¿Cuál es el planeta más grande del sistema solar?",
respuesta_correcta: "Júpiter",
respuestas_incorrectas: ["Saturno", "Marte", "Venus"]
},
{
pregunta: "¿Quién pintó la 'Mona Lisa'?",
respuesta_correcta: "Leonardo da Vinci",
respuestas_incorrectas: ["Pablo Picasso", "Vincent van Gogh", "Rembrandt"]
},
{
pregunta: "¿En qué país se encuentra la Torre Eiffel?",
respuesta_correcta: "Francia",
respuestas_incorrectas: ["Italia", "España", "Alemania"]
},
{
pregunta: "¿Qué año marcó el fin de la Segunda Guerra Mundial?",
respuesta_correcta: "1945",
respuestas_incorrectas: ["1943", "1944", "1946"]
},
{
pregunta: "¿Quién escribió 'Romeo y Julieta'?",
respuesta_correcta: "William Shakespeare",
respuestas_incorrectas: ["Jane Austen", "Charles Dickens", "F. Scott Fitzgerald"]
},
{
pregunta: "¿Qué inventó Thomas Edison?",
respuesta_correcta: "Bombilla eléctrica",
respuestas_incorrectas: ["Teléfono", "Automóvil", "Avión"]
var mockedQuestions = []
var isWikiChecked = false
var elementos

function shuffle(array) {
let currentIndex = array.length;
let randomIndex;

// Mientras queden elementos para mezclar.
while (currentIndex > 0) {
// Escoge un elemento aleatorio.
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;

// Intercambia el elemento actual con el elemento aleatorio.
[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
}
]

return array;
}

const generateQuestion = async () => {
if (!isWikiChecked) {
elementos = await WikiQueries.obtenerPaisYCapital()
isWikiChecked = true
}
elementos = shuffle(elementos)
console.log("caca", elementos)
mockedQuestions = [{
pregunta: "¿Cual es la capital de " + elementos[0].countryLabel + "?",
respuesta_correcta: elementos[0].capitalLabel,
respuestas_incorrectas: [elementos[1].capitalLabel, elementos[2].capitalLabel, elementos[3].capitalLabel]
}]
console.log(mockedQuestions)
}


// const mockedQuestions = [
// {
// pregunta: "¿Cómo me llamo?",
// respuesta_correcta: "Abel",
// respuestas_incorrectas: ["Federico", "Eusebio", "Gervasio"]
// },
// {
// pregunta: "¿Cuál es el río más largo del mundo?",
// respuesta_correcta: "Amazonas",
// respuestas_incorrectas: ["Nilo", "Misisipi", "Yangtsé"]
// },
// {
// pregunta: "¿En qué año comenzó la Segunda Guerra Mundial?",
// respuesta_correcta: "1939",
// respuestas_incorrectas: ["1941", "1942", "1945"]
// },
// {
// pregunta: "¿Quién escribió 'El Quijote'?",
// respuesta_correcta: "Miguel de Cervantes",
// respuestas_incorrectas: ["Garcilaso de la Vega", "Federico García Lorca", "Pablo Neruda"]
// },
// {
// pregunta: "¿Cuál es el símbolo químico del oro?",
// respuesta_correcta: "Au",
// respuestas_incorrectas: ["Ag", "Fe", "Cu"]
// },
// {
// pregunta: "¿Cuál es el planeta más grande del sistema solar?",
// respuesta_correcta: "Júpiter",
// respuestas_incorrectas: ["Saturno", "Marte", "Venus"]
// },
// {
// pregunta: "¿Quién pintó la 'Mona Lisa'?",
// respuesta_correcta: "Leonardo da Vinci",
// respuestas_incorrectas: ["Pablo Picasso", "Vincent van Gogh", "Rembrandt"]
// },
// {
// pregunta: "¿En qué país se encuentra la Torre Eiffel?",
// respuesta_correcta: "Francia",
// respuestas_incorrectas: ["Italia", "España", "Alemania"]
// },
// {
// pregunta: "¿Qué año marcó el fin de la Segunda Guerra Mundial?",
// respuesta_correcta: "1945",
// respuestas_incorrectas: ["1943", "1944", "1946"]
// },
// {
// pregunta: "¿Quién escribió 'Romeo y Julieta'?",
// respuesta_correcta: "William Shakespeare",
// respuestas_incorrectas: ["Jane Austen", "Charles Dickens", "F. Scott Fitzgerald"]
// },
// {
// pregunta: "¿Qué inventó Thomas Edison?",
// respuesta_correcta: "Bombilla eléctrica",
// respuestas_incorrectas: ["Teléfono", "Automóvil", "Avión"]
// }
// ]

// Function to generate the required number of questions
function getQuestions(req) {
async function getQuestions(req) {
const { n_preguntas, n_respuestas, tema } = req.query;
var preguntas = Number(n_preguntas);
var respuestas = Number(n_respuestas);
var temad = String(tema);

if (isNaN(preguntas)) {
return mockedQuestions.slice(0, 4);
}
const response = [];
for (let i = 0; i < preguntas; i++) {
response.push(mockedQuestions[i % 11]);
}
return response
// if (isNaN(preguntas)) {
// generateQuestion()
// console.log("merda", mockedQuestions)
// return mockedQuestions.slice(0, 4);
// }
// const response = [];
await generateQuestion()
// for (let i = 0; i < preguntas; i++) {
// response.push(mockedQuestions[i % 11]);
// }
return mockedQuestions
}

// Route for getting questions
app.get('/questions', async (req, res) => {
try {
// TODO: Implement logic to fetch questions from MongoDB and send response
// const questions = await Question.find()
const defaultQuestion = getQuestions(req)
const defaultQuestion = await getQuestions(req)
res.json(defaultQuestion);
} catch (error) {
// res.status(500).json({ message: error.message })
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
async function consulta(query) {
const apiUrl = `https://query.wikidata.org/sparql?query=${encodeURIComponent(query)}&format=json`;
console.log(query)
const respuesta = await fetch(apiUrl, {
headers: {
'User-Agent': 'QuestionCrawler/1.0',
'Accept': 'application/json'
}
});
// console.log(apiUrl)
// console.log(respuesta)
if (!respuesta.ok) {
console.error('Error al realizar la consulta a Wikidata:', respuesta.statusText);
return;
}

const datos = await respuesta.json();

const resultados = [];

for (const resultado of datos.results.bindings) {
const resultadoFormateado = {};
for (const clave in resultado) {
resultadoFormateado[clave] = resultado[clave].value;
}
resultados.push(resultadoFormateado);
}

return resultados;
}

module.exports = {consulta}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const wikidata = require("./wikidataConnexion");

class WikiQueries {

static async obtenerPaisYCapital() {
const query = `
SELECT ?countryLabel ?capitalLabel WHERE {
?country wdt:P31 wd:Q6256.
?country wdt:P36 ?capital.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }
}
`;

const results = await wikidata.consulta(query);
// console.log(results)
return results;
}
}









module.exports = WikiQueries

0 comments on commit 420ef2b

Please sign in to comment.