使用电报机器人从 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();
中使用哪个值以及我必须在哪里使用这个函数。我尝试了几种组合(使用 req
、res
、res.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"。此消息显示在每个命令中(即使是正在运行的命令)。
所以我的两个问题是:
- 我需要发送哪个值?
- 我需要把
bot.sendMessage
放在代码的什么地方?
我在这两个问题上真的很挣扎,所以非常感谢您的帮助!
我认为这与 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 层错误...
编辑:在我的 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();
中使用哪个值以及我必须在哪里使用这个函数。我尝试了几种组合(使用 req
、res
、res.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"。此消息显示在每个命令中(即使是正在运行的命令)。
所以我的两个问题是:
- 我需要发送哪个值?
- 我需要把
bot.sendMessage
放在代码的什么地方?
我在这两个问题上真的很挣扎,所以非常感谢您的帮助!
我认为这与 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 层错误...