Telepot中的sendPhoto()对我的机器人不起作用

时间:2017-01-07 21:37:36

标签: python python-2.7 urllib2 telegram telegram-bot

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

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 app [worker.1]:TelegramError:   (u'Bad请求:照片的扩展名不受支持。使用.jpg中的一个,   .jpeg,#.gif,.png,.tif或.bmp',400,{u'ok':False,   u'description':u'Bad请求:照片的扩展名不受支持。使用   .jpg,.jpeg,#.gif,.png,.tif或.bmp'之一,u'error_code':400})

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

1 个答案:

答案 0 :(得分:1)

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

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

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

从本地磁盘上传图像时不必这样做,因为可以从文件系统中猜出文件扩展名。但是,您必须为URL执行此操作,因为无法以其他方式获取文件扩展名。