过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 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 w
http://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 A
http://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 ref-xmlrpc.JPG
- 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 c
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

0 F  i% @  x  W( \: w newpost.JPG
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裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    8 o# g) }0 o0 T
  2. {
      F. O& y5 G5 o/ W+ G8 d2 w8 w; q+ S& Y
  3.     [XmlRpcMethod("wp.newPost")]+ t/ A$ p- u0 D% b1 G$ }8 L
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);" N8 }/ t8 z& E
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)) F" t  h% Z" F" b  {8 z) B
  2. {$ M* t& F) {+ ]
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    % s  }$ e0 R3 l! L4 D$ e& e
  4.     proxy.Url = url;6 a. E$ K) t, X
  5.     NewPostInput postInput;
    % l9 J9 A( ^' R$ o8 f3 I8 I* Q0 y
  6.     postInput.post_title = title;
    2 C9 Z+ A. G/ i
  7.     postInput.post_content = content;
    2 ^% C5 e6 f6 u
  8.     postInput.post_status = "publish";
    . d; K  T; \2 e( C% [' t# R; Q" K

  9. , M* r: V' z: E& E0 a3 z& W6 @
  10.     string postId = proxy.NewPost(0, username, password, postInput);6 _/ O. Z5 T/ _4 }) N
  11.     return postId;
    1 D: }: M# r, A5 f, H6 U6 R
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
0 z6 G3 ?; {: z) ^7 v3 W& V8 F& Z其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput9 y! D4 S6 {  C: ?4 x2 z5 N. n
  2. {
    % {: t" X! F7 N* v. k7 I2 J
  3.     public string post_title;
    9 K7 [& S7 [( P# |
  4.     public string post_content;
    - J: k  T$ r# A/ D2 |2 Z2 g7 I
  5.     public string post_status;
    # p, K3 }$ S/ G8 q
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有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裡面:
  1. public interface IWordpress : IXmlRpcProxy4 b7 i; }9 G0 j; I
  2. {
    - v1 T- v/ c! g5 {, L
  3.     [XmlRpcMethod("wp.newPost")]
    , }- v" j% [4 Q7 A1 z
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);. s) u$ w8 g) h/ S

  5. 5 C8 G, u; L2 [7 Q
  6.     [XmlRpcMethod("wp.getPosts")]
    6 Y8 U* X# m2 ?5 h
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);* r7 q5 J. @4 B: o/ h7 Y1 p
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)% F$ B: `2 c) M/ h
  2. {
    , e# C$ K  |6 d% M9 b2 S7 B
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));& U0 Z5 P8 L  m5 X
  4.     wordpress.Url = url;
    5 m. {% y+ T2 v( {$ ~, t  E% _( H
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    ! k: X8 h! Z# G" x( k5 I
  6.     return ret;
    9 ?( e/ q2 w% c* [. |
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
5 @) |+ `6 _  K$ q( c  r0 n3 {' e
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
  A+ I1 [7 _+ N8 d/ k* p( v: x9 t
getposts.JPG
+ [) 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

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。1 |/ q5 s) R, M5 N/ U
wp-example.png : G# G/ q4 O& t! Y, k
WordpressExample.rar (50.22 KB, 下載次數: 2)
4 w! j5 u7 r. Y+ A2 b0 ~. l9 F6 o- }' a2 x, D$ e# g' r
0 x! C( ^% f8 |

, J% k( h" M" H$ U2 E% s! W! q
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
. U, u6 g; l5 O+ R5 K- l7 u( G8 o) u- t0 X$ x$ t
你的帖子是非常好的帖子) Q/ h$ F1 a; R$ Y  i  g$ H: p
* s* F& ?1 u  q( j. w' Q$ H) \% f
可惜的是,這裡沒多少人懂程序' `* ?8 K! x' q9 K

6 g. Q4 D, @5 A6 B: p* y  K7 O- T但是我懂,我給你加分了7 e2 M. q: T8 T0 l& c9 I
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?! c3 q  I5 e3 R0 R' C' D* M7 T

& ]$ b( q; `( ?3 \我可以告訴你我怎麼管理站群
4 |2 s3 Z! P, |* j: N
5 e7 \+ b) P" I3 e8 {2 p5 Z2 ^
5 _# ]  F7 {" v3 P編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
' T- y% t6 F7 N3 ?% P
$ d: t+ @: @) D# k% b* Z6 v3 ]3 y所有發佈的文章都在中心程序自己的獨立數據庫裡面) E5 v- `) T- Y
' S' f7 v; ?2 |% E6 E9 z
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
3 ?9 o/ j4 K( }$ d& E0 W
' }/ H0 y1 e1 b3 s通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
- Y+ M' W9 v# p3 {& C/ U, \7 ^) L1 X0 y' q! Z! _1 p5 w+ n; B2 x
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化' v& Z& v3 ]$ R+ U$ u/ w
: `& {% [9 T% F+ W6 ?/ t, E1 R5 `) P
所有的文章在中心程序裡面產生
0 m; P" D' \0 S" \$ F, Q# n
7 m6 Q9 K% \& ~8 T: l希望你看明白了9 P! S( o7 ]' j& U

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 # Z+ e( N" w  k1 @
你是這樣管理站群的?7 m0 ~; S! u7 V) f' }3 v* o4 y; m
* Y: u% h2 O4 I, g5 @
我可以告訴你我怎麼管理站群
7 Z( c0 h, k8 Z; h  A. J2 b
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。. F) h. H; A% ^3 _
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
' H2 b  C, |5 O+ b& b* l
2 M- d, {& L# Y如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機& [' K- v; x1 B0 d! J5 u* U
http://sshnet.codeplex.com/( j* }8 R) U% s! H5 f
http://www.libssh.org/

9 H& K7 U% ], O我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。* m5 G' j4 m) S1 T2 G

9 ]7 X' e+ b' n5 A1 g. V! ~: E3 U3 g9 O. w
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,* Q) }! z. ^( n+ A
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
+ u9 z; ?1 j1 X+ ^2 F你是這樣管理站群的?
) J- V  q) I; k  @7 W) X: r
0 z# F7 d/ G) [& @1 l3 l4 v) X我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫* S6 R- p- z0 V* Z

7 T' s5 }+ P6 \; d) F" p" {
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-2-20 10:40

By DZ X3.5

小黑屋

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