2012-02-15 5 views
1

xmlrpcを使ってwordpressにファイルをアップロードしようとしています。私はこれをPHPを使って行ったが、今度はPythonを使わなければならず、何かが動いていない。wp.uploadFile xmlrpc from python base64を符号化します

より具体的には、コーデックスhttp://codex.wordpress.org/XML-RPC_wp#wp.uploadFileまたはmetaWeblog.newMediaObjectで説明されているxmlrpc関数wp.uploadFileを呼び出します。問題はエンコーディングです。 phpから私は汚い作業をしていたクラスを使用しました。明らかにそのトリックをしたixr_base64クラスです。私は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 

。それはワードプレスの最後に正しくデコードされていません。さて、私はこれがワードプレスのせいではないことを知っています。これは前にPHPで行いました。そして、xmlrpcでこのファイルアップロードを可能にするたくさんのアプリ、アンドロイド、イオス、デスクトップ、ウェブがあります。

私が研究しているところから、Pythonはbase64モジュールで、RFC 3548で指定されているようにデータのエンコードとデコードを提供していますが、base64_encodeのPHPではRFC 2045のセクション6.8を使用しています この時点で、私はすべてを試しましたが、これまでのところ何もできません。私はちょうどWordPressの私のメディアページに破損したファイルを取得します。

できるだけお手伝いください。

答えて

4

ok、答えはxmlrpclibクラスにあります。

base64bits = xmlrpclib.Binary(file_content) 

その後、あなたは自分のwp.uploadFileのXMLRPC要求中「ビット」パラメータに変数base64bitsを追加します。あなたがそうのようなxmlrpclibクラスを使用する必要があるのpythonからワードプレスにbase64でビットを送信するために 。もう少し正確には

は、ここに完全なコードはこれを行うべきであるかの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

関連する問題