本帖最後由 hudba 於 2013-6-17 02:45 編輯
4 I# h/ j9 `# A* p5 X: D* a4 c8 a$ {0 a
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
: j9 F) t, S; T2 X2 L
( o8 R. \9 g) s, N準備工作:
% N; v+ o5 A1 {9 R4 K V使用C#調用,推薦vs2010,這裡有下載:2 n3 d$ _; }! @& `! n- ?. @
http://www.microsoft.com/en-us/download/details.aspx?id=12187
- V' ?; q( S. c( C, |程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):7 _' r% j# ~ [, x4 V) ?2 V; d
http://xml-rpc.net/download.html
5 n ~5 c" \8 {, l) }8 |wordpress api的文檔:+ Y @. H. `, F7 l) }7 X0 l
http://codex.wordpress.org/XML-RPC_WordPress_API , y) X: O; X2 X! T% L6 c2 [
要點講述:
+ w. T; \# P8 M( [: L/ @vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
8 H" n8 d. i6 |# X" k! O
( S# }: A7 n' u9 s: j; t t! u- q2 L( B# h
如何新建Post?
9 o8 O7 z& c2 v, h4 j查看wordpress的文檔,找到newPost操作需要傳入的參數:
$ f% h% S7 v I P( a# I' dhttp://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost & e9 F$ \+ o5 c0 x Z
j4 y( X# y3 r6 a+ d其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。% J! g1 X$ x+ B) e
, M; R! A0 Z! F- p' g
定義api調用接口:
2 `7 @1 `1 m; R2 n1 l調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。- public interface IWordpress : IXmlRpcProxy' @* c- \5 _0 N! `' e* F
- {! T2 P9 U+ B. H4 f+ a
- [XmlRpcMethod("wp.newPost")]
6 i+ m; m8 G3 L$ I, ` - string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
6 |* N, R/ T8 k4 o) ]" W# p - }
複製代碼 建立一個方法方便程序裡面調用:- public static string NewPost(string url, string username, string password, string title, string content)8 k6 B) b$ n3 K. i5 i( [$ p: B
- {$ e( b5 }4 f' c* r' U9 F$ P
- IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));6 b) @# v w1 G
- proxy.Url = url;. i+ D/ h- I. l1 ^! x
- NewPostInput postInput;
: O1 i" p* S; Z) [9 b9 _ - postInput.post_title = title;7 s8 @8 M5 ^' j
- postInput.post_content = content;
9 h: X! g% q( E+ m2 J* T3 g0 h - postInput.post_status = "publish";
) B) `+ F) l" Z - 9 N7 E8 N, L: H [, g
- string postId = proxy.NewPost(0, username, password, postInput);. Y X- T+ n5 G. I
- return postId;! ~# ~6 s" C$ j B7 p W* G
- }
複製代碼 這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。* l8 J# r3 L4 Z/ a2 Q; p7 C/ N* f
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:- public struct NewPostInput
, Y6 [% N6 j. ^ - {1 M. h+ @) z0 p/ T
- public string post_title;
7 e2 {$ m* m6 F6 u- t) B& _/ I - public string post_content;
J* J' \- _. e$ N B) ~6 g1 y w" e - public string post_status;
9 a I: x) ~. \& i - }
複製代碼 文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。6 A" j5 Y9 T7 {5 L
# H' _2 H+ A4 Z5 A
如何獲取Post列表?
2 q; Q; a8 |- B同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:- public interface IWordpress : IXmlRpcProxy* I9 m) |9 _# S$ c
- {
: x! b0 p6 e* o/ p- E: g% p- J - [XmlRpcMethod("wp.newPost")]
! ]9 H# y, b! E7 u, H0 } - string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
# u: G3 s i: A' l0 A6 | - + h. U: O, Y% \5 I' J; i9 J
- [XmlRpcMethod("wp.getPosts")]8 U( Y7 E) U9 V+ d
- XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
7 @- b% i8 Y" h* D0 ?& M - }
複製代碼 接下來,建立一個方便用戶調用的方法,GetPosts:- public static XmlRpcStruct[] GetPosts(string url, string username, string password)8 _, ?# J- q0 _
- {+ L( ~; N7 @& y$ E j/ V9 b
- IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));$ R& o$ _, B8 X+ ~
- wordpress.Url = url;, {: a; j, C% j5 U; n! G) U; V6 z. B
- XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);" \) T7 u6 p' P, b+ g# n- {' `
- return ret;" C& [5 c3 L: a. ~
- }
複製代碼 這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:8 p6 @- ~4 m* {8 @# O1 B) O. k
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
& r! Z1 B& x% x: w# U& k, s& v5 m8 c
% p. V7 S, Q8 d8 U) `' m. N% u: v& @
/ ]# N& G$ p' ]
調用wordpress api的url是什麼?- u& P- I8 @* ?( T+ M+ x% K* o
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:* @$ _! @/ `, t6 d/ R( \6 `! ?
http://www.example.com/xmlrpc.php( b' U7 X, ]2 u" b8 h8 t8 D9 j
Z3 t! T" l$ O+ V I7 K很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了 )。/ K: F, g3 s2 \$ {) Q
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:* E7 e$ ]0 x. b% |9 Y. C
WordpressExample.rar
(50.22 KB, 下載次數: 7)
# L+ j% ~) A9 n$ y8 l# k4 B
+ p8 T9 I; h+ {, D9 X' Y
% s3 v1 h( `! p8 p6 o
5 s: y [# e/ }
: _7 @, }, j) D8 }# w
: p( s8 l* W8 W5 J b, q8 g' i' l
) U4 `( p6 e# O
|