2013-05-13 3 views
3

В моем приложении я позволяю пользователям публиковать сообщения в твиттере. Теперь я хочу, чтобы они обновили свой статус на носителях.Twython - Как обновить статус с помощью медиа-url

В twython.py я вижу метод update_status_with_media, который считывает изображение из файловой системы и загружает его в твиттер. Мои изображения не находятся в файловой системе, а в ведре S3.

Как сделать эту работу с URL-адресами S3?

Передача url в file_ переменная, сбой при IO Ошибка, нет такого файла или каталога.

Передача StringIO завершается с ошибкой UnicodeDecode.

Передача urllib.urlopen(url).read()file() argument 1 must be encoded string without NULL bytes, not str.

Я также пробовал использовать метод post и получил 403 Запрещено из twitter api, Ошибка создания статуса.

Просто решаемые это

Ба, только что получил его на работу, в конце концов! Может быть, это поможет кому-то еще сэкономить несколько часов, это обошлось мне.

twitter = Twython(
     app_key=settings.TWITTER_CONSUMER_KEY, app_secret=settings.TWITTER_CONSUMER_SECRET, 
     oauth_token=token.token, oauth_token_secret=token.secret 
    ) 
img = requests.get(url=image_obj.url).content 
tweet = twitter.post('statuses/update_with_media', 
           params={'status': msg}, 
           files={'media': (image_obj.url, 
                BytesIO(img))}) 

ответ

1

Рад видеть, что вы нашли ответ! Там Похожая проблема, которую мы обрабатываются в последнее время в repo issue - в принципе, вы можете сделать следующее с StringIO и передавая его непосредственно twitter.post, как вы делали:

from StringIO import StringIO 
from twython import Twython 

t = Twython(...) 
img = open('img_url').read() 
t.post('/statuses/update_with_media', params = {'status': 'Testing New Status'}, files = { 
    'media': StringIO(img) 
    # 'media': ('OrThisIfYouWantToNameTheFile.lol', StringIO(img)) 
}) 

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

+0

на самом деле это то, что дало мне представление о том, как его решить. Я видел это во время поисков после ответа. Но я столкнулся с проблемами, используя 'urllib.urlopen(). Read()' вместе с 'StringIO', продолжал сбой на' UnicodeDecodeError'. То же самое произошло сначала с запросами, потому что я отправился на 'request.get (...). Text', когда я должен был использовать' request.get (...). Content'. – Neara