过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 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 ref-xmlrpc.JPG
( 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' d
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
& e9 F$ \+ o5 c0 x  Z
newpost.JPG
  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裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy' @* c- \5 _0 N! `' e* F
  2. {! T2 P9 U+ B. H4 f+ a
  3.     [XmlRpcMethod("wp.newPost")]
    6 i+ m; m8 G3 L$ I, `
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    6 |* N, R/ T8 k4 o) ]" W# p
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)8 k6 B) b$ n3 K. i5 i( [$ p: B
  2. {$ e( b5 }4 f' c* r' U9 F$ P
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));6 b) @# v  w1 G
  4.     proxy.Url = url;. i+ D/ h- I. l1 ^! x
  5.     NewPostInput postInput;
    : O1 i" p* S; Z) [9 b9 _
  6.     postInput.post_title = title;7 s8 @8 M5 ^' j
  7.     postInput.post_content = content;
    9 h: X! g% q( E+ m2 J* T3 g0 h
  8.     postInput.post_status = "publish";
    ) B) `+ F) l" Z
  9. 9 N7 E8 N, L: H  [, g
  10.     string postId = proxy.NewPost(0, username, password, postInput);. Y  X- T+ n5 G. I
  11.     return postId;! ~# ~6 s" C$ j  B7 p  W* G
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。* l8 J# r3 L4 Z/ a2 Q; p7 C/ N* f
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    , Y6 [% N6 j. ^
  2. {1 M. h+ @) z0 p/ T
  3.     public string post_title;
    7 e2 {$ m* m6 F6 u- t) B& _/ I
  4.     public string post_content;
      J* J' \- _. e$ N  B) ~6 g1 y  w" e
  5.     public string post_status;
    9 a  I: x) ~. \& i
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。6 A" j5 Y9 T7 {5 L
# H' _2 H+ A4 Z5 A
如何獲取Post列表?
2 q; Q; a8 |- B同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy* I9 m) |9 _# S$ c
  2. {
    : x! b0 p6 e* o/ p- E: g% p- J
  3.     [XmlRpcMethod("wp.newPost")]
    ! ]9 H# y, b! E7 u, H0 }
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    # u: G3 s  i: A' l0 A6 |
  5. + h. U: O, Y% \5 I' J; i9 J
  6.     [XmlRpcMethod("wp.getPosts")]8 U( Y7 E) U9 V+ d
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    7 @- b% i8 Y" h* D0 ?& M
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)8 _, ?# J- q0 _
  2. {+ L( ~; N7 @& y$ E  j/ V9 b
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));$ R& o$ _, B8 X+ ~
  4.     wordpress.Url = url;, {: a; j, C% j5 U; n! G) U; V6 z. B
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);" \) T7 u6 p' P, b+ g# n- {' `
  6.     return ret;" C& [5 c3 L: a. ~
  7. }
複製代碼
這裡返回的是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 getposts.JPG % 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

評分

參與人數 1點點 +20 收起 理由
月光飞燕 + 20 谢谢分享!

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
6 d& y0 a! W+ p; i$ [ wp-example.png
: ^& M8 Y3 i5 [1 g4 |$ _# ~ WordpressExample.rar (50.22 KB, 下載次數: 2) . c9 V# g9 b9 ~2 V8 s
! T$ o  n5 N- ?7 ], L
+ c8 m  \* h  e8 R; ?) j

- ?" N' \/ X/ H! u( A* b
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
, L( @" Y1 ~( D8 U/ z- @" R- w" ^. k% X5 s& T# d" T' X8 N
你的帖子是非常好的帖子8 w4 @8 c) s  L8 G) T. ]' y) ~
! X, [* h5 s9 ?- K
可惜的是,這裡沒多少人懂程序$ B/ K2 D: i! L2 n: Z, @
! @! |& n* G8 V
但是我懂,我給你加分了" n! K( |% O$ e5 T) I
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
2 N, z3 _. J0 F" P. J2 T0 o( E# j2 W) R( |3 O8 M% D" }
我可以告訴你我怎麼管理站群# |1 x' p6 Y' _* R1 g% C7 ~2 n# ]+ W& x
1 _+ D0 S3 k0 l4 g1 S

0 J& H2 i+ }7 C+ G6 |編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有0 x/ L( L- b: h( s) q' X* H

' A- N0 t% e9 f6 f2 O$ ]3 }所有發佈的文章都在中心程序自己的獨立數據庫裡面
+ _* r/ C$ r3 q8 X  {# |( L- p* C# Z, d, f& ]. F
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序  j& q( s, V! A6 P+ X8 ?3 |

5 J' k5 d) M! n; p通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
; P. t7 M1 n9 }  C7 `3 z
: u& j9 E7 W+ p9 I* [# Z* f這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
+ Q$ X1 N3 q6 k- o' d& `, W  @7 ~; M
所有的文章在中心程序裡面產生
% l7 g* `0 m* P% l! D
  d  g& a4 c+ y希望你看明白了
1 V. }, q$ ^: E& ]* h6 P

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时COPY到子站点数据库  詳情 回復 發表於 2013-6-21 20:45
谢谢moon light mm的分享,你的这个想法挺好的,感觉是个好东西。中心程序和网站程序都不和wp沾边吗?那comment等,wp这些动态交互的功能就没有了吧。 站点多了后,最好有个工具把这些活都包了或者管理好:数据每日  詳情 回復 發表於 2013-6-17 13:36
回復 给力 爆菊

使用道具 舉報

 樓主| 發表於 2013-6-17 13:36:26 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
1 L- t" B8 D- B你是這樣管理站群的?3 ~/ h8 t) t+ n3 }; v; X

. b) @# q; y& S0 d3 {; U2 [我可以告訴你我怎麼管理站群

( W+ _3 k7 V# P謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。( [3 ^2 q* R$ {% q7 c8 }- N
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的), s+ P5 c8 X# J4 B
0 O/ p. n+ T$ l5 H
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機- Z" ]* W- y+ U
http://sshnet.codeplex.com/
* O1 y6 i- b. }' D8 }) [( vhttp://www.libssh.org/

1 w' b. k% d: J! u( E6 w) `& M我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。0 f; D" j" p( u6 X* p

+ e) G% w) \% `+ N+ Q7 d; z2 `( q
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,1 ?: A6 c7 G( I% l8 H$ r
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
# D* L. X4 E& B你是這樣管理站群的?, f1 {0 ^8 T/ K, R
% H8 P0 L5 M  }, U4 t
我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
3 t! V) q) K0 g  Q! j3 T9 |& Z( J0 Z# _" C0 d5 D
回復 给力 爆菊

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 免费注册

本版積分規則

點基

GMT+8, 2026-3-15 03:17

By DZ X3.5

小黑屋

快速回復 返回頂部 返回列表