Загрузка изображений с Python или cURL в Tumblr?



Я работаю над проектом, который включает в себя загрузку изображения в tumblr с Python. Мне повезло использовать API Tumblr (http://www.tumblr.com/docs/en/api ) при выполнении обычных текстовых сообщений, но загрузка изображений доставляла мне проблемы. Сообщения об ошибках, которые их сервер возвращает, были ограничены просто сообщением мне, что была "ошибка загрузки фотографии", которая была менее чем полезной.



Поскольку их API, похоже, основан на использовании стандартных операций HTTP POST, я знаю, что должен быть способ сделать это. К сожалению, за последние несколько дней я не продвинулся ни на шаг и решил побеспокоить вас по этому поводу.



Я пробовал использовать библиотеки curl и python: httplib, urllib, urllib2 и стороннюю библиотеку под названием urllib2_file (http://fabien.seisen.org/python/urllib2_file/). я разочарован тем, что не смог заставить их работать-но я готов попробовать другие дополнительные приложения для терминалов, которые вы можете придумать.



Каждый метод прекрасно работает с простыми текстовыми сообщениями, но каждый из них, похоже, не позволяет правильно загрузить фотографию.



Вот мой синтаксис для этого с помощью urllib2_file. Поскольку urllib2 не поддерживает методы "multipart/form-data" для загрузки данных, я использую urllib2_file, чтобы добавить эту функциональность-но я не смог заставить ее работать. Api tumblr говорит, что их серверы принимают данные multipart / form, а также "обычный post" метод для загрузки файлов. Я был бы счастлив, если бы ... либо работать.



import urllib, urllib2, urllib2_file

url = "http://www.tumblr.com/api/write"
values1 = { 'email':'EMAIL',
'password':'PASSWORD',
'type':'regular',
'title':'Pythons urllib2',
'body':'its pretty nice. Not sure how to make it upload stuff yet, though. Still getting some "error uploading photo" errors... So unhelpful.'}
values2 = { 'email':'EMAIL',
'password':'PASSWORD',
'type':'photo',
'data': open('../data/media/pics/2009/05-14/100_1167.JPG'),
'caption':'Caption'}
data = urllib.urlencode(values2)
print "just before defining the request"
req = urllib2.Request(url,data)
print "just before doing the urlopen."
#response = urllib2.urlopen(req)
try:
response = urllib2.urlopen(req)
except urllib2.URLError, e:
print e.code
print e.read()
print "figure out how to handle .read() properly"
#the_page = response.read()
#print the_page
print "done"


Это был бы идеальный способ, если бы он работал, так как использование словарей для определения полей действительно легко, и я мог бы сделать его намного чище в будущем.



Любой совет о том, как устранить неполадки, которые могут пойти не так, будет оценен. На данный момент я не знаю, как узнать, что может пойти не так. Я хотел бы иметь объем внимания для http RFC.



Я рассматривал возможность обнюхивания пакетов между моим компьютером на сервере - но обратное проектирование HTTP может быть излишним.



Спасибо!

674   2  

2 ответов:

                 'data': open('../data/media/pics/2009/05-14/100_1167.JPG'),

Похоже, вы просто передаете файловый объект .. добавить .read() в

Tumblr имеет API v2, определенный для Python. Вы можете найти его в GitHub PyTumblr.

Я использовал его для создания инструмента на основе терминала для использования tumblr, который называется teblr. Вы можете найти исходный код здесь: https://github.com/vijaykumarhackr/teblr/

Comments

    Ничего не найдено.