Telegram 机器人 - 接收照片 URL
Telegram bot - receive photo URL
当用户通过 Telegram 机器人发送图像时,它有什么方法可以获取图像 URL?或者我只需要将图像保存在某处?
在您收到的消息数组中,您可以找到密钥 photo
。
在那里你会发现多个具有以下格式的数组
"file_id" : "XXXX",
"file_size" : 1107,
"width" : 90,
"height" : 51
您需要从其中一个数组中取出 file_id
。然后,您可以通过 url https://api.telegram.org/bot<token>/getFile?file_id=<file_id>
上的简单获取请求 file_path
您将收到如下所示的数组
"ok" : true,
"result" : {
"file_id" : "XXXX",
"file_size" : 27935,
"file_path" : "photo\/file_1.jpg"
}
根据结果你需要 file_path
然后你得到了图像位置 https://api.telegram.org/file/bot<token>/<file_path>
我知道我来晚了,但我研究它的时间太长了。这是答案:
const TelegramBot = require('node-telegram-bot-api');
let bot = new TelegramBot(token, {polling: true});
并且下载它的功能需要文件 ID,它包含在消息中
var file_id = (msg.photo[msg.photo.length-1].file_id);
var downloadDir = './images';
let something = ''
var https = require('https')
bot.getFileLink(fileId).then( async (fileUri) => {
var base64Img = require('base64-img');
let time = process.hrtime();
let extension = fileUri.split('.').pop();
let newName = `${time[0]}${time[1]}.${extension}`;
let file = fs.createWriteStream(`${downloadDir}/${newName}`);
let request = await https.get(fileUri, (response) => {
response.pipe(file);
});
file.on('finish', () =>{
console.log('msg.text ='/images/'+newName')
})
//
});
};
主要功能是bot.getFileLink(fileId)。希望它会对阅读本文的人有所帮助:)
这是一个三步过程
首先,当用户发送图像时,您的机器人会得到一个 JSON 结构,如下所示:
Array
(
[update_id] => 820488009
[message] => Array
(
[message_id] => 11338
[from] => Array
(
[id] => xxxxxx
[is_bot] =>
[first_name] => ANSB
[language_code] => fr
)
[chat] => Array
(
[id] => 333333333
[first_name] => ANSB
[type] => private
)
[date] => 1606316785
[photo] => Array
(
[0] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA20AA6SRAAIeBA
[file_unique_id] => AQADARV2ShcAA6SRAAI
[file_size] => 34888
[width] => 320
[height] => 240
)
[1] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA3gAA6WRAAIeBA
[file_unique_id] => AQADARV2ShcAA6WRAAI
[file_size] => 204583
[width] => 800
[height] => 600
)
[2] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA3kAA6KRAAIeBA
[file_unique_id] => AQADARV2ShcAA6KRAAI
[file_size] => 372915
[width] => 1280
[height] => 960
)
)
)
)
如您所见,Telegram 创建的图像分辨率较低。如果原始图像很小,您可以只拥有原始图像。如果它是中等的,你会得到两个。在这里你可以看到我有 3 张图片(原来是大的 1280*960)。
所以你必须检查图像数组的大小 wih (eg i PHP)
$nbr_image = count($jsondata['message']['photo']);
为了读取您选择的 file_id 所以最小、最大等的 oe...注意,id 是 不是 file_unique_id 但是大了所以 file_id.
请注意,如果用户一次发送多于一张图片,您将针对每张图片收到一条消息。所以每条消息都是关于一张图片,有多种分辨率。
一旦您的机器人拥有 file_id,您必须调用 Telegram 发送 file_id。该调用是一个基本调用:
https://api.telegram.org/bot<token_of_your_bot>/getFile?file_id=<file_id of the picture>
你得到一个 JSON 与:
{"ok":true,
"result":
{"file_id":"AgACAgEAAxkBAAIsUV--hZoxZ5_ctnfbVa0zFWjRtMYUAALyqDEbw8TxRdkTI6iDNvHUmKQSMAAEAQADAgADeAADsx8EAAEeBA",
"file_unique_id":"AQADmKQSMAAEsx8EAAE",
"file_size":41597,
"file_path":"photos/file_0.jpg"
}
所以 file_id、权重(注意你不会返回像素大小!)和路径的副本。
之后,只需使用如下路径进行调用:
https://api.telegram.org/file/bot<token_of_your_bot>/<file_path from the JSON>
你会得到照片
一点:每次我得到一张JSON多于一种分辨率的图片,大的在最后。但我在文档中找不到任何关于该事实的信息。所以我注意到你不能在索引 [0]...
中有大的
当用户通过 Telegram 机器人发送图像时,它有什么方法可以获取图像 URL?或者我只需要将图像保存在某处?
在您收到的消息数组中,您可以找到密钥 photo
。
在那里你会发现多个具有以下格式的数组
"file_id" : "XXXX",
"file_size" : 1107,
"width" : 90,
"height" : 51
您需要从其中一个数组中取出 file_id
。然后,您可以通过 url https://api.telegram.org/bot<token>/getFile?file_id=<file_id>
file_path
您将收到如下所示的数组
"ok" : true,
"result" : {
"file_id" : "XXXX",
"file_size" : 27935,
"file_path" : "photo\/file_1.jpg"
}
根据结果你需要 file_path
然后你得到了图像位置 https://api.telegram.org/file/bot<token>/<file_path>
我知道我来晚了,但我研究它的时间太长了。这是答案:
const TelegramBot = require('node-telegram-bot-api');
let bot = new TelegramBot(token, {polling: true});
并且下载它的功能需要文件 ID,它包含在消息中
var file_id = (msg.photo[msg.photo.length-1].file_id);
var downloadDir = './images';
let something = ''
var https = require('https')
bot.getFileLink(fileId).then( async (fileUri) => {
var base64Img = require('base64-img');
let time = process.hrtime();
let extension = fileUri.split('.').pop();
let newName = `${time[0]}${time[1]}.${extension}`;
let file = fs.createWriteStream(`${downloadDir}/${newName}`);
let request = await https.get(fileUri, (response) => {
response.pipe(file);
});
file.on('finish', () =>{
console.log('msg.text ='/images/'+newName')
})
//
});
};
主要功能是bot.getFileLink(fileId)。希望它会对阅读本文的人有所帮助:)
这是一个三步过程 首先,当用户发送图像时,您的机器人会得到一个 JSON 结构,如下所示:
Array
(
[update_id] => 820488009
[message] => Array
(
[message_id] => 11338
[from] => Array
(
[id] => xxxxxx
[is_bot] =>
[first_name] => ANSB
[language_code] => fr
)
[chat] => Array
(
[id] => 333333333
[first_name] => ANSB
[type] => private
)
[date] => 1606316785
[photo] => Array
(
[0] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA20AA6SRAAIeBA
[file_unique_id] => AQADARV2ShcAA6SRAAI
[file_size] => 34888
[width] => 320
[height] => 240
)
[1] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA3gAA6WRAAIeBA
[file_unique_id] => AQADARV2ShcAA6WRAAI
[file_size] => 204583
[width] => 800
[height] => 600
)
[2] => Array
(
[file_id] => AgACAgEAAxkBAAIsSl--cvE_bez8g1Kzbk6LsR4JZOJWAALxqDEbw8TxRQpbG7Np1dvbARV2ShcAAwEAAwIAA3kAA6KRAAIeBA
[file_unique_id] => AQADARV2ShcAA6KRAAI
[file_size] => 372915
[width] => 1280
[height] => 960
)
)
)
)
如您所见,Telegram 创建的图像分辨率较低。如果原始图像很小,您可以只拥有原始图像。如果它是中等的,你会得到两个。在这里你可以看到我有 3 张图片(原来是大的 1280*960)。 所以你必须检查图像数组的大小 wih (eg i PHP)
$nbr_image = count($jsondata['message']['photo']);
为了读取您选择的 file_id 所以最小、最大等的 oe...注意,id 是 不是 file_unique_id 但是大了所以 file_id.
请注意,如果用户一次发送多于一张图片,您将针对每张图片收到一条消息。所以每条消息都是关于一张图片,有多种分辨率。
一旦您的机器人拥有 file_id,您必须调用 Telegram 发送 file_id。该调用是一个基本调用:
https://api.telegram.org/bot<token_of_your_bot>/getFile?file_id=<file_id of the picture>
你得到一个 JSON 与:
{"ok":true,
"result":
{"file_id":"AgACAgEAAxkBAAIsUV--hZoxZ5_ctnfbVa0zFWjRtMYUAALyqDEbw8TxRdkTI6iDNvHUmKQSMAAEAQADAgADeAADsx8EAAEeBA",
"file_unique_id":"AQADmKQSMAAEsx8EAAE",
"file_size":41597,
"file_path":"photos/file_0.jpg"
}
所以 file_id、权重(注意你不会返回像素大小!)和路径的副本。
之后,只需使用如下路径进行调用:
https://api.telegram.org/file/bot<token_of_your_bot>/<file_path from the JSON>
你会得到照片
一点:每次我得到一张JSON多于一种分辨率的图片,大的在最后。但我在文档中找不到任何关于该事实的信息。所以我注意到你不能在索引 [0]...
中有大的