[Python] XML-RPC wordpress editing
WordPress支援 XML-RPC ,可以用支援的api來操作blog上的內容。
目前wordpress有支援 metaWeblog,MoveableType,Wordpress,Blogger四種api。
其中的 WordPress API是依 MoveableType API改進來的
XML-RPC是什麼東西?
XML-RPC 是 Remote Procedure Call , 和遠端的程式通訊時用的協定,內容用XML來傳輸。
類似的還有 JSON-RPC ,內容是JSON。
在 Python 下操作 XML-RPC 的 xmlrpclib ( xmlrpc.client in Python3)
metaWeblog API
metaWeblog [2] (2002) 是一個API的標準,提供程式存取blog內容的能力,建立在 XML-RPC 上。
基本上metaWeblog API(MWA)是在Blogger API的基礎上改進而成的標準。
標準函式
metaWeblog 定義了三個標準的函式:
metaWeblog.newPost (blogid, username, password, struct, publish) returns string(postid) metaWeblog.editPost (postid, username, password, struct, publish) returns true metaWeblog.getPost (postid, username, password) returns struct(blog content)
以 CRUD (Create,Read,Update,Delete)來看,好像少了 Delete的功能?
struct
blog的內容,以 key:value的結構儲存,python的話,是用dict。
三個基本的元素
- title : blog article的標題
- link : blog article的鏈結
- description : <body> 內的本文
其他
- categories : 分類名字,empty,或是array
- Server看不懂的元素,就會忽視。
- 呼叫 metaWeblog.newPost or metaWeblog.editPost ,如果 struce有flNotOnHomePage(boolean)的元素,blog article會被設為隱形?或在特別的 cotegory才看的到。
- 原文網站上有 request,response,和傳回 post的XML文字檔例子。
metaWeblog.newMediaObject
metaWeblog.newMediaObject (blogid, username, password, struct) returns struct
其中的struct 要包含最少有
- name :string,用來決定物件檔案存放的指標,類似 unique_id的功能
- type :string,物件型態, MIME之類的, audio/mepg…
- bits :base64數值,用來存內容物件
可自行定義其他的元素,但傳回值中要包含http,or ftp url。
metaWeblog.getCategories
metaWeblog.getCategories (blogid, username, password) returns struct 每個 Category會傳回一個struct, struct包含, description, htmlUrl, rssUrl
metaWeblog.getRecentPosts
metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts) returns array of structs 傳回最近的文章的陣列,如果 numberOfPosts = 1, 表示這篇是最新的文章。2表示次新,以下類推。 如果 numberOfPosts 大於blog所有文章數,表示已傳回所有文章。
其他
上面用到的元素大多沒有屬性。另有一些其他有屬性的元素(ex: source,enclosure,category…)。
RSSS 2.0 支援 namespaces,可以在自已定義自已的 namespace。
WordPress API
WordPress目前支援的 XML-RPC 介面有 metaWeblog API , Movable Type API , Blogger API , 還有自家的Wordpress API。
Wordpress API = 依Movable Type API,定義的API。命名空間用 wp 。
API的 URL是 http://example.com/wordpress/xmlprc.php
metaWeblog定義了基本的函式。其他一些比較細節的操作,可以要試試看Wordpress API,或是另兩種。
WordPress中的 post 操作,用metaWeblog的函式來取得。wordpress 中的 page就是頁首的Tab(分頁),在Wordpress API裡。
XMLRPC in python
- xmlrpclib (python2), xmlrpc.client(python3)
- 可以用 import xmlrpc.client as xmlrpclib
或是用 2to3之類的工具來轉換
這邊參考 [4] 的例子改寫:
import datetime, xmlrpclib
wp_url = "http://www.example.com/xmlrpc.php"
username = "someuser"
password = "secret"
blogid = ""
status_draft = 0
status_published = 1
server = xmlrpclib.ServerProxy(wp_url)
# 取得最近的post
posts = server.metaWeblog.getRecentPosts(blogid,username,passoword,'10') # 取回最近十篇post
title = "Title with spaces"
content = "Body with lots of content"
date_created = xmlrpclib.DateTime(datetime.datetime.strptime("2009-10-20 21:08", "%Y-%m-%d %H:%M"))
categories = ["somecategory"]
tags = ["sometag", "othertag"]
data = {'title': title, 'description': content, 'dateCreated': date_created, 'categories': categories, 'mt_keywords': tags}
Comments