本帖最後由 hudba 於 2013-6-17 02:45 編輯 4 `/ M+ N& \: }% `5 V
. a; V9 \6 r5 O& B% \
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。4 b7 M2 J4 N/ ~* b3 i
9 N1 X5 R* Z; T9 D7 e9 k4 a" R
準備工作:% |6 k, i7 r$ H% n! z6 @8 V9 k" I
使用C#調用,推薦vs2010,這裡有下載:. U/ O5 ~8 m! h$ p! D
http://www.microsoft.com/en-us/download/details.aspx?id=12187 5 [, u f' f) q8 p- d. F+ G2 s
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
4 i. U$ V* x7 M" i Zhttp://xml-rpc.net/download.html 1 g3 T9 b2 p$ u' X
wordpress api的文檔:
8 s6 G5 d' ~! {3 c$ lhttp://codex.wordpress.org/XML-RPC_WordPress_API
. ?# n4 z/ m( s8 l要點講述:
3 D3 b$ l' h5 f: ?vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:# e, ]9 R! ^4 n
) |6 ], b. J& g8 \' E( T3 \% t: v! c$ f/ O' V# m2 }! Z
如何新建Post?
$ K7 b1 c/ @ e, h查看wordpress的文檔,找到newPost操作需要傳入的參數:' r$ F7 @$ e& M a9 f
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost : T# a9 h, Y2 \" M
$ f4 t- \2 J. K) { u
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。3 M* B. a# y+ R- m+ c
) S% w2 c m( w8 v) c. a定義api調用接口:
. D ^: d4 W1 m+ B調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。- public interface IWordpress : IXmlRpcProxy
+ K2 l8 T/ U- \4 V$ Q/ Y1 D - {" }+ b! ]& P" z
- [XmlRpcMethod("wp.newPost")]) k3 J+ z* z/ t2 E$ t$ M" Y K- }5 p% d' O r
- string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
4 N" q3 y$ b1 M- J& k3 P - }
複製代碼 建立一個方法方便程序裡面調用:- public static string NewPost(string url, string username, string password, string title, string content)- [+ W% e) ^% p+ r
- {
/ T I* F( S# |. B7 R - IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
4 Y8 d% O6 X; S. H) c( `& h - proxy.Url = url;: @7 u9 D2 t8 q" y
- NewPostInput postInput;
! F v3 z! B% w2 l! ~! I0 D - postInput.post_title = title;. D; k: T: T; c; }
- postInput.post_content = content;% J: a3 b% |9 ~- k8 g, \
- postInput.post_status = "publish";
0 ?6 z7 F8 ]0 _6 P, q8 X
* Q0 q7 @% }/ ^+ t* Z- string postId = proxy.NewPost(0, username, password, postInput);
0 @" E& H6 D( G, ]+ Q" i: R: v - return postId;
1 X/ E6 J2 T* T4 j4 v% x- q - }
複製代碼 這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。8 i1 `. Z3 K( T) h7 i
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:- public struct NewPostInput
. j- J. h$ X, K, Q. T - {
6 X0 L+ j6 i) ^1 Y/ o3 ~ - public string post_title;
$ |6 l# \2 L8 X* Y, ~+ o - public string post_content;. Q$ S6 l; {0 X" C7 l9 V% u
- public string post_status;5 W8 h( ]& Q' M
- }
複製代碼 文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
- X" {" Z% j* q, k" S) y' o* E" i* ~% s3 A
如何獲取Post列表?
: f8 `& q2 w G* M同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:- public interface IWordpress : IXmlRpcProxy$ ^5 E" v8 s% T% y
- {% C3 @4 Q0 ]8 I! p6 j) z" i: c
- [XmlRpcMethod("wp.newPost")]
3 w& m) j8 \7 Q, }7 d% D) r1 z6 J - string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);$ m* d' R" ?6 p( ~
8 I! Z n7 R* c9 P$ t- [XmlRpcMethod("wp.getPosts")]
, z( K5 H# K8 w l/ ^, }6 C+ T - XmlRpcStruct[] GetPosts(int blog_id, string username, string password);, s r3 E- Q& C/ |0 E6 f
- }
複製代碼 接下來,建立一個方便用戶調用的方法,GetPosts:- public static XmlRpcStruct[] GetPosts(string url, string username, string password)$ K& Q$ l) a+ G; W7 O
- {/ v- F' V& \" M" f. n8 t7 W- k
- IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
' x0 S, o8 U% `6 r! k+ U: B - wordpress.Url = url;
5 H" [( G' c. {( ?% o - XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
+ w6 C7 Z# i" T4 T - return ret; t2 e: a- Q- R6 f5 G9 h& @' X$ o9 {
- }
複製代碼 這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:6 u1 b+ m' c/ ?; R. t6 L, N' M
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
* X7 \6 B s& C) m, j
; Z, [) `5 @5 ^. B
- U2 U# f# w: o: K調用wordpress api的url是什麼?
6 C! n4 s" w9 H' c/ {2 rwordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
) V' n" C1 y6 h9 _& ihttp://www.example.com/xmlrpc.php, ^5 i P B5 R: v% O2 E' m
# ~7 r8 Q9 r" K8 V很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了 )。
" X, E T; j% \4 Z! S4 w希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:, {6 H7 k: T& l
WordpressExample.rar
(50.22 KB, 下載次數: 7)
1 M4 f2 M; P, S9 a
* W) p# r# N2 t2 `
/ [# |1 o, T! | L( R" ^+ ]/ S. Y3 a- T
3 {1 l: q# H; d, k) r3 e; P
& ]( z: Z7 A; k9 ^7 t) W
* B+ E+ R3 o G( ]# o
|