Node y JavaScript en el terminal de Linux

Hace aproximadamente escribí un artículo sobre como ejecutar JavaScript en el terminal en Ubuntu. Esta desde luego es la solución nativa para implementar aplicaciones utilizando JavaScript. Sin embargo, no es la única solución, y es posible, que no sea la más óptima dependiendo de lo que queramos hacer. Tienes otra opción para desarrollar tus scripts y aplicaciones en Ubuntu y otras distribuciones. Se trata de utilizar Node y JavaScript en terminal. Lo cierto, es que es realmente sencillo a la par que potente. Eso si, no es tan rápido como el uso de GJS, y probablemente haga un mayor uso de recursos. Sin embargo, como verás mas adelante, puede tener sus ventajas realizar tus scripts con Node y JavaScript en el terminal de Linux.

Así, implementar un script para el terminal, utilizando Node y JavaScript en el terminal, no es nada complicado, y tiene sus ventajas. Si todavía no tienes conocimientos de programación, desde luego iniciarte con JavaScript tiene grandes ventajas. Se trata de un lenguaje de programación ampliamente extendido. No solo se utiliza en el front-end de páginas web. Ahora se utiliza para prácticamente cualquier cosa que te puedas imaginar. Y si a JavaScript le unimos Node JS, ya tienes la combinación ganadora.

En este artículo, al igual que hice en el artículo de hace un año, te voy a indicar como puedes crear tu propio script utilizando Node y JavaScript en el terminal. Para que veas el potencial, y a la vez lo sencillo que es, harás conmigo un par de scripts. El primero será para mandar un mensaje a Telegram, y con ello ganar otro punto a mi favor en la apuesta. Mientras que el segundo imprimirá en pantalla las últimas 10 entradas de atareao.es.

Node y JavaScript en el terminal de Linux

Node y JavaScript en el terminal de Linux

La ventaja de utilizar Node frente a GJS es que hay muchos más módulos en el primero que en el segundo. Por otro lado, GJS se circunscribe a GNOME, aunque entiendo que lo podrías instalar en otros entornos de escritorio, pero lo cierto es que está pensado para ese.

Instalar Node.js

El primer paso necesario e imprescindible es instalar Node.js. Para ello es recomendable que instales el repositorio. En el momento de escribir este artículo, existen dos versiones la 11.12.0, y la 10.15.3 que es la última versión LTS. Para añadir el repositorio de la 11.X, tienes que ejecutar las siguientes órdenes en un terminal,

curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt install -y nodejs

Mientras que si te decantas por la LTS, las líneas a ejecutar son las siguientes,

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs

Una vez hemos añadido uno u otro repositorio, nos toca instalar Node.js, para ello, ejecutaremos la siguiente línea en el terminal, 🌡

sudo apt install nodejs

Para saber la versión en la que nos encontramos de Node.js, ejecuta node -v. En mi caso el resultado es el siguiente, v10.15.3. Por otro lado también debes conocer la versión de npm que tienes instalada. Para ello, al igual que en el otro caso, ejecuta npm -v que en mi caso me indica la 6.4.1.

Si no conoces lo que es npm, indicarte que es lo que apt a Ubuntu. Simplemente se trata de Node Package Manager, es decir el gestor de paquetes de Node.js.

Vamos a por el script

El primer paso será crear un nuevo directorio que en mi caso llamaré telegramNodeBot, tu le puedes poner el nombre que consideres, como no puede ser de otra manera. Entramos dentro del directorio y ejecutamos npm init. Todo esto se resumen en lo siguiente,

mkdir telegramNodeBot
cd telegramNodeBot
npm init

Axios

A continuación, tienes que instalar una librería que te va a ser de gran utilidad. Se trata de axios. Un cliente HTTP que puedes utilizar tanto en la web como en Node.js. Además de esta característica que ya de por si es interesante, soporta promesas, me refiero a la API Promise.

Para instalar esta librería, es tan sencillo como que dentro del directorio telegramNodeBot ejecutes la orden,

npm install axios

Con esta sencilla instrucción, ya tienes la librería disponible para su uso. Así, por ejemplo, para leer la página de Google, tan solo tienes que hacer el siguiente script,

#!/usr/bin/env node

const axios = require('axios');
axios.get('https://www.google.es')
    .then(function(response){
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    })
    .then(function () {
        console.log('Aqui');
    });

Nuestro script se llamará index.js. Y le puedes dar permisos de ejecución, con la siguiente orden,

chmod +x index.js

Para ejecutarlo tan solo tienes que escribir ./index.js.

De lo sencillo que es casi da verguenza, ¿no te parece?.

Enviar un mensaje a Telegram

Aprovechando la sencillez de todo esto, vamos a enviar un mensaje utilizando un bot de Telegram. De paso, haremos nuevamente un bot en una sola línea. Eso si, con la ayuda de esta librería externa que hemos visto, y que nos simplifica tanto el trabajo.

#!/usr/bin/env node
const axios = require('axios');

const TOKEN = '123456789:ABCDefghIJKLmnop12345QRST6789UVWXYZ';
const TELEGRAM = 'https://api.telegram.org/bot$TOKEN';
const TEST_GROUP = '-123456789';
var url = TELEGRAM + TOKEN + '/sendMessage'
axios.post(url, {chat_id: TEST_GROUP, text: 'Hola. Bienvenido a Node.js'})
.then(function(response){
    console.log(response.data);
});

