primero vamos a instalar yargs
y setear que reciba (esta vez sin un comando de por medio) el argumento
de la direccion de la que se quiere saber su clima
const argv=require('yargs').options(
{
direccion:{
alias:'d',
demand:true,
desc: 'direccion a traer el clima'
}
}).
argv;
console.log(argv.direccion);
entonces si llamamos
node app -d "buenos aires argentina"
obtendremos
buenos aires argentina
vamos a instalar ahora un paquete para poder hacer llamadas a apis externas,
en este caso usaremos Axios (tambien puede ser request)
npm install axios --save
recordar que ponemos el --save para que se registre el paquete en el package.json como un dependencia, de lo contrario, se bajara la libreria sin registrarse la dependencia.
si se quiere instalar una version en especifico simplemente la escribimos antecediendole una arroba:
npm installa axios@0.18.0 --save
ahora ya podemos utilizarlo para llamar al webservice de google de geocoding
const axios=require('axios');
const urlEncoded = encodeURIComponent(argv.direccion);//para que convierta espacios
const apiKey = "AIzaSyBlRKjSjinm50447yd_qWAjvzojhWND7Ip-w";
axios.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${urlEncoded}&key=${apiKey}`)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
usamos response.data
para que por consola nos muestre solo los datos de la data de geocoding
y JSON.stringify(response.data)
para que nos muestre los datos de los objetos / arrays que trae Data sino no los podremos ver.
por consola los datos apareceran uno al lado del otro si queremos que se vean en distintas lineas
y con margenes usamos
JSON.stringify(response.data,undefined,2));
la respuesta sera algo asi
{
"results": [
{
"address_components": [
{
"long_name": "Buenos Aires",
"short_name": "CABA",
"types": [
"locality",
"political"
]
},
{
"long_name": "Buenos Aires",
"short_name": "CABA",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "Argentina",
"short_name": "AR",
"types": [
"country",
"political"
]
}
],
"formatted_address": "Buenos Aires, Argentina",
"geometry": {
"bounds": {
"northeast": {
"lat": -34.5265464,
"lng": -58.33514470000001
},
"southwest": {
"lat": -34.7051011,
"lng": -58.5314522
}
},
"location": {
"lat": -34.6036844,
"lng": -58.3815591
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": -34.5265464,
"lng": -58.33514470000001
},
"southwest": {
"lat": -34.7051011,
"lng": -58.5314522
}
}
},
"place_id": "ChIJvQz5TjvKvJURh47oiC6Bs6A",
"types": [
"locality",
"political"
]
}
],
"status": "OK"
}
entonces..si quisieramos imprimir solo la direccion formateada, la latitud y la longitud hariamos esto:
let results = response.data.results[0];
let formatted_address = results.formatted_address;
let lat = results.geometry.location.lat;
let lng = results.geometry.location.lng;
console.log(`Direccion: ${formatted_address}`);
console.log(`Longitud: ${lng}`);
console.log(`Latitud: ${lat}`);
///////////////////////// refactorizando el codigo//////////////////////////////////
vamos a crear una funcion getLugar para que nos devuelva un objeto con las propiedades
direccion,latitud y longitud. Y lo escribiremos en un archivo aparte (lugar/lugar.app) dentro de un carpeta llamada lugar.
lugar.js:
const axios=require('axios');
const getLugar = async (direccion) => {
let addressEncoded = encodeURI(direccion);
let apiKey = "AIzaSyBlRKjSjinm507yd_qWAjvzojhWND7Ip-w";
let resp = await axios.get(`https://maps.googleapis.com/maps/api/geocode/json?address=${addressEncoded}&key=${apiKey}`);
if(resp.data.status === "ZERO_RESULTS"){
throw new Error("No se encontraron resultados");
}
let results = resp.data.results[0];
return {
direccion: results.formatted_address,
longitud:results.geometry.location.lng,
latitud:results.geometry.location.lat
}
}
module.exports = {
getLugar
}
y en app.js
const argv=require('yargs').options(
{
direccion:{
alias:'d',
demand:true,
desc: 'direccion a traer el clima'
}
}).
argv;
const { getLugar } = require('./lugar/lugar.js');
getLugar(argv.direccion)
.then(resp=>{
console.log(resp)
}).catch(e=>console.log(e));
Suscribirse a:
Enviar comentarios (Atom)
linux ubuntu mint actualizar chrome
desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable
-
por consola y desde la raiz de tu proyecto php artisan --version
-
en nuestro proyecto creamos una carpeta llamada donde estaran todas nuestras clases, por ejemplo una llamada: MiApp adentro de esta irian b...
-
Integridad al nivel de la base de datos Oracle Oracle valida la integridad de la base de datos y presenta los siguientes mensajes de erro...
No hay comentarios:
Publicar un comentario