过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 3 S  w9 |! V/ f1 J
% ?# w" n5 H) O. [" A! p* U6 x# X+ y) t
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。# [0 Q  j+ h  n. }6 p

. r1 f8 |$ P' l7 i- A準備工作:
+ H' x) L. j  y. s. |使用C#調用,推薦vs2010,這裡有下載:; d9 z* b% }6 ~4 a
http://www.microsoft.com/en-us/download/details.aspx?id=12187
$ X1 `$ ^$ c" t# u/ Z0 y  i
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):' H; ~+ l# l; k( D6 V
http://xml-rpc.net/download.html

/ p/ V1 F& g9 x3 p2 Ywordpress api的文檔:
3 d& D8 V2 y. E2 G- }  ?
http://codex.wordpress.org/XML-RPC_WordPress_API

$ S' s9 O6 v* p要點講述:
: M( `& r3 S7 H* j( T! w8 b0 k! ^1 Xvs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:! K# S8 s& U% u5 ]+ [, B- a3 A
ref-xmlrpc.JPG , v; ~2 H% d3 m( v: Q

+ V5 n( ], J- b9 K如何新建Post?
# S' s; W# r$ w- p$ @5 \查看wordpress的文檔,找到newPost操作需要傳入的參數
; V" A& a, S1 y3 q( _# ?6 }( @
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

! ]+ q7 }$ Y/ e& X newpost.JPG
3 j5 b% Y, V1 v& I3 u' q其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
7 ?; C4 a: l" a' x* F5 E
  `: v) K- p, t  ~定義api調用接口. |5 F% A/ v  u% H3 {
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy4 F6 [. F/ w* z
  2. {* i7 Q7 `5 m: c
  3.     [XmlRpcMethod("wp.newPost")]
    2 u2 v' [) ]# p/ \! `- m" s: s
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);1 s/ l( J. m' Y
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)1 d" S$ o* ]) }# U; O
  2. {
    % S; r" |$ O6 D3 ?6 F: {
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    7 ^1 _) \8 n6 e6 B" Y) J
  4.     proxy.Url = url;7 ~4 Q$ K- h5 f7 P& t" `$ ^% B% o
  5.     NewPostInput postInput;
    & m$ z  T  T# B
  6.     postInput.post_title = title;
    3 S) b5 h/ E; x- P$ m! r
  7.     postInput.post_content = content;
    1 U' \1 B; n  Q
  8.     postInput.post_status = "publish";
    8 ~+ Q7 u0 ?. D% z
  9. - M. C& b. I0 I9 y
  10.     string postId = proxy.NewPost(0, username, password, postInput);/ N! [. n  H6 |! l4 J
  11.     return postId;& U) ^1 Z$ p" r/ d
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
9 Z8 D. b6 s7 f( b( G1 J* n9 j其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    ! A" A8 b  N0 R9 S( b; N
  2. {
    ; q. a: i1 L5 N# O  t
  3.     public string post_title;$ J, {/ E$ V: b% I! W7 f  ~
  4.     public string post_content;( n" H0 P8 U* Y. l  X$ B* n; @' P
  5.     public string post_status;0 }- S1 N1 G2 ^2 I2 ]6 A; P
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
5 y- s" @- M; n' q8 m
2 N: k& [* P, G% j9 e3 \  D6 n  x" C如何獲取Post列表?6 n3 w( [9 F* }) Y
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy+ L: P/ I1 u# o  [" `7 P# Q, r
  2. {- G3 V; D4 z" f7 g6 G
  3.     [XmlRpcMethod("wp.newPost")]
    ' |" R: ^; X$ T* S" _$ a! ^
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);' P' O4 N0 x2 |, a
  5. 4 {6 ~* E0 v0 `# y
  6.     [XmlRpcMethod("wp.getPosts")]0 T/ I  @7 q$ O# l% G) Q
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);0 t0 H' q/ V: W
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)1 E, I8 Y* c% Y( D: r7 g% w
  2. {
    6 _* F$ N3 K! c6 Y* z. N2 Z+ E
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    . F) N2 `$ F# x' _6 `
  4.     wordpress.Url = url;
    : V* M9 J8 ?# G9 o
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);9 }* f, X* Z& G' i  v3 J2 `' e$ X. |
  6.     return ret;9 f3 E+ |1 J. L0 B% m" A
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
% T  b) w  E; S; h. w7 Q
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
/ F* D) s/ @! U/ v
getposts.JPG
' s7 L/ o8 b, U2 S3 P0 R' w( K7 ?4 S$ K% o+ X5 P& y- A
調用wordpress api的url是什麼?
# @/ ^2 O( |" u8 M4 j5 Swordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
, j9 V) O- _! R4 I# `+ p2 n! P" khttp://www.example.com/xmlrpc.php/ i! ?* ^: [. w9 v2 e4 W

) `6 X) g, @+ K& k0 X很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
6 S8 F, U/ @% n希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:/ K' x# D1 K% \1 N* p2 P
WordpressExample.rar (50.22 KB, 下載次數: 7)
& z6 A$ y  x4 C+ P1 V
8 N$ z$ N0 c3 J5 I3 H
1 F) d: a4 p  @2 h/ J& C" K# S7 t. \4 O- Y  ]  }# L6 O

+ A. e7 [1 F# }) Z/ Y
5 g2 G5 ?! A. l$ e- L
3 u% @* q5 d. z: I& Z/ J% Y- c

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。" T6 D/ }' I4 ^+ T9 t
wp-example.png
& @) B/ k+ v: O) A WordpressExample.rar (50.22 KB, 下載次數: 2) * C; l( \9 R4 y& O

# t( j7 |9 ^+ ~
2 E8 U) `  u; P4 ]9 M1 C1 L" f' @9 |7 Q8 W
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
3 K( ]+ V* G- k, O
/ p7 u; |+ U& F你的帖子是非常好的帖子
# {1 _) [  i6 p" \, x) i5 E* P' e( s9 Z2 M2 A- ?! W. ^9 }0 p
可惜的是,這裡沒多少人懂程序/ i: h# E, b; `% j' p2 ]

) P4 K. o* I& q, q: A5 I但是我懂,我給你加分了
) X3 y6 E1 O: P. ~/ H+ I* M
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
! f& t7 J8 W- h" ~
4 H7 d& _2 \. q1 N, A7 J5 v5 w% n我可以告訴你我怎麼管理站群5 Q' c" i+ ?; S5 X4 [) g8 w' ^5 `

2 W4 _& m! m4 `0 p% O
6 N& Q, D' g8 s  a. D& P7 X8 y( |編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有: f$ ?8 n/ a! g% `' s+ o' O

