відео бот телеграм

Створення Telegram бота на PHP: Завантаження та скачування відео. Урок 5

Ми вже розглянули, як надсилати та отримувати текстові повідомлення, картинки та файли в Telegram на PHP. Тепер давайте розглянемо ще один приклад – відправлення та отримання відео.

Принцип завантаження та збереження відео в Telegram аналогічний роботі з картинками і файлами.

Завантаження та скачування відео в Telegram

Якщо ми відправимо боту якесь відео через месенджер, то отримаємо від Telegram наступний запит:

Тут ми бачимо два <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

Якщо ввести це посилання в адресному рядку браузера і натиснути Enter, то він виведе нам наступну інформацію:

Тут нас цікавить <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();    
    }
}
?>

Main Menu