Я использую API телеграмм ботов, но я все равно не могу скачать filé, который был отправлен моему боту. Я получаю хэш файла, но не знаю, что с ним делать. Там в любом случае? Благодарю.Как загрузить файл или фотографию, отправленную моему боттеру Telegram?
ответ
Это теперь доступна!
https://core.telegram.org/bots/api#getfile
Ура! Он был добавлен 18 сен:
https://core.telegram.org/bots/api
Использование:
В JSON сообщения вы получите file_id, как и раньше. Пример объекта сообщения с голосовым файлом:
{
message_id: 2675,
from: {
id: 10000001,
first_name: 'john',
username: 'john'
},
chat: {
id: 10000001,
first_name: 'john',
username: 'john'
},
date: 1442848171,
voice: {
duration: 2,
mime_type: 'audio/ogg',
file_id: 'AwADBAADYwADO1wlBuF1ogMa7HnMAg', // <------- file_id
file_size: 17746
}
}
Via GetFile АНИ теперь вы можете получить необходимую информацию о пути к файлу:
https://api.telegram.org/bot<bot_token>/getFile?file_id=the_file_id
Это будет возвращать объект с file_id , file_size и file_path. Затем вы можете использовать FILE_PATH для загрузки файла:
https://api.telegram.org/file/bot<token>/<file_path>
Обратите внимание, что эта ссылка будет доступна только в течение часа. Через час вы можете запросить другую ссылку. Это означает, что если вы хотите каким-то образом разместить файл, и вы избегаете проверки и повторной проверки свежих ссылок каждый раз, когда вы его обслуживаете, вам может быть лучше загрузить файл на свой собственный хостинг.
Максимальный размер файла, полученного с помощью этого метода, составляет 20 МБ. Ошибка. Получается, если файл большой, чем 20MB используется (показано ниже)
{"ok":false,"error_code":400,"description":"Bad Request: file is too big[size:1556925644]"}
От Docs Телеграмма в:
On success, a File object is returned. The file can then be downloaded via the link https://api.telegram.org/file/bot /, where is taken from the response. It is guaranteed that the link will be valid for at least 1 hour. When the link expires, a new one can be requested by calling getFile again.For the moment, bots can download files of up to 20MB in size.
Если у вас есть file_id, то вам нужно использовать sendDocument или sendPhoto методы, если вы хотите отправить себе, что вам нужно сказать бота ваш идентификатор пользователя или ваш чат идентификатор (то же самое в один-к-одному чат).
ОП просит о получении, а не посылать. Переслать или повторно отправить файл самому себе, просто оставит вас с той же проблемой. –
Если бот отправит мне файл, я могу скачать его из беседы с ботом на мой телефон или мой компьютер (из самой телеграммы). Согласно вашему комментарию, Артур хочет получить сообщение в боте, а затем бот загружает изображение или файл на сервер (где работает бот)? – delaf
Теперь я понимаю, что вы имели в виду. Но да, обычно вы хотите, чтобы бот загружал файл автоматически и обрабатывал его каким-то образом. В этом-то и смысл иметь бота. –
Метод работы с файлами пока недоступен. Источник: телеграмма твиттере
Yay! Он добавлен только 18 сентября 2015 года
Вы можете использовать getFile(file_id)
. Эта функция возвращает объект File, содержащий file_path
.Вы можете скачать файл по этому адресу:
https://api.telegram.org/file/bot<token>/<file_path>
Как уже упоминалось в Telegram Bot API Documentation, объект File будет действителен в течение одного часа. Вы должны снова позвонить getFile
, чтобы получить новый объект File, если старый истекает.
Каков формат конечной точки getFile? Я попытался/getFile,/getFile? File_id = xxx, getFile (xxx), и они не сработали. –
Если вы используете pyTelegramBotAPI вы можете загрузить свою фотографию, используя этот код:
raw = message.photo[2].file_id
path = raw+".jpg"
file_info = bot.get_file(raw)
downloaded_file = bot.download_file(file_info.file_path)
with open(path,'wb') as new_file:
new_file.write(downloaded_file)
фото [2] там есть 4 версии фотографии. если я хочу скачать меньший размер [0] нулевой индекс мой? как насчет кода примера php? –
Чтобы уточнить, вызов API getFile должен включать в себя строку '? File_id = the_file_id' в строке запроса GET. – jotadepicas
Когда я использую/getFile, я не могу получить file_path некоторое время , например, когда файл является ogg file_path, и файл загружен правильно, но когда файл mp3 filr_path не определен и просто возвращает file_id и file_size! –