本帖最後由 hudba 於 2013-6-17 02:45 編輯 , E! \. y8 k; ^" b7 Q1 S
! K4 I# p& \+ c% y6 Z3 [
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。' }8 ] |- _1 `$ Y
0 {6 Z ] f4 u" H# h
準備工作:
/ T4 Z3 \. H' j4 A: M8 K使用C#調用,推薦vs2010,這裡有下載:
0 ^9 s4 n1 u, f8 whttp://www.microsoft.com/en-us/download/details.aspx?id=12187
( \8 V' o/ R: E3 j& i程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):" t4 ~: i6 R0 N$ b5 d( A
http://xml-rpc.net/download.html
: t- h1 ]5 v- _. C% w6 fwordpress api的文檔:
: Y9 f! [ L( K% s% l( P' n7 Ahttp://codex.wordpress.org/XML-RPC_WordPress_API # O9 `$ s2 i3 |& k, F. l
要點講述:
" _5 ~" Q, G" s& cvs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
/ v" b! E, J# W
- y7 r, ] I) D( j- E% z
+ R2 W, O# X7 ~0 ]如何新建Post?; j; \- W1 |7 h) N. b
查看wordpress的文檔,找到newPost操作需要傳入的參數:
9 h; a3 `4 i; r' f. d$ d. Q7 chttp://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
0 F i% @ x W( \: w
4 p# E3 o: F. g5 H2 c) X其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
, U1 Q$ U- M4 W6 u5 F& m: B$ A/ b ^& t. l9 F* P" k( Z+ v
定義api調用接口:
1 e' L% H* N1 V調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。- public interface IWordpress : IXmlRpcProxy
8 o# g) }0 o0 T - {
F. O& y5 G5 o/ W+ G8 d2 w8 w; q+ S& Y - [XmlRpcMethod("wp.newPost")]+ t/ A$ p- u0 D% b1 G$ }8 L
- string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);" N8 }/ t8 z& E
- }
複製代碼 建立一個方法方便程序裡面調用:- public static string NewPost(string url, string username, string password, string title, string content)) F" t h% Z" F" b {8 z) B
- {$ M* t& F) {+ ]
- IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
% s }$ e0 R3 l! L4 D$ e& e - proxy.Url = url;6 a. E$ K) t, X
- NewPostInput postInput;
% l9 J9 A( ^' R$ o8 f3 I8 I* Q0 y - postInput.post_title = title;
2 C9 Z+ A. G/ i - postInput.post_content = content;
2 ^% C5 e6 f6 u - postInput.post_status = "publish";
. d; K T; \2 e( C% [' t# R; Q" K
, M* r: V' z: E& E0 a3 z& W6 @- string postId = proxy.NewPost(0, username, password, postInput);6 _/ O. Z5 T/ _4 }) N
- return postId;
1 D: }: M# r, A5 f, H6 U6 R - }
複製代碼 這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
0 z6 G3 ?; {: z) ^7 v3 W& V8 F& Z其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:- public struct NewPostInput9 y! D4 S6 { C: ?4 x2 z5 N. n
- {
% {: t" X! F7 N* v. k7 I2 J - public string post_title;
9 K7 [& S7 [( P# | - public string post_content;
- J: k T$ r# A/ D2 |2 Z2 g7 I - public string post_status;
# p, K3 }$ S/ G8 q - }
複製代碼 文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。! g/ `! v' Q; `3 S4 |9 F
# W t: c U- Z p' P, ^% C如何獲取Post列表?; D1 F( W1 Q& B" i
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:- public interface IWordpress : IXmlRpcProxy4 b7 i; }9 G0 j; I
- {
- v1 T- v/ c! g5 {, L - [XmlRpcMethod("wp.newPost")]
, }- v" j% [4 Q7 A1 z - string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);. s) u$ w8 g) h/ S
5 C8 G, u; L2 [7 Q- [XmlRpcMethod("wp.getPosts")]
6 Y8 U* X# m2 ?5 h - XmlRpcStruct[] GetPosts(int blog_id, string username, string password);* r7 q5 J. @4 B: o/ h7 Y1 p
- }
複製代碼 接下來,建立一個方便用戶調用的方法,GetPosts:- public static XmlRpcStruct[] GetPosts(string url, string username, string password)% F$ B: `2 c) M/ h
- {
, e# C$ K |6 d% M9 b2 S7 B - IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));& U0 Z5 P8 L m5 X
- wordpress.Url = url;
5 m. {% y+ T2 v( {$ ~, t E% _( H - XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
! k: X8 h! Z# G" x( k5 I - return ret;
9 ?( e/ q2 w% c* [. | - }
複製代碼 這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
5 @) |+ `6 _ K$ q( c r0 n3 {' ehttp://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost A+ I1 [7 _+ N8 d/ k* p( v: x9 t
+ [) V7 `- l5 S
2 N- K& i+ r# X調用wordpress api的url是什麼?
7 V2 r, E: D: J# k2 C+ {wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
4 a# g9 j6 p9 _6 j: {1 ehttp://www.example.com/xmlrpc.php t5 {8 g3 x) L0 c2 i) j/ D, I$ E' m
( u( A! z7 j' m很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了 )。* H6 f; E7 V8 E- @4 W, C8 `
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
# q0 K. Z$ O0 u
WordpressExample.rar
(50.22 KB, 下載次數: 7)
u) Y4 y8 {" f' N& q
" F5 S. Y! P5 z$ q; I9 Z1 u) w% E, c9 O1 l2 f) x( ?
& k$ Z G/ C+ t6 n% G0 f
- P) v( ]; `9 J/ {
, @ T3 Q* S- b
1 y. W4 Y" p) n" _4 Z. Y |