Не могу получить информацию об изображении с Telegram API и Python - PullRequest
0 голосов
/ 01 мая 2018

Я создал бота для получения изображений на python и работы с ними, все через heroku. Я сделал простую страницу, чтобы увидеть информацию, полученную так:

@app.route('/apunteswaw',methods=['POST'])
def apunteswaw():
    data = json.loads(flask.request.data)
...
@app.route('/recive',methods=['GET'])
def recive():
    return 'Mensaje: {}'.format(data)

На странице отображается последнее отправленное сообщение, но когда я отправляю изображение, оно пропускает его и показывает последнее текстовое сообщение, например:

{'update_id': 54485500, 'message': {'message_id': 12, 'from': {'id': 231951870, 'is_bot': False, 'first_name': '***', 'last_name': '***', 'language_code': 'en-US'}, 'chat': {'id': 231951870, 'first_name': '***', 'last_name': '***', 'type': 'private'}, 'date': 1525151196, 'text': 'asdasd'}}

Как я могу получить данные фотографии, чтобы загрузить изображение, отправленное из моего приложения telegram через bot?

1 Ответ

0 голосов
/ 02 мая 2018

Покопавшись еще, я пришел к выводу, что Telegram API просто не отправляет сообщения с медиа в WebHook (возможно, это был только мой случай, но я просто не знал бы).

Чтобы получить изображения для последнего сообщения, вы должны отключить веб-хуки и использовать метод getUpdates.

updates = requests.get('http://api.telegram.org/bot{}/getUpdates'.format(token))
if updates.status_code ==200:
    data = json.loads(updates.text)
    last = data['result'][-1]
    ide = ''
    if 'photo' in last['message']:
        foto = True
        ide = last['message']['photo'][2]['file_id']
    else:
        foto = False
        print('no photo')
    return foto, ide

Оттуда ответ включает идентификатор фотографии для извлечения его методом getFile:

r = requests.get('http://api.telegram.org/bot{}/getFile?file_id={}'.format(token,ide),)
if r.status_code == 200:
    path = json.loads(r.text)
    return path['result']['file_path']

Наконец, с путем вы можете скачать картинку с: 'http://api.telegram.org/file/bot<token>/<path>

Для получения других медиафайлов, таких как аудио и видео, используется та же процедура, но идентификатор находится в другом пути словаря ответов getUpdates

...