Telegram bot can be used to know the complete weather details of any city, state, a country without going using another application. Telegram provides a bunch of API methods to perform different functions. You can use telegram bot API to create a Chatbot that returns weather-based information about a city, state, or country based on the parameters and command sent to the bot.
Prerequisites:
- Knowledge of JavaScript and setting up a node environment.
- The latest version of Node (version > 10)
- The latest version of npm (version > 6)
Command to check if Node and npm are present in your system:
$ npm --v 6.14.5 $ node --version v10.15.0
Creating Bot and getting API token:
- Open the telegram app and search for @BotFather.
- Click on the start button or send “/start”.
- Then send “/newbot” message to set up a name and a username.
- The BotFather will then give you an API token.
Getting Weather API key:
- Go to the Open weather map website.
- Create an account as per the limit.
- You will receive your own API key.
- Read the documentation if you want to use different parameters instead of the city name.
Modules Installation:
Install requests and node-telegram-bot-api (Node.js module to interact with the official Telegram Bot API)
$ npm install --save requests node-telegram-bot-api
Filename: weather.js
// Requiring modules const TelegramBot = require( 'node-telegram-bot-api' )
const request = require( 'request' )
// Token obtained from bot father const token = "YOUR_TELEGRAM_BOT_TOKEN"
const bot = new TelegramBot(token, { polling: true });
// Create a bot that uses 'polling' to // fetch new updates bot.on( "polling_error" , (err) => console.log(err));
// The 'msg' is the received Message from user and // 'match' is the result of execution above // on the text content bot.onText(/\/city (.+)/, function (msg, match) {
// Getting the name of movie from the message
// sent to bot
const city = match[1];
const chatId = msg.chat.id
const query =
+ city + '&appid=YOUR_WEATHER_API_KEY'
// Key obtained from openweathermap API
request(query, function (error, response, body) {
if (!error && response.statusCode == 200) {
bot.sendMessage(chatId,
'_Looking for details of_ ' + city
+ '...' , { parse_mode: "Markdown" })
.then(msg) {
res = JSON.parse(body)
const temp = Math.round((parseInt(
res.main.temp_min) - 273.15), 2)
// Kelvin to celsius and then round
// off and conversion to atm
const pressure = Math.round(parseInt(
res.main.pressure) - 1013.15)
const rise = new Date(parseInt(
res.sys.sunrise) * 1000);
const set = new Date(parseInt(
res.sys.sunset) * 1000);
// Unix time to IST time conversion
bot.sendMessage(chatId, '**** '
+ res.name + ' ****\nTemperature: '
+ String(temp) + '°C\nHumidity: ' +
res.main.humidity + ' %\nWeather: '
+ res.weather[0].description +
'\nPressure: ' + String(pressure)
+ ' atm\nSunrise: ' +
rise.toLocaleTimeString() +
' \nSunset: ' +
set.toLocaleTimeString() +
'\nCountry: ' + res.sys.country)
}
// Sending back the response from
// the bot to user. The response
// has many other details also
// which can be used or sent as
// per requirement
}
})
}) |
Steps to run the program: Run the weather.js file using the following command:
$ node weather.js
Go to your bot and type /city city-name and see the results.
Output: