使用电报机器人从 HTTP GET 请求发送结果

send result from HTTP GET request with a telegram bot

编辑:在我的 raspberry pi 上只测试 GET 请求的代码(没有电报 api)。我没有发送 tg 消息,而是将其写入文件。我发现魔法发生在这部分:

req.end(function (res) {
    if (res.error) throw new Error(res.error);

    console.log(res.body);
  });

console.log(res.body)给我这个输出(这是表/列的正确名称):

{ test: 
   { columns: [ 'eventID', 'event_desc' ],
     records: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ] } }

但是如果我用 fs.appendFile("getrequest.log",res.body + "\n"); 替换它,我只会得到:

[object Object]

知道为什么当我使用另一个函数时结果会改变吗?


原问题:

我是 nodejs 和电报机器人的新手 api。

我正在尝试向 URL 发出 HTTP GET 请求,其中 returns 数据采用 JSON 格式。我希望机器人将该结果发送到聊天中。

我的机器人 运行 在 openshift 上,使用 this guide and code sample. To figure out the code for the GET request, i've used postman 用 NodeJS 编写。它已经帮助我向 URL 提出了 POST 请求。所以我正在使用 unirest 和这段代码:

bot.onText(/\/list (.+)/, function (msg, match) {

  var fromId = msg.chat.id;
  var eventDb = match[1];
  var eventURL = "https://api.italianrockmafia.ch/api.php/";
  eventURL += eventDb;
  var unirest = require("unirest");

  var req = unirest("GET", eventURL);

  req.headers({
    "cache-control": "no-cache"
  });

  req.end(function (res) {
    if (res.error) throw new Error(res.error);

    console.log(res.body);
  });
  bot.sendMessage(fromId, req);
});

所以我不确定我必须在 bot.sendMessage(); 中使用哪个值以及我必须在哪里使用这个函数。我尝试了几种组合(使用 reqresres.body)但是其中 none 有效。

如果我像上面那样使用代码,日志会显示 message ist empty。 当我将最后几行更改为:

req.end(function (res) {
    bot.sendMessage(fromId, res);
   if (res.error) throw new Error(res.error);

   console.log(res.body);
 }); 

日志只在它自己的电报模块的文件中抛出一个 "Wrong file identifier/HTTP URL specified"。此消息显示在每个命令中(即使是正在运行的命令)。

所以我的两个问题是:

我在这两个问题上真的很挣扎,所以非常感谢您的帮助!

我认为这与 inputfile 限制有关

Provide Telegram with an HTTP URL for the file to be sent. Telegram will download and send the file. 5 MB max size for photos and 20 MB max for other types of content.

原来我只是不知道如何处理 JSON。第 8 层错误...