2012-02-15 53 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

相關問題