Consulta el tiempo desde tu bot de Telegram

Consulta el tiempo desde tu bot de Telegram

Hoy te vamos a enseñar a como añadir a tu bot la funcion del tiempo, dicha función devolverá información climatológica de tu ciudad o del sitio que le indiques. Para ello utilizaremos una API que nos proporcionará acceso a dichos datos sin la necesidad de obtener un token para disfrutar del servicio.

La API que instalaremos se llama Weather-js. Esta API no tiene mucha documentación, por lo que crearemos una función básica devolviendo información del día actual. También podría devolver datos del tiempo de toda la semana pero dado el trabajo que lleva hacerlo, haremos simplemente la función básica.

Instalación de la API y su código

Para instalar la API, en el terminal añadimos lo siguiente: npm install weather-js. Ahora procederemos a crear el código e intentaremos que sea legible para el lector.

const TelegramBot = require('node-telegram-bot-api');
const token = 'TU-TOKEN';
const bot = new TelegramBot(token, { polling: true });
const weather = require('weather-js');

bot.onText(/^\/clima (.+)/, function(msg, match){
    var chatId = msg.chat.id;
    var ciudad = match[1];

    var opciones = {
        search: ciudad, // lugar es la ciudad que el usuario introduce
        degreeType: 'C', // Celsius
        lang: 'es-ES' // Lenguaje en el que devolverá los datos
    }

    weather.find(opciones, function(err, result){

        if (err){ // Si ocurre algun error...
            console.log(err); // ... nos lo muestra en pantalla

        } else {
            console.log(result[0]); // Visualizamos el primer resultado del array
            
            bot.sendMessage(chatId, "Lugar: " + result[0].location.name +
            "\n\nTemperatura: " + result[0].current.temperature + "ºC\n" +
            "Visibilidad: " + result[0].current.skytext + "\n" +
            "Humedad: " + result[0].current.humidity + "%\n" +
            "Dirección del viento: " + result[0].current.winddisplay + "\n"
            ,{parse_mode: 'Markdown'});

        }
    })
});

Quizá hayas visto que hemos utilizado otras propiedades como match y (.+). Ambas sirven para recoger el texto que el usuario introduce. Obviamente, hay que declarar la variable, al igual que var ciudad = match[1] para poder utilizarla en el método de la API de clima. En definitiva, quedaría algo similar a esto:

resultado-weather-js

Como información, result también devuelve el tiempo de la semana en curso con forecast pero para llegar a ello debemos hacer uso de un bucle e iterar.

Si tienes dudas o no entiendes alguna parte del código, puedes unirte a nuestro grupo de Telegram donde te podemos ayudar.