我正在从事一个项目,该项目涉及从 Python 将图像上传到 tumblr。我曾幸运地使用 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 来添加该功能——但我无法让它工作。 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 可能有点矫枉过正。
谢谢!
最佳答案
'data': open('../data/media/pics/2009/05-14/100_1167.JPG'),
看起来你只是传入一个文件对象..在那里添加一个.read()
关于python - 图片从 Python 或 cURL 上传到 Tumblr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266194/