图像从Python或cURL上传到Tumblr?

时间:2010-07-16 15:02:57

标签: python http post curl tumblr

我正在开发一个涉及从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可能有点过分。

谢谢!

2 个答案:

答案 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/