我无法发送照片,这里有错误代码:

if command.startswith('/rank '):
    rank(msg)

def rank(msg):
    chat_id = msg['chat']['id']
    command = msg['text']

    user = msg['text'][6:]
    graphUrl = 'https://www.website.com/servlet/graph/' + user + '-in_US.png'
    print graphUrl

    theGraph = urllib2.urlopen(graphUrl)

    bot.sendPhoto(chat_id, theGraph, caption=('rank graph for ' + user + '.'))



  错误:2016-12-30T17:17:50.803142 + 00:00应用程序[worker.1]:电报错误:
  (u'Bad Request:照片的扩展名不受支持。请使用.jpg,
  .jpeg,#.gif,.png,.tif或.bmp',400,{u'ok':假,
  u'description':u'Bad Request:图片的扩展名不受支持。采用
  .jpg,.jpeg,#.gif,.png,.tif或.bmp中的一种,u'error_code':400})


我的文件是.png,我在哪里错?
如果将sendPhoto()替换为sendDocument(),则一切正常,但是我的项目中需要照片。
如果我不使用urllib2而直接将graphUrl放在sendPhoto中,则它不起作用(错误400-错误的请求)。

最佳答案

我认为您必须为Telegram服务器指定文件扩展名才能将其识别为图像。例如:

url = urllib2.urlopen('http://i.imgur.com/35HSRQ6.png')
bot.sendPhoto(chat_id, ('abc.png', url))


文件名无关紧要,只要扩展名与图像类型匹配即可。

从本地磁盘上载图像时,您不必这样做,因为可以从文件系统中猜测文件扩展名。但是,您必须为URL执行此操作,因为否则无法获得文件扩展名。

08-27 15:50