【问题标题】:Can't get image information with Telegram api and python无法使用 Telegram api 和 python 获取图像信息
【发布时间】:2018-05-01 05:36:23
【问题描述】:

我制作了一个机器人来接收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'}}

如何通过bot接收我的telegram应用程序发送的图片来下载图片数据?

【问题讨论】:

  • 我没有发送图片的代码,我只想接收它们。图片被发送到我的电报机器人,机器人将它发送到一个 webhook,对应于:appname.herokuapp.com/apunteswaw
  • 您是否从收到图片的机器人那里得到任何验证? JSON 应该包含一个 photo 数组,当获取最后一次更新时,图像应该在其中。有关应用程序流程的更多信息吗?
  • 你有很长的提问历史,收到答案后就消失了。接受解决问题的答案是这里工作方式的重要组成部分。它会奖励您和撰写答案的人,并将您的问题标记为已解决,以便其他用户将来可以从中受益。请阅读stackoverflow.com/help/someone-answers
  • @Chris 感谢您指出这一点。
  • 这是真的@Chris,很多答案永远不会得到正确答案,我认为最好的办法是删除它们以防止人们陷入死胡同。我应该怎么做?一段时间后,问题就消失了,再也没有出现过。

标签: python heroku telegram-bot python-telegram-bot


【解决方案1】:

在深入挖掘之后,我得出结论,Telegram API 只是不会将带有媒体的消息发送到 WebHook(也许这只是我的情况,但我不知道)。

要获取最后一条消息的图片,您必须禁用 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

从那里响应包含照片 ID 以使用方法 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>

获取音频和视频等其他媒体文件的过程相同,但是id在getUpdates的响应字典的另一个路径中找到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多