我正在开发一个涉及从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以及上传文件的'normal 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可能有点过分。
谢谢!
答案 0 :(得分:2)
'data': open('../data/media/pics/2009/05-14/100_1167.JPG'),
看起来你只是传入一个文件对象..在那里添加.read()
答案 1 :(得分:0)
Tumblr为Python定义了API v2。您可以在GitHub PyTumblr找到它。
我用它来创建一个基于终端的工具来使用tumblr,这个工具叫做teblr。您可以在此处找到源代码:https://github.com/vijaykumarhackr/teblr/