API: dados reais sobre o COVID-19

Daniel Pereira
5 min readApr 11, 2021

--

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:

--

--

Daniel Pereira
Daniel Pereira

Written by Daniel Pereira

Estudante de Engenharia Informática no Instituto Politécnico da Guarda

No responses yet