Загрузка изображений из Python или cURL в Tumblr? - PullRequest
3 голосов
/ 16 июля 2010

Я работаю над проектом, который включает загрузку изображения в Tumblr из Python. Мне повезло, используя Tumblr API (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-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 может быть излишним.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 16 июля 2010
                 'data': open('../data/media/pics/2009/05-14/100_1167.JPG'),

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

0 голосов
/ 31 октября 2016

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

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

...