Метод getFile

Метод для получения информации о файле и временной ссылки для его скачивания.

Описание

Используйте этот метод, чтобы получить основную информацию о файле и подготовить его к скачиванию. На данный момент боты могут скачивать файлы размером до 20 МБ. При успешном выполнении возвращается объект File. Затем файл можно скачать по ссылке https://api.telegram.org/file/bot/, где берётся из ответа. Гарантируется, что ссылка будет действительна как минимум 1 час. Когда срок действия ссылки истечёт, можно запросить новую, снова вызвав getFile.

Параметр Тип Обязательный Описание
file_id String Да Идентификатор файла, о котором нужно получить информацию

Примечание: Эта функция может не сохранять оригинальное имя файла и MIME-тип. Вам следует сохранить MIME-тип файла и имя (если доступно) при получении объекта File.

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$fileId = 'FILE_ID_TO_GET_INFO';

$apiUrl = "https://api.telegram.org/bot{$botToken}/getFile";

$postData = [
    'file_id' => $fileId
];

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $result = json_decode($response, true);
    
    if ($result['ok']) {
        $file = $result['result'];
        
        echo "File Information:\n";
        echo "File ID: " . $file['file_id'] . "\n";
        echo "File Unique ID: " . $file['file_unique_id'] . "\n";
        echo "File Size: " . ($file['file_size'] ?? 'N/A') . " bytes\n";
        echo "File Path: " . ($file['file_path'] ?? 'N/A') . "\n";
        
        // If file_path exists, you can download the file
        if (isset($file['file_path'])) {
            $downloadUrl = "https://api.telegram.org/file/bot{$botToken}/{$file['file_path']}";
            echo "Download URL: " . $downloadUrl . "\n";
            
            // Example of downloading the file
            $fileContent = file_get_contents($downloadUrl);
            if ($fileContent !== false) {
                $fileName = basename($file['file_path']);
                file_put_contents($fileName, $fileContent);
                echo "File downloaded as: " . $fileName . "\n";
            }
        }
    } else {
        echo "Error: " . $result['description'] . "\n";
    }
} else {
    echo "HTTP Error: " . $httpCode . "\n";
}

// Alternative using file_get_contents with stream context
function getFileInfo($botToken, $fileId) {
    $apiUrl = "https://api.telegram.org/bot{$botToken}/getFile";
    
    $options = [
        'http' => [
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded',
            'content' => http_build_query(['file_id' => $fileId])
        ]
    ];
    
    $context = stream_context_create($options);
    $response = file_get_contents($apiUrl, false, $context);
    
    return json_decode($response, true);
}

// Usage example
// $fileInfo = getFileInfo('YOUR_BOT_TOKEN', 'FILE_ID');
// if ($fileInfo['ok']) {
//     print_r($fileInfo['result']);
// }

?>

python

import requests

# Токен вашего бота
BOT_TOKEN = "YOUR_BOT_TOKEN"

def get_file(file_id):
    """
    Получает информацию о файле по его file_id.
    
    Args:
        file_id (str): Идентификатор файла для получения информации.
    
    Returns:
        dict: Информация о файле в виде словаря.
    """
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/getFile"
    params = {"file_id": file_id}
    
    response = requests.post(url, params=params)
    return response.json()

def download_file(file_path, save_path):
    """
    Скачивает файл по полученному file_path.
    
    Args:
        file_path (str): Путь к файлу, полученный из getFile.
        save_path (str): Локальный путь для сохранения файла.
    """
    url = f"https://api.telegram.org/file/bot{BOT_TOKEN}/{file_path}"
    response = requests.get(url)
    
    with open(save_path, 'wb') as f:
        f.write(response.content)

# Пример использования
if __name__ == "__main__":
    # Пример file_id (должен быть получен из сообщения с файлом)
    example_file_id = "AgACAgIAAxkBAAIB..."
    
    # Получаем информацию о файле
    file_info = get_file(example_file_id)
    
    if file_info.get("ok"):
        file_path = file_info["result"]["file_path"]
        print(f"File path: {file_path}")
        print(f"File size: {file_info['result'].get('file_size', 'N/A')} bytes")
        
        # Скачиваем файл
        download_file(file_path, "downloaded_file")
        print("File downloaded successfully!")
    else:
        print(f"Error: {file_info.get('description')}")

Дополнительно

  • File - Объект, представляющий файл, доступный для скачивания через Telegram Bot API, с информацией о его идентификаторах, размере и пути.
Комментарии