De nuevo para mandar el mensaje tienes que ejecutar,

./index.js

Que conste, que todo esto se puede quedar en una única línea. Sin embargo, he preferido dejarlo tal y como lo ves para que sea mas sencillo de leer. Se trata de una cuestión de legibilidad.

Leer las últimas entradas en atareao.es

Evidentemente y como no podía ser de otra forma, también es posible realizar llamadas tipo GET. En este caso, y como he adelanta en la introducción, lo que vas a hacer es mostrar por pantalla las últimas 10 entradas que puedes encontrar en atareao.es. Así, el código sería como puedes ver a continuación,

#!/usr/bin/env node
const axios = require('axios');
url = 'https://atareao.es/';
axios.get(url)
.then(function(response){
    console.log(response);
});

Con esto vemos todo el contenido de la página, sin embargo, si lo que queremos es ver exclusivamente las últimas 10 entradas, tenemos que hacer algunos sencillos cambios,

#!/usr/bin/env node
const axios = require('axios');
url = 'https://atareao.es/';
axios.get(url)
.then(function(response){
    response.data.forEach(function(item){
        console.log(item.title.rendered, item.link);
    });
});

No me puedes negar, es brutalmente sencillo.

Pasando argumentos en la línea de comandos

Si tu objetivo es hacer una herramienta para utilizar en la línea de comandos, se hace necesario, poder pasar argumentos a tu aplicación o script. El paso de argumentos también es relativamente sencillo. Así, nuestro script empezaría como puedes ver a continuación,

#!/usr/bin/env node
const [,, ...args] = process.argv

Esto es así, por que los dos primeros parámetros son node seguido por el nombre del script que hemos realizado. A continuación se encuentran todos los parámetros que le hemos pasado.

Así, por ejemplo, podemos combinar el paso de argumentos con el ejemplo anterior, y crear un sencillo script que nos permita ver el contenido de cualquier página web directamente desde el terminal. Eso si, lo vas a ver en HTML, pero, no se trata mas que de un ejemplo.

#!/usr/bin/env node
const [,, ...args] = process.argv;
if(args.length > 0){
    let url = args[0];
    axios.get(url)
    .then(function(response){
        console.log(response.data);
    });
}

En este caso, la ejecución del script será,

./index.js https://atareao.es

Esto mismo lo puedes hacer con tu bot de Telegram, de forma que dejes como argumento el mensaje que quieres enviar. También podrías dejar como parámetro el chat_id. pero por simplificar. Así nuestro bot quedaría como ves a continuación,

#!/usr/bin/env node
const axios = require('axios');

const TOKEN = '123456789:ABCDefghIJKLmnop12345QRST6789UVWXYZ';
const TELEGRAM = https://api.telegram.org/bot$TOKEN';
const TEST_GROUP = '-123456789';
const [,, ...args] = process.argv;
if(args.length > 0){
    let url = TELEGRAM + TOKEN + '/sendMessage'
    axios.post(url, {chat_id: TEST_GROUP, text: args[0]})
    .then(function(response){
        console.log(response.data);
    });
}

Así, para ejecutar, y enviar un mensaje de Telegram, simplemente tenemos escribir lo siguiente,

./index.js "Esto es un mensaje de prueba"

Es importante las comillas, por que en otro caso solo te enviará la primera palabra, Esto… y este no es el objetivo, claro.

Mapeando nuestro comando

Está bien esto de poder ejecutar nuestro script con ./index.js. Sin embargo, en Node tienes la posibilidad de mapear el comando. Para ello, tienes que editar el archivo package.json, y añadir un nuevo apartado llamado bin. Haciendo esto, tu archivo package.json tendrá un aspecto como el que ves a continuación,

{
  "name": "telegramnodebot",
  "version": "1.0.0",
  "description": "Un bot para Telegram realizado con Node.js",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Lorenzo Carbonell",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.18.0"
  },
  "bin": {
    "msg": "./index.js"
  }
}

El siguiente paso es que podamos ejecutar nuestro script desde cualquier punto de nuestro sistema operativo. Para ello tan solo tenemos que ejecutar,

sudo npm link

Y con esto ya lo puedes probar desde cualquier sitio. A partir de este momento, puedes escribir,

msg "Este es un mensaje de prueba"

Y te enviará un mensaje a tu grupo de Telegram con ese contenido. Esto con independencia del directorio en el que te encuentres.

Por último, si ya te has cansado o simplemente quieres modificarlo, puedes desenlazarlo. Para ello, ejecuta,

sudo npm unlink

Una nota importante, tanto la opción de link como la de unlink las debes ejecutar desde el directorio donde se encuentra tu script.

Conclusión sobre Node y JavaScript en el terminal

Como has podido ver es relativamente sencillo implementar tus scripts de Node y JavaScript en el terminal de Linux. No tienen ninguna complicación.

En este artículos has podido ver dos ejemplos, que seguro que te han abierto los ojos a las posibilidades que te ofrece Node y JavaScript en el terminal.

Como he comentado en la introducción, JavaScript es un lenguaje de programación con una importante tendencia de crecimiento, con lo que no está de mas hacer tus scripts en el terminal utilizando esta tecnología. O al menos intentarlo.


Más información,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *