Я работаю над проектом, который включает загрузку изображения в tumblr из Python. Мне повезло с использованием API Tumblr (http://www.tumblr.com/docs/en/api) при регулярных текстовых сообщениях, но загрузка изображений давала мне проблемы. Сообщения об ошибках, полученные их серверами, были ограничены тем, что я просто сказал, что есть «Ошибка загрузки фото», которая была менее чем полезной.Загрузка изображения с Python или cURL в Tumblr?
Поскольку их 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 для добавления этой функциональности, но я не смог заставить его работать. Tumblr api говорит, что их серверы принимают multipart/form-data, а также метод «обычного сообщения» для загрузки файлов. Я был бы счастлив, если бы он работал.
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-запрос может быть излишним.
Спасибо!
Не просите нас просить его - предлагайте свои попытки. –
Достаточно честный. Извините, что я не сделал этого для начала. – Cheesemold
Curl один лайнер работает на моем компьютере: curl -v -F "[email protected]" -F "password = mypassword" -F "type = photo" -F "data = @ C: \ Dir \ Photo. jpg "http://www.tumblr.com/api/write Если это не сработает, отредактируйте в подробном выводе из curl. – NorthGuard