Pplware

Node.js: Criar em 5 minutos uma app de geolocalização do seu endereço IP

Hoje em dia um programador tem a vida facilitada na medida em que tem à sua disposição, e de forma gratuita, código/funções já criadas que pode utilizar nas suas aplicações.

Hoje vamos aprender a desenvolver uma pequena aplicação que irá mostrar dados relativos à nossa localização tendo como base o endereço IP público associado à nossa ligação à Internet.


Neste tutorial vamos precisar de duas coisas essenciais:

1) Instalação do Node.js

Caso ainda não tenha o Node.js instalado na sua máquina, basta executar os seguintes comandos:

sudo apt-get update
sudo apt-get install nodejs

Irá ser necessário também instalar o gestor de pacotes do Node.js (npm — Node Package Manager), pelo que deve proceder à sua instalação executando o seguinte comando:

sudo apt-get install npm

2) Preparação do ambiente

Vamos então começar a criar a nossa pequena aplicação usando Node.js recorer à API fornecida pelo site mencionado acima.

O primeiro passo é criar um diretório, por exemplo, com o nome ‘nodejs-ipgeo’, ou outro nome à sua escolha.

cd /home/user/Desktop
mkdir nodejs-ipgeo

De seguida, iniciamos o nosso projeto com o comando npm init, que irá criar um ficheiro package.json onde podemos configurar alguns parâmetros, nomeadamente a descrição do projeto, o autor, palavras-chave, etc.

cd nodejs-ipgeo
npm init

O próximo passo é criar um ficheiro dentro do diretório criado anteriormente, com o nome ‘index.js’.

touch index.js

Invocar a Pubic IP Address API

De forma a invocar a API que iremos utilizar, necessitamos de um módulo chamado npm request para fazer requisições HTTP. Para instalar este módulo, basta executar o seguinte comando:

npm install request --save

3) Programação

Vamos agora editar o ficheiro ‘index.js’. Para tal, basta executar o comando:

nano -w index.js

Aceda a ip-api.com e copie o URL da API: http://ip-api.com/json. Adicione o seguinte código ao ficheiro:

let request = require('request');
 
let url = `http://ip-api.com/json`
let dados = '';
 
request(url, function (err, response, body) {
   if(err){
       console.log('error:', err);
   } else {
       let ipInfo = JSON.parse(body);
       dados = `?????????? WHERE AM I ?????????
                -------------------------------
                IP: ${ipInfo.query}
                Country: ${ipInfo.country}
                City: ${ipInfo.city}
                Region: ${ipInfo.regionName}
                Lat: ${ipInfo.lat}
                Lon: ${ipInfo.lon}
                Organization: ${ipInfo.org}
                -------------------------------
                Dev by CP 2019`
       console.log(dados);
   }
});

Clique em ‘Save’ para guardar.

Breve explicação do código:

A utilização do módulo npm request é bastante simples, bastando para isso passar por parâmetro um URL que devolve o resultado da API:

request(url, function (err, response, body){...});

De maneira a formatar o output do nosso programa, vamos utilizar uma função do Node.js que é o JSON.parse().

É comum usar o JSON.parse() quando se pretende que os dados JSON se convertam num objeto Javascript.

A nossa API devolve uma string do tipo:

{"as":"AS3243 MEO - SERVICOS DE COMUNICACOES E MULTIMEDIA S.A.","city":"Viseu","country":"Portugal","countryCode":"PT","isp":"PT Comunicacoes S.A.","lat":48.661,"lon":-25.9097,"org":"PT Comunicacoes S.A.","query":"2.81.15.89","region":"18","regionName":"Viseu","status":"success","timezone":"Europe/Lisbon","zip":"3500-146"}

Podemos usar a função JSON.parse() para converter texto num objeto Javascript.

let ipInfo = JSON.parse(body);

Para aceder a cada parâmetro da API, basta fazer referência ao objeto que contém o parse da string, ipInfo, e invocar o nome do parâmetro (as, city, country, countryCode, isp, lat …) que podemos observar na string devolvida pela API.

Country: ${ipInfo.country}

No final, para mostrar os dados na consola, basta acrescentar a linha:

console.log(dados);

4) Executar a aplicação

Por fim, para executar a aplicação, basta escrever o comando:

node index.js

Pronto! É isto, bem simples e rápido, não é? Mas, e se quisermos ver esta informação num servidor web?

5) Executar a aplicação num servidor HTTP

Com o Node.js é muito fácil criar um servidor http. Considerando que pretendemos criar uma página que devolva os dados da aplicação anterior, vamos acrescentar mais umas linhas de código ao ficheiro ‘index.js’.

Vamos executar o comando que permite editar o ficheiro ‘index.js’:

nano -w index.js

De seguida, vamos acrescentar as seguintes linhas no final do ficheiro:

const http = require('http');
var server = http.createServer(function(req, res) {
	res.writeHead(200);
	res.write(dados);
        res.end();
});
server.listen(8081, () => {
        console.log("Server is running on http://localhost:8001");
});

Para executar, basta escrever:

node index.js

Podemos observar que o servidor está a correr na porta 8001, então basta aceder ao browser e ir a http://localhost:8001

Chegámos ao fim! Se conseguiu chegar até aqui, está de parabéns. Ficou com vontade de aprender mais sobre Node.js? Esperamos que sim. Até à próxima!

Exit mobile version