如何使用 JavaScript 在 Telegram 中设计天气机器人?
Telegram bot 可用于了解任何城市、州、国家/地区的完整天气详细信息,而无需使用其他应用程序。 Telegram 提供了一堆 API 方法来执行不同的功能。您可以使用电报机器人 API 创建一个聊天机器人,该聊天机器人根据发送给机器人的参数和命令返回有关城市、州或国家/地区的基于天气的信息。
先决条件:
- 了解 JavaScript 和设置节点环境。
- 最新版本的Node(版本> 10)
- 最新版本的 npm(版本 > 6)
检查系统中是否存在 Node 和 npm 的命令:
$ npm --v
6.14.5
$ node --version
v10.15.0
创建 Bot 并获取 API 令牌:
- 打开电报应用程序并搜索@BotFather。
- 单击开始按钮或发送“/start”。
- 然后发送“/newbot”消息来设置名称和用户名。
- 然后 BotFather 会给你一个 API 令牌。
获取天气 API 密钥:
- 转到打开天气地图网站。
- 根据限制创建一个帐户。
- 您将收到自己的 API 密钥。
- 如果您想使用不同的参数而不是城市名称,请阅读文档。
模块安装:
安装requests和node-telegram-bot-api (Node.js 模块与官方 Telegram Bot API 交互)
$ npm install --save requests node-telegram-bot-api
文件名:weather.js
Javascript
// Requiring modules
var TelegramBot = require('node-telegram-bot-api')
var request = require('request')
// Token obtained from bot father
var token = "YOUR_TELEGRAM_BOT_TOKEN"
var 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
var city = match[1];
var chatId = msg.chat.id
var query =
'http://api.openweathermap.org/data/2.5/weather?q='
+ 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)
var temp = Math.round((parseInt(
res.main.temp_min) - 273.15), 2)
// Kelvin to celsius and then round
// off and conversion to atm
var pressure = Math.round(parseInt(
res.main.pressure) - 1013.15)
var rise = new Date(parseInt(
res.sys.sunrise) * 1000);
var 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
}
})
})
运行程序的步骤:使用以下命令运行weather.js文件:
$ node weather.js
转到您的机器人并输入/city city-name并查看结果。
输出: