📜  如何使用 JavaScript 在 Telegram 中设计天气机器人?

📅  最后修改于: 2022-05-13 01:56:41.336000             🧑  作者: Mango

如何使用 JavaScript 在 Telegram 中设计天气机器人?

Telegram bot 可用于了解任何城市、州、国家/地区的完整天气详细信息,而无需使用其他应用程序。 Telegram 提供了一堆 API 方法来执行不同的功能。您可以使用电报机器人 API 创建一个聊天机器人,该聊天机器人根据发送给机器人的参数和命令返回有关城市、州或国家/地区的基于天气的信息。

先决条件:

  1. 了解 JavaScript 和设置节点环境。
  2. 最新版本的Node(版本> 10)
  3. 最新版本的 npm(版本 > 6)

检查系统中是否存在 Node 和 npm 的命令:

$ npm --v
6.14.5

$ node --version
v10.15.0

创建 Bot 并获取 API 令牌:

  • 打开电报应用程序并搜索@BotFather。
  • 单击开始按钮或发送“/start”。
  • 然后发送“/newbot”消息来设置名称和用户名。
  • 然后 BotFather 会给你一个 API 令牌。

获取天气 API 密钥:

  • 转到打开天气地图网站。
  • 根据限制创建一个帐户。
  • 您将收到自己的 API 密钥。
  • 如果您想使用不同的参数而不是城市名称,请阅读文档。

模块安装:

安装requestsnode-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并查看结果。

输出:

使用 Telegram 机器人的天气信息