2017-01-07 7 views
1

Я не могу отправить фото, вот код с ошибкой:sendPhoto() в Telepot не работает для моего бота

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 + '.')) 

Error: 2016-12-30T17:17:50.803142+00:00 app[worker.1]: TelegramError: (u'Bad Request: Photo has unsupported extension. Use one of .jpg, .jpeg, # .gif, .png, .tif or .bmp', 400, {u'ok': False, u'description': u'Bad Request: Photo has unsupported extension. Use one of .jpg, .jpeg, # .gif, .png, .tif or .bmp', u'error_code': 400})

Мой файл .png, где я не прав? Если я заменю sendPhoto() на sendDocument(), все работает отлично, но мне нужны фотографии в моем проекте. Если я положил непосредственно graphUrl в sendPhoto, не используя urllib2, он не работает (ошибка 400 - неправильный запрос).

ответ

1

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

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

Имя файла не имеет значения, если расширение соответствует типу изображения.

Вам не нужно делать это при загрузке изображений с локального диска, поскольку расширение файла можно угадать из файловой системы. Однако вы должны сделать это для URL-адреса, потому что расширение файла не может быть получено иначе.

+0

Это нормально работает! Большое спасибо, Telepot отлично! :) – haveswing