如何使用 Telegram API 接收图片?
How to receive images with the Telegram API?
是否可以接收任何用户发送给机器人的图像(并将其存储在服务器上)?
如果发送了图片,我会收到此 JSON post。这是对 Telegram Bot-API 的 link 描述。不知道能不能收全图:https://core.telegram.org/bots/api#available-types
{"update_id":XXXXX,
"message":{"message_id":2222,"from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"chat":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"date":1435704055,"forward_from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"forward_date":1435703471,"photo":[{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABI5s-WWq46dqiR0AAgI","file_size":998,"width":51,"height":90},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABHax4HvxYqktiB0AAgI","file_size":9912,"width":180,"height":320},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABNzzDwp3sT2whx0AAgI","file_size":41020,"width":450,"height":800},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABE0Gg-AefJ7Yhh0AAgI","file_size":66058,"width":720,"height":1280}]}}
Telegram 现在支持下载文件 getFile
:
您可以在 api 文档中看到它:https://core.telegram.org/bots/api#getfile
可以从 Telegram 服务器下载图片。
这样做:
1.使用getFile
api
获取文件
//Telegram link
$telegram_link = 'https://api.telegram.org/bot' . $this->tg_configs['api_key'] . '/getFile?file_id=' . $photo['file_id'];
2。获取文件路径
//创建guzzle客户端
$guzzle_client = new GuzzleClient();
//Call telegram
$request = $guzzle_client->get($telegram_link);
//Decode json
$json_response = json_decode($request->getBody(), true);
if ($json_response['ok'] == 'true') {
//Telegram file link
$telegram_file_link = 'https://api.telegram.org/file/bot' . $this->tg_configs['api_key'] . '/' . $json_response['result']['file_path'];
3。如果使用 PHP 使用 Intervention/Image
下载图像并将其保存在您的服务器上。
//Build upload path
$upload_path = public_path() . \Config::get('media::media.uploadPath');
//Get image
$image = $thumbnail = InterventionImage::make($telegram_file_link);
//Get mime
$mime = $image->mime();
if ($mime == 'image/jpeg') {
$extension = '.jpg';
} elseif ($mime == 'image/png') {
$extension = '.png';
} elseif ($mime == 'image/gif') {
$extension = '.gif';
} else {
$extension = '';
}//E# if else statement
//Resize images
$image->resize(\Config::get('media::media.mainWidth'), \Config::get('media::media.mainHeight'));
$thumbnail->resize(\Config::get('media::media.thumbnailWidth'), \Config::get('media::media.thumbnailHeight'));
//Build media name
$media_name = \Str::random(\Config::get('media::media.mediaNameLength')) . $extension;
//Save images
$image->save($upload_path . '/' . $media_name);
$thumbnail->save($upload_path . '/thumbnails/' . $media_name);
接受的答案很好。但这里有一个更详细的答案。在您获得实际图像文件之前,涉及三个主要步骤。 1) 从 Telegram 请求 file_id
。 2) 加载 Guzzle 客户端。 3) 从 Telegram 请求 file_path
。请密切注意下面的不同 URL 路径。
// get file id
$id = $update['message']['photo'][0]['file_id'];
$file_id = "https://api.telegram.org/bot" .
config('app.telegram_api_key') . "/getFile?file_id=" . $id;
// guzzle client
$guzzle_client = new GuzzleClient();
$request = $guzzle_client->get($file_id);
$response = json_decode($request->getBody(),true);
// get file path
$file_url = "https://api.telegram.org/file/bot" .
config('app.telegram_api_key') . "/" . $response['result']['file_path'];
是否可以接收任何用户发送给机器人的图像(并将其存储在服务器上)?
如果发送了图片,我会收到此 JSON post。这是对 Telegram Bot-API 的 link 描述。不知道能不能收全图:https://core.telegram.org/bots/api#available-types
{"update_id":XXXXX,
"message":{"message_id":2222,"from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"chat":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"date":1435704055,"forward_from":{"id":XXXXX,"first_name":"Christoph","last_name":"XXXXX"},"forward_date":1435703471,"photo":[{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABI5s-WWq46dqiR0AAgI","file_size":998,"width":51,"height":90},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABHax4HvxYqktiB0AAgI","file_size":9912,"width":180,"height":320},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABNzzDwp3sT2whx0AAgI","file_size":41020,"width":450,"height":800},{"file_id":"AgADAgADmaoxG9KknwF4O978o3EMqb_EWSoABE0Gg-AefJ7Yhh0AAgI","file_size":66058,"width":720,"height":1280}]}}
Telegram 现在支持下载文件 getFile
:
您可以在 api 文档中看到它:https://core.telegram.org/bots/api#getfile
可以从 Telegram 服务器下载图片。
这样做:
1.使用getFile
api
//Telegram link
$telegram_link = 'https://api.telegram.org/bot' . $this->tg_configs['api_key'] . '/getFile?file_id=' . $photo['file_id'];
2。获取文件路径 //创建guzzle客户端 $guzzle_client = new GuzzleClient();
//Call telegram
$request = $guzzle_client->get($telegram_link);
//Decode json
$json_response = json_decode($request->getBody(), true);
if ($json_response['ok'] == 'true') {
//Telegram file link
$telegram_file_link = 'https://api.telegram.org/file/bot' . $this->tg_configs['api_key'] . '/' . $json_response['result']['file_path'];
3。如果使用 PHP 使用 Intervention/Image
下载图像并将其保存在您的服务器上。
//Build upload path
$upload_path = public_path() . \Config::get('media::media.uploadPath');
//Get image
$image = $thumbnail = InterventionImage::make($telegram_file_link);
//Get mime
$mime = $image->mime();
if ($mime == 'image/jpeg') {
$extension = '.jpg';
} elseif ($mime == 'image/png') {
$extension = '.png';
} elseif ($mime == 'image/gif') {
$extension = '.gif';
} else {
$extension = '';
}//E# if else statement
//Resize images
$image->resize(\Config::get('media::media.mainWidth'), \Config::get('media::media.mainHeight'));
$thumbnail->resize(\Config::get('media::media.thumbnailWidth'), \Config::get('media::media.thumbnailHeight'));
//Build media name
$media_name = \Str::random(\Config::get('media::media.mediaNameLength')) . $extension;
//Save images
$image->save($upload_path . '/' . $media_name);
$thumbnail->save($upload_path . '/thumbnails/' . $media_name);
接受的答案很好。但这里有一个更详细的答案。在您获得实际图像文件之前,涉及三个主要步骤。 1) 从 Telegram 请求 file_id
。 2) 加载 Guzzle 客户端。 3) 从 Telegram 请求 file_path
。请密切注意下面的不同 URL 路径。
// get file id
$id = $update['message']['photo'][0]['file_id'];
$file_id = "https://api.telegram.org/bot" .
config('app.telegram_api_key') . "/getFile?file_id=" . $id;
// guzzle client
$guzzle_client = new GuzzleClient();
$request = $guzzle_client->get($file_id);
$response = json_decode($request->getBody(),true);
// get file path
$file_url = "https://api.telegram.org/file/bot" .
config('app.telegram_api_key') . "/" . $response['result']['file_path'];