Мы уже рассмотрели, как отправлять и получать текстовые сообщение, картинки и файлы в Telegram на PHP. Теперь давайте рассмотрим ещё один пример – отправку и получение видео.
Принцип загрузки и сохранения видео в Telegram аналогичен работе с картинками и файлами.
Загрузка и скачивание видео в Telegram
Если мы отправим боту какое-нибудь видео через мессенджер, то получим от Telegram следующий запрос:
Array
(
[update_id] => 699174183
[message] => Array
(
[message_id] => 247
[from] => Array
(
[id] => 1526361849
[is_bot] =>
[first_name] => FirstName
[last_name] => LastName
[username] => UserName
[language_code] => uk
)
[chat] => Array
(
[id] => 1526361849
[first_name] => FirstName
[last_name] => LastName
[username] => UserName
[type] => private
)
[date] => 1671035204
[video] => Array
(
[duration] => 8
[width] => 848
[height] => 848
[file_name] => VID_20221214_142531_952.mp4
[mime_type] => video/mp4
[thumb] => Array
(
[file_id] => AAMCAgADGQEAA_djmflDSUTK_RNKy5ml8DuH-CdM-wACqyAAAibw0EgoW1ayJT5aGwEAB20AAywE
[file_unique_id] => AQADqyAAAibw0Ehy
[file_size] => 9749
[width] => 320
[height] => 320
)
[file_id] => BAACAgIAAxkBAAP3Y5n5Q0lEyv0TSsuZpfA7h_gnTPsAAqsgAAIm8NBIKFtWsiU-WhssBA
[file_unique_id] => AgADqyAAAibw0Eg
[file_size] => 1297243
)
)
)
Здесь мы видим два <file_id>. Первый – это ID превью видео размером 320х320px, а второй – ID оригинального видеофайла.
Чтобы скачать видео, нам нужно получить путь к нему. Делается это формированием следующей ссылки:
https://api.telegram.org/bot<token>/getFile?file_id=<the_file_id>
где,
- <token> – токен бота.
- <the_file_id> – ID файла который нужно скачать.
В моём случае ссылка будет выглядеть так:
https://api.telegram.org/bot5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y/getFile?file_id=BAACAgIAAxkBAAP3Y5n5Q0lEyv0TSsuZpfA7h_gnTPsAAqsgAAIm8NBIKFtWsiU-WhssBA
Если ввести эту ссылку в адресно строке браузера, то он выведет нам следующую информацию:
{"ok":true,"result":{"file_id":"BAACAgIAAxkBAAP3Y5n5Q0lEyv0TSsuZpfA7h_gnTPsAAqsgAAIm8NBIKFtWsiU-WhssBA","file_unique_id":"AgADqyAAAibw0Eg","file_size":1297243,"file_path":"videos/file_5.mp4"}}
Здесь нас интересует <file_path> который указывает на путь к видеофайлу.
Теперь, мы можем сформировать ссылку, перейдя по которой произойдёт скачивание файла:
https://api.telegram.org/file/bot<token><file_path>
где,
- <token> – токен бота.
- <file_path> – путь к файлу, который нужно скачать.
Вот пример ссылки, перейдя по которой начнётся скачивание видео, которое было отправлено боту в мессенджере:
https:// api.telegram.org/file/bot5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y/videos/file_5.mp4
Загрузка видео на сервер Telegram
Получение видео и его сохранение на сервере, можно реализовать следующим образом:
<?php
// Приймаємо запит
$data = file_get_contents('php://input');
$data = json_decode($data, true);
file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); //зберігаємо вхідні дані в файл
// Константа токен
define('TOKEN', '5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y');
// Функція виклику методів API
function sendTelegram($method, $response) {
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
// Якщо прислали відео
if (!empty($data['message']['video'])) {
$res = sendTelegram(
'getFile',
array(
'file_id' => $data['message']['video']['file_id']
)
);
$res = json_decode($res, true);
if ($res['ok']) {
$src = 'https://api.telegram.org/file/bot' . TOKEN . '/' . $res['result']['file_path'];
$dest = __DIR__ . '/' . time() . '-' . $data['message']['video']['file_name'];
if (copy($src, $dest)) {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Відео збережено на сервері'
)
);
}
}
exit();
}
?>
Отправка видео Telegram боту
Для отправки видеофайлов Telegram боту используют метод sendDocument.
<?php
// Приймаємо запит
$data = file_get_contents('php://input');
$data = json_decode($data, true);
file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); //зберігаємо вхідні дані у файл
// Константа токен
define('TOKEN', '5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y');
// Функція виклику методів API
function sendTelegram($method, $response) {
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
// Відповідь на повідомлення
// Отримуємо текст, який відправив користувач Телеграм боту в месенджері
if (!empty($data['message']['text'])) {
$text = $data['message']['text'];
// Відправляємо файл боту
if (mb_stripos($text, '/sendvideo') !== false) {
sendTelegram(
'sendVideo',
array(
'chat_id' => $data['message']['chat']['id'],
'video' => curl_file_create(__DIR__ . '/video.mp4')
)
);
exit();
}
}
?>
В данном примере, если пользователь отправит нашему Телеграм боту команду /sendvideo, то в ответном сообщении, он получит файл video.mp4, который находится на сервере, в папке с нашим скриптом.
Весь код отправки и сохранения видео в Telegram
<?php
// Приймаємо запит
$data = file_get_contents('php://input');
$data = json_decode($data, true);
file_put_contents(__DIR__ . '/message.txt', print_r($data, true)); //зберігаємо вхідні дані у файл
// Константа токен
define('TOKEN', '5741786015:AAGTuEwCBGHmcJP9kO-OzV_xKIduBkbAK6Y');
// Функція виклику методів API
function sendTelegram($method, $response) {
$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
// Якщо прислали файл
if (!empty($data['message']['video'])) {
$res = sendTelegram(
'getFile',
array(
'file_id' => $data['message']['video']['file_id']
)
);
$res = json_decode($res, true);
if ($res['ok']) {
$src = 'https://api.telegram.org/file/bot' . TOKEN . '/' . $res['result']['file_path'];
$dest = __DIR__ . '/' . time() . '-' . $data['message']['video']['file_name'];
if (copy($src, $dest)) {
sendTelegram(
'sendMessage',
array(
'chat_id' => $data['message']['chat']['id'],
'text' => 'Відео збережено на сервері'
)
);
}
}
exit();
}
// Відповідь на повідомлення
// Отримуємо текст, який відправив користувач Телеграм боту в месенджері
if (!empty($data['message']['text'])) {
$text = $data['message']['text'];
// Відправляємо відео боту
if (mb_stripos($text, '/sendvideo') !== false) {
sendTelegram(
'sendVideo',
array(
'chat_id' => $data['message']['chat']['id'],
'video' => curl_file_create(__DIR__ . '/video.mp4')
)
);
exit();
}
}
?> 