7 X' a$ e; U- z0 _/ z4 W- w所有發佈的文章都在中心程序自己的獨立數據庫裡面
4 f7 }0 ?3 h2 E( J* g& l  D) d
( t$ B! Z0 m. D# M1 y6 h; ]+ @5 Z: y而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序3 A; P. Q( S+ f0 r. K
8 A3 |6 U+ V" L1 k; B. z+ v
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點4 E  ~) G: j8 b; \2 a5 J5 w: m
% X" m# |2 ^6 J5 z. \# d
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
1 I  X1 P% k6 q) W! a0 r# U1 H5 s4 [/ }3 M* m
所有的文章在中心程序裡面產生
2 e: J/ P; [9 G* I9 i/ t( j& |$ [4 Z& G
希望你看明白了" C% `! s! S" g& L; w# [( ]

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 / X/ b+ c" Z6 Y) Z
你是這樣管理站群的?7 z0 a0 u* l# N3 D6 E/ b

4 a( e& q' c! Z: v  t# `8 @我可以告訴你我怎麼管理站群
  ?3 f  B' i0 ?, R$ n" j9 B
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
6 L) I) K4 |+ k. E  H# v7 ~站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
/ H' i' u" q1 `: ]
8 M- W  P) U- R如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機# o* c: E! _4 a* }
http://sshnet.codeplex.com/
) V3 T5 O( `  g% e8 Zhttp://www.libssh.org/
' ]6 K: H, Y  O1 h
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。9 C3 G8 w& g# u, y# c; b* H% v: O4 m

' ]( `) C  b$ `4 S2 m# v) a
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,  y; k9 w" G- A0 Y, T! [' |* _  \
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
4 L2 @' R" N$ B你是這樣管理站群的?
6 k$ H5 J+ j9 @$ Z
* `- s1 R* w3 H; j1 @我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
& ^7 w$ ~. B2 h8 G9 y+ J/ V2 X! l5 f, t$ K$ W) R/ ~2 \8 P0 k3 H: M
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

GMT+8, 2026-6-27 06:10

By DZ X3.5

小黑屋

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