Как сохранить присланный боту медиа-файл? Рассмотрим на примере картинки, но принцип для остальных форматов одинаковый. Скачаем картинку на наш сервер.
В своей работе над ботом, который проводит розыгрыши, мне потребовалось сохранять у себя на сервере файлы, присылаемые пользователями. Очень интересный и простой процесс получился. У Telegram Bot Api для этого есть специальный метод getFile. На входе он получает file_id , на выходе объект File. Параметров file_id у картинки может быть больше одного, потому как телеграм присылает несколько вариантов размеров картинки, последний всегда оригинал. При загрузке картинки в бот приходит информация в виде объекта Photo, в котором лежит массив объектов PhotoSize. Наш бот будет принимать только команду /start и картинку, на остальные запросы он будет «ругаться». Чтобы определить, что нам пришло в нашем уже знакомом по предыдущим статьям методе init() будем проверять ключи массива пришедших данных. Для реализации задуманного нам нужен только объект Message.
как создать своего телеграмм бота?
sendMessage($chat_id, «Приветствую! Загрузите картинку.»); > elseif (array_key_exists(‘photo’, $data[‘message’])) < // если пришла картинка то сохраняем ее у себя $text = $this->getPhoto($data[‘message’][‘photo’]) ? «Спасибо! Можете еще загрузить мне понравилось их сохранять.» : «Что-то пошло не так, попробуйте еще раз»; // отправляем сообщение о результате $this->sendMessage($chat_id, $text); > else < // если пришло что-то другое $this->sendMessage($chat_id, «Не понимаю команду! Просто загрузите картинку.»); > > ?>
Картинки мы будем сохранять в директории img , располагается она рядом с файлом index.php в котором наш код.
. .. [ img ] index.php
через метод getPhotoPath() получаем расположение файла на сервере Telegram
через метод copyPhoto() копируем картинку к себе на сервер
Картинка располагается на сервере Telegram по стандартному пути:
https://api.telegram.org/file/bot/
Выводит картинку по этому пути где-либо в сети не рекомендую, так как будет доступен ваш токен от бота.
Сохранять себе на сервер мы будем оригинал, поэтому нам надо узнать количество элементов в массиве, использовать будем функцию count().
Чтобы получить расширение файла, будем разбивать file_path в массив по знаку . функцией explode() и брать последний элемент используя функцию end(). Для копирования файлов пользуемся функцией copy().
getPhotoPath($file_id); // возвращаем результат загрузки фото return $this->copyPhoto($file_path); > // функция получения метонахождения файла private function getPhotoPath($file_id) < // получаем объект File $array = json_decode($this->requestToTelegram([‘file_id’ => $file_id], «getFile»), TRUE); // возвращаем file_path return $array[‘result’][‘file_path’]; > // копируем фото к себе private function copyPhoto($file_path) < // ссылка на файл в телеграме $file_from_tgrm = «https://api.telegram.org/file/bot».$this->botToken.»/».$file_path; // достаем расширение файла $ext = end(explode(«.», $file_path)); // назначаем свое имя здесь время_в_секундах.расширение_файла $name_our_new_file = time().».».$ext; return copy($file_from_tgrm, «img/».$name_our_new_file); > ?>
Подводим итог
Сохранить картинку через Телеграм бот очень просто. Методы Bot API позволяют это сделать быстро. Для сохранения других типов файлов с Телеграм алгоритм аналогичный. Скачать исходный код можно по этой ссылке.
Источник: imakebots.ru
Как выгрузить документы из Телеграм
Если вам необходимо выгрузить документы из Телеграм, то вы на верном пути. В этой статье мы расскажем вам, какими способами это можно сделать, а также поделимся несколькими полезными советами и выводами.
- Хранение документов в Telegram
- Как экспортировать данные из Телеграм
- Как загрузить файлы из Телеграм
- Как выгрузить все данные из Телеграм
- Полезные советы и выводы
Хранение документов в Telegram
Прежде, чем перейти к процессу выгрузки, важно понимать, где находятся файлы и документы, которые мы хотим выгрузить. На смартфонах с Android 10 и ниже файлы Telegram хранятся в папке «Telegram», расположенной на внутреннем накопителе. Эта папка содержит еще 4 каталога, отвечающих за разнообразный контент: Telegram Images (каждинки), Telegram Documents (документы) и другие.
Как экспортировать данные из Телеграм
Если вы хотите экспортировать данные из Телеграм, то вам необходимо выполнить несколько простых действий, которые мы описываем далее:
- Запустите приложение Telegram и перейдите в нужный чат.
- В правом верхнем углу экрана находится кнопка с тремя вертикальными точками. Нажмите на нее.
- В меню, которое появится, выберите опцию «Экспорт истории чата».
- Затем отметьте данные, которые вы хотите выгрузить. Укажите, какой период переписки вас интересует, какой формат файлов вы хотите получить и папку, в которую вы хотите сохранить данные. Также можете ограничить выгрузку по размеру файлов, чтобы данные занимали меньше места.
- Нажмите кнопку «Экспортировать». После этого процесс экспорта начнется.
Как загрузить файлы из Телеграм
Часто бывает так, что нам нужно загрузить какой-то файл или документ с Телеграмма. Существует несколько способов это сделать:
- Нажмите на кнопку «Выбрано» в верхней части меню. Откроется обновленный раздел «Файлы», где вы увидите все недавно отправленные файлы. Используйте поиск по названию, чтобы быстро найти нужный файл.
- Если вы знаете, какой документ вы хотите выгрузить, то можно воспользоваться функцией «Поиск», которая находится в главном меню приложения. Введите название документа в строку поиска, и вы получите список всех документов, которые удовлетворяют вашему запросу.
Как выгрузить все данные из Телеграм
Если вам нужно выгрузить все данные из Телеграмма, то для этого можно воспользоваться функцией «Экспорт данных из Telegram», которая находится в разделе «Продвинутые настройки». Здесь вы сможете выбрать все данные, которые вам нужны для скачивания.
Полезные советы и выводы
- Перед тем, как выгружать данные из Telegram, оцените объем информации, которую вы хотите скачать, и выберите подходящий формат файлов.
- Будьте внимательны при выборе папки для сохранения данных. Выберите такую, чтобы у вас было достаточно места для хранения всех скачанных файлов.
- Постарайтесь регулярно очищать кэш Telegram. Это поможет ускорить работу приложения и освободить память на вашем устройстве.
- Не забывайте о том, что Telegram позволяет скачивать только те файлы, которые были отправлены или получены пользователями с вашего устройства.
- Будьте осторожны, если вы решите использовать сторонние программы для выгрузки данных из Telegram. Некоторые из них могут содержать вредоносный код, который может нанести вред вашему устройству или компьютеру.
- Для максимальной безопасности рекомендуется использовать официальное приложение Telegram для выгрузки данных.
Теперь вы знаете, как выгрузить документы из Telegram! Следуйте нашим советам, и процесс скачивания данных пройдет быстро и без проблем.
Как импортировать историю чата в Телеграм
Если вы использовали приложение Telegram долгое время, вам, возможно, захочется импортировать свою историю чата в новое устройство. Это несложно, иначе говоря, нужно сделать следующее: сначала нужно открыть приложение «Файлы», найти импортированный архив и открыть его. Затем нужно нажать на иконку «Поделиться» в правом верхнем углу, затем выбрать Telegram. После этого выберите нужный чат и изображение, чтобы импортировать чат. Если у вас есть учетная запись в Telegram, вам нужно будет войти в нее, чтобы завершить процесс. В результате вы сможете сохранить свою историю чата на новом устройстве и продолжить общение со своими друзьями и контактами.
Для выгрузки документов из Телеграм необходимо зайти в нужный чат и нажать на три вертикальные точки в правом верхнем углу. Затем следует выбрать опцию «Экспорт истории чата» и отметить данные для выгрузки, ограничение по размеру файлов, желаемый формат и папку для сохранения переписки. Также необходимо указать интересующий вас период переписки. После этого следует нажать на кнопку «Экспортировать», и документы будут выгружены из Телеграм. Этот процесс является достаточно простым и не занимает много времени, так что любой пользователь может справиться с ним без особых усилий.
- Как сохранить документ в телеграмме
- Как создать файл в телеграмме
- Как скачать файл из телеграмм
- Где находится корзина в телеграмме
Источник: telegramy.ru
Работа с файлами/media, модуль python-telegram-bot в Python
В разделе рассмотрены примеры сниппетов, для работы с файлами, медиа и URL-адресами при создании Telegram бота с помощью пакета python-telegram-bot .
Внимание! Пакеты python-telegram-bot версии 13.x будут придерживаться многопоточной парадигмы программирования (*на данный момент актуальна версия 13.15). Пакеты версий 20.x и новее предоставляют чистый асинхронный Python интерфейс для Telegram Bot API. Дополнительно смотрите основные изменения в пакете python-telegram-bot версии 20.x.
Здесь рассматривается методы экземпляра bot = telegram.Bot() . Если при создании бота используется пакет расширения telegram.ext , то методы объекта bot будут доступны через:
- updater.bot — это экземпляр telegram.Bot , связанный с экземпляром Updater , который присылает и отправляет все сообщения;
- в функции обратного вызова через контекст context.bot — это telegram.Bot связанный с контекстом обработанного сообщения.
from telegram.ext import Updater, CommandHandler TOKEN = ‘Замените строку на Ваш token’ updater = Updater(token=TOKEN) dispatcher = updater.dispatcher # экземпляр `telegram.Bot`, связанный с экземпляром `Updater` updater.bot.send_photo(. ) # методы `telegram.Bot` доступны через `context` def call_back(update, context): . # `telegram.Bot` связанный с контекстом # обработанного сообщения context.bot.send_photo(. ) . dispatcher.add_handler(CommandHandler(«you_command», call_back))
Публикация файлов, media и URL-адресов в Telegram.
Если нужно отправить файл, например, отправить фото, то для этого есть три метода:
- Загрузить файл в Telegram.
- Отправить HTTP-ссылку, ведущую к файлу
- Отправить file_id уже отправленного файла.
Обратите внимание, что не каждый метод поддерживается везде (например, для thumbnails нельзя передать file_id ).
Смотрим, как можно отправить документ.
- Загрузка файла в Telegram:
bot.send_document(chat_id=chat_id, document=open(‘tests/test.png’, ‘rb’))
bot.send_document(chat_id=chat_id, document=’https://site.ru/static/test.gif’))
bot.send_document(chat_id=chat_id, document=file_id))
- У каждого бота есть свои собственные идентификаторы файлов, т.е. вы не можете использовать идентификатор файла от другого бота для отправки фотографии
- Как получить fileid фотографии, которую вы отправили? Прочтите его из возвращаемого значения bot.senddocument (или любого другого объекта Message, который вы получите):
message = bot.send_document(. ) file_id = message.document.file_id
Примечание. Метод bot.send_document используется для отправки файлов любого типа. В настоящее время боты могут отправлять файлы любого типа размером до 50 МБ, это ограничение может быть изменено в будущем. Аргументом document может быть либо file_id , либо URL-адрес, либо файл с диска открытый как open(file_name, ‘rb’) . Отправка по URL в настоящее время работает только с файлами GIF, PDF и ZIP.
Это почти так же работает для всех других методов send_media_type , таких как bot.send_photo() , bot.send_video() и т. д.
Далее рассматриваются другие распространенные примеры кода. Обратите внимание на то, что подход к публикации файлов почти одинаков, НО методы экземпляра bot разные!
Опубликовать файл изображения с диска в Telegram.
bot.send_photo(chat_id=chat_id, photo=open(‘tests/test.png’, ‘rb’))
Опубликовать фото с URL-адреса в Telegram.
bot.send_photo(chat_id=chat_id, photo=’https://telegram.org/img/t_logo.png’)
Опубликовать голосовой файл с диска в Telegram.
bot.send_voice(chat_id=chat_id, voice=open(‘tests/telegram.ogg’, ‘rb’))
Опубликовать аудио файл с диска в Telegram.
bot.send_audio(chat_id=chat_id, audio=open(‘tests/test.mp3’, ‘rb’))
Опубликовать документ или архив с диска в Telegram.
bot.send_document(chat_id=chat_id, document=open(‘tests/test.zip’, ‘rb’))
Опубликовать гифку в Telegram.
Используйте этот метод для отправки файлов анимации (видео в формате GIF или H.264/MPEG-4 AVC без звука). В настоящее время боты могут отправлять файлы анимации размером до 50 МБ, это ограничение может быть изменено в будущем.
bot.send_animation(chat_id=chat_id, document=open(‘tests/animation.gif’, ‘rb’))
Опубликовать медиа-группу из фото, расположенных в URL-адресах:
Используйте этот метод для отправки группы фотографий или видео в виде альбома.
from telegram import InputMediaPhoto list_of_urls = [ ‘https://example.org/commons/foto1.jpg’, ‘https://example.org/commons/foto2.jpg’, ‘https://example.org/commons/foto3.jpg’ ] # список мультимедиа media_group = [] for number, url in enumerate(list_of_urls): media_group.append(InputMediaPhoto(media=url, caption=»Фотография №» + number)) bot.send_media_group(chat_id=chat_id, media=media_group)
Примечание Элементы в списке мультимедиа media_group обязательно должны быть экземплярами InputMediaAudio , InputMediaDocument , InputMediaPhoto или InputMediaVideo .
Редактирование файла, отправленного в Telegram.
Если файл отправлен, то можно его отредактировать. Это работает аналогично send_media_group , т. е. медиаданные должны быть заключены в объект InputMedia . Опять же, с документом в качестве примера:
bot.edit_message_media(chat_id=chat_id, message_id=message_id, media=InputMediaDocument(media=open(‘tests/test.png’), . ))
Ознакомьтесь с ограничениями на редактирование мультимедиа в документах send_media_group .
Выложить изображение прочитанное в оперативную память:
В этом примере изображение является объектом изображения модуля Pillow , но оно работает одинаково со всеми типами мультимедиа.
from io import BytesIO bio = BytesIO() bio.name = ‘image.jpeg’ image.save(bio, ‘JPEG’) bio.seek(0) bot.send_photo(chat_id, photo=bio)
Получить изображение с размерами, максимально приближенными к желаемому размеру:
Где photos — это список объектов PhotoSize , а desired_size — кортеж, содержащий нужный размер.
def get_closest(photos, desired_size): def diff(p): return p.width — desired_size[0], p.height — desired_size[1] def norm(t): return abs(t[0] + t[1] * 1j) return min(photos, key=lambda p: norm(diff(p)))
Загрузка файлов из Telegram сообщений.
Примечание. При загрузке фотографий имейте в виду, что update.message.photo — это массив фотографий разных размеров (упорядоченный от самого малого к большому).
Используйте update.message.photo[-1] , чтобы получить самый большой размер.
file_id = message.voice.file_id newFile = bot.get_file(file_id) newFile.download(‘voice.ogg’)
Кроме того, приведенный выше фрагмент можно сократить, используя встроенные ссылки:
newFile = message.effective_attachment.get_file() newFile.download(‘file_name’)
message.efficient_attachment автоматически содержит любое мультимедийное вложение, которое есть в сообщении — в случае фотографии снова придется использовать, например: message.efficient_attachment[-1].get_file() .
Источник: docs-python.ru