API: dados reais sobre o COVID-19
Neste tutorial, vamos aprender como buscar informações sobre o Covid-19 em Portugal, entre os dias 29/03/2021 e 03/04/2021.
A API deve devolver as seguintes informações:
- Listar número de novos casos (para todos os dias da semana)
- Lista número de internamentos nos Cuidados Intensivos (para todos os dias da semana)
- Dia com mais novos casos
- Dia com menos casos
- Média a 7 dias
- Número total de novos casos na semana
Para ir buscar os dados, devemos aceder ao seguinte website:
https://covid19-api.vost.pt/
Selecionar a opção: “/Requests/get_entry/{date_1}_until_{date_2}”
Clicar no botão “Try it out”
Definir as seguintes datas: 29-03-2021 e 03-04-2021
E por fim, fazer o download do ficheiro JSON.
Posto isto, vamos criar um diretório, neste caso com o nome “covid_api”. Depois abrimos o cmd e executamos os seguintes comandos:
npm init
e
npm install — save express body-parser mongoose
(Estes comandos já foram utilizados em tutoriais anteriores.)
De seguida, vamos criar os ficheiros “index.js”, “RegController.js”, “RegModel.js”, e “RegRoutes.js”.
Dentro do ficheiro “index.js” inserimos o seguinte código:
let express = require ('express')// import body parser
let bodyParser = require ('body-parser');// import mongoose
let mongoose = require ('mongoose');
let app = express ();// Import routes
let apiRoutes = require ("./RegRoutes")// configure bodyparser to process orders
app.use (bodyParser.urlencoded ({
extended: true
}));
app.use (bodyParser.json ());// Connect to BD
const dbPath = 'mongodb://localhost/covid-api';
const options = {useNewUrlParser: true, useUnifiedTopology: true}
const mongo = mongoose.connect (dbPath, options);mongo.then (() => {
console.log ('Ligado a BD');
}, error => {
console.log (error, 'error');
});
var db = mongoose.connection;// Check Connection
if (! db)
console.log ("Error connecting db");
else
console.log ("DB Conectada com Sucesso!!");// Port Server
var port = process.env.PORT || 6666;// Use API routes in the app
app.use ('/api', apiRoutes)// Start Server
app.listen (port, function () {
console.log ("UP server in port:" + port);
});
Ficando o ficheiro assim:
Dentro do ficheiro “RegModel.js” inserimos o seguinte código:
var mongoose = require ('mongoose');// schema
var covidSchema = mongoose.Schema ({
date: {
type: String,
required: true
},
confirmed_new: {
type: Number,
required: true
},
internados_uci: {
type: Number,
required: true
}
});// Export Covid Model
var Covid = module.exports = mongoose.model ('covid', covidSchema);
module.exports.get = function (callback, limit) {
Covid.find (callback) .limit (limit);
}
Ficando o ficheiro assim:
Dentro do ficheiro “RegController.js” inserimos o seguinte código:
//Import Covid Model
Covid = require('./RegModel');//Para index
exports.index = function (req, res) {
var arrayCasos = [];
var darrayData = [];
var totalCasos = 0;
var arrayIntensivos = [];
Covid.get(function (err, covid) {
if (err)
res.json({
status: "error",
message: err
});
for (var i = 0; i < covid.length; i++) {
arrayCasos.push(covid[i].confirmados_novos)
arrayIntensivos.push(covid[i].internados_uci)
darrayData.push(covid[i].data)
totalCasos += Number(covid[i].confirmados_novos);
}
var maximo = null;
maximo = Math.max(...arrayCasos);
var IndiceMax = arrayCasos.indexOf(maximo);
var minimo = null;
minimo = Math.min(...arrayCasos);
var IndiceMin = arrayCasos.indexOf(minimo);
var media = null;
media = totalCasos / covid.length;
res.json({
novosCasos: arrayCasos,
internadosUCI: arrayIntensivos,
Maximo: darrayData[IndiceMax],
Minimo: darrayData[IndiceMin],
totalCasos: totalCasos,
Media: media,
});
});
};//Criar nova BIO
exports.add = function (req, res) {
var covid = new Covid();
covid.data = req.body.data ? req.body.data : covid.data;
covid.confirmados_novos = req.body.confirmados_novos;
covid.internados_uci = req.body.internados_uci;//Guardar e verificar erros
covid.save(function (err) {
if (err)
res.json(err);
res.json({
message: "Nova Covid Adicionada!",
data: covid
});
});
};// Ver Covid
exports.view = function (req, res) {
Covid.findById(req.params.covid_id, function (err, covid) {
if (err)
res.send(err);
res.json({
message: 'Detalhes da Covid',
data: covid
});
});
};// Atualizar Covid
exports.update = function (req, res) {
Covid.findById(req.params.covid_id, function (err, covid) {
if (err)
res.send(err);
covid.nome = req.body.nome ? req.body.nome : covid.nome;
covid.email = req.body.email;
covid.telef = req.body.telef;
covid.morada = req.body.morada;//Guardar e verificar erros
covid.save(function (err) {
if (err)
res.json(err)
res.json({
message: "Covid Atualizado com Sucesso",
data: covid
});
});
});
};// Apagar Covid
exports.delete = function (req, res) {
Covid.deleteOne({
_id: req.params.covid_id
}, function (err, contact) {
if (err)
res.send(err)
res.json({
status: "OK",
message: 'Covid Eliminada!'
});
});
};
Ficando o ficheiro assim:
Dentro do ficheiro “RegRoutes.js” inserimos o seguinte código:
// initialize express router
let router = require ('express'). Router ();// set default API response
router.get ('/', function (req, res) {
res.json ({
status: 'API Works',
message: 'Welcome to Covid API'
});
});// Import Covid Controller
var RegController = require ('./RegController');// Covid routes
router.route ('/covid')
.get (RegController.index)
.post (RegController.add);router.route ('/covid/:covid_id')
.get (RegController.view)
.patch (RegController.update)
.put (RegController.update)
.delete (RegController.delete);// Export API routes
module.exports = router;
Ficando o ficheiro assim:
Depois, vamos abrir o MongoDB Compass e vamos criar uma nova base de dados com o nome de “covid-api”. A coleção também possui o nome “covid-api”. Depois da base de dados e a coleção estarem criadas, vamos entrar dentro da coleção, clicar no botão “ADD DATA”, e escolher a opção “Import File”.
Irá abrir um novo separador, que terá o seguinte aspeto:
Na aba onde diz “Select File”, carregamos no botão “BROWSE”, e carregamos o ficheiro JSON que foi descarregado anteriormente. Por fim, carregamos no botão “IMPORT”.
O output do MongoDBCompass será o seguinte:
Para verificar, basta ir ao Postman, escolher o método GET e colocar o seguinte URL: http://localhost:6666/api/covid/.
O seu output será idêntico ao seguinte: