2012-02-15 87 views
1

我想在wordpress上使用xmlrpc上传文件。我已经完成了这个使用PHP,但是这次我必须使用python,而某些东西不起作用。wp.uploadFile xmlrpc python encode base64

更具体地说,执行此操作的方法是调用在codex这里代码http://codex.wordpress.org/XML-RPC_wp#wp.uploadFile或metaWeblog.newMediaObject中解释的xmlrpc函数wp.uploadFile。问题是编码。从PHP我使用了一个做脏工作的类。即ixr_base64类,完全可以做到这一点。在python中,我尝试导入base64lib并使用它的b64encode函数,但它不起作用。

要更加具体,这里是我使用的Python代码:

import xmlrpclib 
import urllib2 
import base64 
def get_url_content(url): 
    try: 
     content = urllib2.urlopen(url) 
     return content.read() 
    except: 
     print 'error!' 

file = get_url_content('http://www.legaljuice.com/Fly.jpg') 
file = base64.b64decode(file) 
server = xmlrpclib.Server('http://localhost/xmlrpc.php') 
xarr = ['1', 'admin', 'pass', {'name':'sssaaa.jpg', 'type':'image/jpeg', 'bits':file, 'overwrite':'true'}] 
result = server.metaWeblog.newMediaObject(xarr) 
print result 

它不这样做的伎俩。它在wordpress的结尾不能正确解码。现在,我知道这不是WordPress的错,因为我以前用php做过这个,并且有大量的应用程序,android,ios,desktop和web,使得这个文件上载可以使用xmlrpc。

从我研究过的,python与base64模块提供的数据编码和解码在RFC 3548中指定,而php与base64_encode使用RFC 2045第6.8节 在这一点上,我卡住了。我尝试了一切,但目前为止没有任何工作。我只是在wordpress的媒体页面上损坏了文件。

请帮助,如果你可以。

回答

4

好的,答案在于xmlrpclib类。 为Base64位从蟒蛇发送到WordPress,你需要使用的xmlrpclib类,像这样:

base64bits = xmlrpclib.Binary(file_content) 

然后你只需要添加变量的“位”参数base64bits在wp.uploadFile XMLRPC请求。

是一个小更确切的说,这里是在python的完整代码的这个应该怎么做:

import xmlrpclib 
import urllib2 
from datetime import date 
import time 

def get_url_content(url): 
     try: 
      content = urllib2.urlopen(url) 
      return content.read() 
     except: 
      print 'error! NOOOOOO!!!' 
file_url = 'http://the path to your picture' 
extension = file_url.split(".") 
leng = extension.__len__() 
extension = extension[leng-1] 
if (extension=='jpg'): 
    xfileType = 'image/jpeg' 
elif(extension=='png'): 
    xfileType='image/png' 
elif(extension=='bmp'): 
    xfileType = 'image/bmp' 

file = get_url_content(file_url) 
file = xmlrpclib.Binary(file) 
server = xmlrpclib.Server('http://website.com/xmlrpc.php') 
filename = str(date.today())+str(time.strftime('%H:%M:%S')) 
mediarray = {'name':filename+'.'+extension, 
      'type':xfileType, 
      'bits':file, 
      'overwrite':'false'} 
xarr = ['1', 'USERHERE', 'PASSWORDHERE', mediarray] 
result = server.wp.uploadFile(xarr) 
print result 
+0

工作般的魅力!谢谢 – Amit 2017-07-10 16:53:38