[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-RPCxmlrpclib ( 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。

Comments

  • Blogger API提借一個參數 appkey,可以讓程式追蹤回應。
  • metaWeblog沒有定義這個appkey,不過使用者可以定義。
  • 程式應該在發生例外時,傳回錯誤訊息。

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}
廣告

, ,

  1. #1 by lueadams5690 on 四月 10, 2016 - 7:03 上午

    I think Jeff’s line of thinking will work better than the fairness argument put forth by 1032. Given the current level of discourse, saying that it is Click http://pepij.nl/youme10070

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: