本帖最後由 hudba 於 2013-6-17 02:45 編輯
7 T' k) Q4 t* H P- [) j: F
* V" C* x' N" J' C以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。) A( D3 k8 n) Y$ F8 O1 D& ^: ?
% o& r+ g; i6 ?" k; E4 F8 W8 Y準備工作:$ c, M6 |3 f( k! v9 }+ ?
使用C#調用,推薦vs2010,這裡有下載:
* p. w# J$ k& {; \6 u3 R/ nhttp://www.microsoft.com/en-us/download/details.aspx?id=12187 * l: h: p4 ^# |! T4 Q7 [; u! I
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):. @4 Y+ ?7 r+ K. t& R. ^5 q0 _
http://xml-rpc.net/download.html
7 c$ d' V, j5 twordpress api的文檔:9 ]! S* g# B/ ]- i2 B1 i* R! `
http://codex.wordpress.org/XML-RPC_WordPress_API - x2 N7 n# X( s# {# k# x
要點講述:
; i6 s" M K; I% w, n) L: R" }vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
" _9 L9 K1 T& c0 \1 ?' U( N( D1 w7 g
/ D3 m( y* n5 b/ j
% a5 U3 N) ?7 R% E. c" P如何新建Post?
" Z5 i6 c" R- Q" Q! L查看wordpress的文檔,找到newPost操作需要傳入的參數:- O% Q( H# X2 Y0 D& d* W" n
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost , }' r# E4 h! C7 T" z6 T
& B8 [( W5 V3 L |- g9 _ H其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
9 W1 _6 ~2 o. {/ }. {* o9 n& a. t) n9 [8 o" Z
定義api調用接口:0 w2 ]3 x m' F) u" _
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。- public interface IWordpress : IXmlRpcProxy- ]" J; x1 s6 u, I& J% s
- {( H& K: g9 w8 T( O7 H: Z
- [XmlRpcMethod("wp.newPost")]' J: C7 `% w: w O8 J5 W
- string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);2 m! {. h6 q/ E% i+ ~4 V2 X$ j: p" i
- }
複製代碼 建立一個方法方便程序裡面調用:- public static string NewPost(string url, string username, string password, string title, string content)7 _& Z+ d; j5 b! O/ f( ]: s
- {
" u, I5 ^4 o' B - IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
. R, L! K/ l8 M - proxy.Url = url;
N0 Y+ Y0 r& Q- }9 q: d+ n - NewPostInput postInput;
" z6 S' S7 O5 G+ g5 L9 c - postInput.post_title = title;! e% y. K4 R; e$ h8 K" B
- postInput.post_content = content;$ X1 j& u6 T, c0 F* X9 B3 n
- postInput.post_status = "publish";* T ^0 \% h" G' Y7 ^" e
+ h/ L6 s- ?; A' c- string postId = proxy.NewPost(0, username, password, postInput);. k+ C, Z8 i: `
- return postId;
& a: ]- }' V2 o% u2 o9 Y3 F5 ]7 B - }
複製代碼 這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
6 \ |' x7 `: D其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:- public struct NewPostInput
3 v: F+ p6 m* J+ L4 n. {: V7 ~ - {
5 e$ P' o, {$ ] - public string post_title;; k' D4 p9 `/ V7 M+ {) f
- public string post_content;" H9 J* Z% P0 h$ ]) Z# J
- public string post_status;
' ?4 ~# ~# ^' o# p) l - }
複製代碼 文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。0 d" Y6 o# w" Z
4 o$ y7 r+ j! ?+ U2 `7 e7 J1 p
如何獲取Post列表?- v q V, v( s- X- [
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:- public interface IWordpress : IXmlRpcProxy
% S$ N. S+ K5 n& y! c - {
2 w# V& f& p/ H- A, z - [XmlRpcMethod("wp.newPost")]
& |0 K2 q" \2 l7 J, s - string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
- g5 X2 `+ L3 s" e1 @, z
7 K$ Y: m# V. u2 a" n- [XmlRpcMethod("wp.getPosts")]
4 F0 R) C7 z3 r& g - XmlRpcStruct[] GetPosts(int blog_id, string username, string password);- i* X9 O$ o' U4 F- d
- }
複製代碼 接下來,建立一個方便用戶調用的方法,GetPosts:- public static XmlRpcStruct[] GetPosts(string url, string username, string password)
0 I3 ~: d* Q5 D# V8 f$ V3 F0 ? - {$ Z% o {/ T/ _; G2 ^
- IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));. p/ i& [4 z! b: S% |/ ~
- wordpress.Url = url;
" Q* ^2 K2 x0 ?- o - XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);9 a. L* j- B" {: \
- return ret;6 P! \% b! l& D8 C7 H# t; h
- }
複製代碼 這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:: I* }: K0 d" W5 b; ~% [0 b
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
. j) Y7 c( `' w: {
4 k! q8 T" i" ?4 w* t( @
m( c( V* Z9 D2 Y6 }0 J調用wordpress api的url是什麼?' o2 l5 ~5 J* L& u5 E7 O' W! x
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
) Y; j; Y* o6 w8 B1 p0 Uhttp://www.example.com/xmlrpc.php5 l9 {. v' A4 e6 b4 L, n
7 j" E: J$ Z' g& e0 U
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了 )。0 E0 z3 a) M3 ], F' l O V
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
. m, H5 |/ g# ?4 v4 v3 Y
WordpressExample.rar
(50.22 KB, 下載次數: 7)
. J9 S+ e% J. ~+ s
$ s* D/ J7 N1 T- Z5 C4 N# ]: v& X
$ p& c& Q% M1 Q
( E- W. O$ C1 {/ Y+ w& K6 @
% o/ L% C$ j K( B, ~- h
0 t: G' N" C2 F+ r |