过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 4 `/ M+ N& \: }% `5 V
. a; V9 \6 r5 O& B% \
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。4 b7 M2 J4 N/ ~* b3 i
9 N1 X5 R* Z; T9 D7 e9 k4 a" R
準備工作:% |6 k, i7 r$ H% n! z6 @8 V9 k" I
使用C#調用,推薦vs2010,這裡有下載:. U/ O5 ~8 m! h$ p! D
http://www.microsoft.com/en-us/download/details.aspx?id=12187
5 [, u  f' f) q8 p- d. F+ G2 s
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
4 i. U$ V* x7 M" i  Z
http://xml-rpc.net/download.html
1 g3 T9 b2 p$ u' X
wordpress api的文檔:
8 s6 G5 d' ~! {3 c$ l
http://codex.wordpress.org/XML-RPC_WordPress_API

. ?# n4 z/ m( s8 l要點講述:
3 D3 b$ l' h5 f: ?vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:# e, ]9 R! ^4 n
ref-xmlrpc.JPG
) |6 ], b. J& g8 \' E( T3 \% t: v! c$ f/ O' V# m2 }! Z
如何新建Post?
$ K7 b1 c/ @  e, h查看wordpress的文檔,找到newPost操作需要傳入的參數' r$ F7 @$ e& M  a9 f
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
: T# a9 h, Y2 \" M
newpost.JPG $ f4 t- \2 J. K) {  u
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。3 M* B. a# y+ R- m+ c

) S% w2 c  m( w8 v) c. a定義api調用接口
. D  ^: d4 W1 m+ B調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    + K2 l8 T/ U- \4 V$ Q/ Y1 D
  2. {" }+ b! ]& P" z
  3.     [XmlRpcMethod("wp.newPost")]) k3 J+ z* z/ t2 E$ t$ M" Y  K- }5 p% d' O  r
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    4 N" q3 y$ b1 M- J& k3 P
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)- [+ W% e) ^% p+ r
  2. {
    / T  I* F( S# |. B7 R
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    4 Y8 d% O6 X; S. H) c( `& h
  4.     proxy.Url = url;: @7 u9 D2 t8 q" y
  5.     NewPostInput postInput;
    ! F  v3 z! B% w2 l! ~! I0 D
  6.     postInput.post_title = title;. D; k: T: T; c; }
  7.     postInput.post_content = content;% J: a3 b% |9 ~- k8 g, \
  8.     postInput.post_status = "publish";
    0 ?6 z7 F8 ]0 _6 P, q8 X

  9. * Q0 q7 @% }/ ^+ t* Z
  10.     string postId = proxy.NewPost(0, username, password, postInput);
    0 @" E& H6 D( G, ]+ Q" i: R: v
  11.     return postId;
    1 X/ E6 J2 T* T4 j4 v% x- q
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。8 i1 `. Z3 K( T) h7 i
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    . j- J. h$ X, K, Q. T
  2. {
    6 X0 L+ j6 i) ^1 Y/ o3 ~
  3.     public string post_title;
    $ |6 l# \2 L8 X* Y, ~+ o
  4.     public string post_content;. Q$ S6 l; {0 X" C7 l9 V% u
  5.     public string post_status;5 W8 h( ]& Q' M
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
- X" {" Z% j* q, k" S) y' o* E" i* ~% s3 A
如何獲取Post列表?
: f8 `& q2 w  G* M同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy$ ^5 E" v8 s% T% y
  2. {% C3 @4 Q0 ]8 I! p6 j) z" i: c
  3.     [XmlRpcMethod("wp.newPost")]
    3 w& m) j8 \7 Q, }7 d% D) r1 z6 J
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);$ m* d' R" ?6 p( ~

  5. 8 I! Z  n7 R* c9 P$ t
  6.     [XmlRpcMethod("wp.getPosts")]
    , z( K5 H# K8 w  l/ ^, }6 C+ T
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);, s  r3 E- Q& C/ |0 E6 f
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)$ K& Q$ l) a+ G; W7 O
  2. {/ v- F' V& \" M" f. n8 t7 W- k
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ' x0 S, o8 U% `6 r! k+ U: B
  4.     wordpress.Url = url;
    5 H" [( G' c. {( ?% o
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    + w6 C7 Z# i" T4 T
  6.     return ret;  t2 e: a- Q- R6 f5 G9 h& @' X$ o9 {
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:6 u1 b+ m' c/ ?; R. t6 L, N' M
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost

* X7 \6 B  s& C) m, j getposts.JPG ; Z, [) `5 @5 ^. B

- U2 U# f# w: o: K調用wordpress api的url是什麼?
6 C! n4 s" w9 H' c/ {2 rwordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
) V' n" C1 y6 h9 _& ihttp://www.example.com/xmlrpc.php, ^5 i  P  B5 R: v% O2 E' m

# ~7 r8 Q9 r" K8 V很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
" X, E  T; j% \4 Z! S4 w希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:, {6 H7 k: T& l
WordpressExample.rar (50.22 KB, 下載次數: 7)
1 M4 f2 M; P, S9 a
* W) p# r# N2 t2 `
/ [# |1 o, T! |  L( R" ^+ ]/ S. Y3 a- T
3 {1 l: q# H; d, k) r3 e; P
& ]( z: Z7 A; k9 ^7 t) W
* B+ E+ R3 o  G( ]# o

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。5 @! `* s" A( s8 a& w
wp-example.png - ?" ^. G* ^; [, A2 M% i1 z
WordpressExample.rar (50.22 KB, 下載次數: 2)
0 h. i. B( P/ o- z- C" v) v5 v+ H% z# b0 w' P% d# \8 c, w* R( ]) V
( z! I: @; v1 t1 r, N- G
; ^) ~" |$ ]  C' x+ v; a9 q& \
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
" I8 S6 R: _& f5 w1 w+ O- O: X* r+ e% B% n" u* @% {
你的帖子是非常好的帖子7 F) h' ]3 D' q9 t% g* O: ?
9 }+ C( i5 M) d% w
可惜的是,這裡沒多少人懂程序
4 G; W. X, m9 w$ ~: `. X4 j( f' v# }- U+ e; i/ s  L% O9 o* F
但是我懂,我給你加分了
3 r" w) p6 N- l9 r* @: C
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
! Q) M. `8 \  r  `% |5 p4 a2 i
8 a% P% p, S# v; r我可以告訴你我怎麼管理站群
  ], s+ p. ^0 y
9 c  a) Z, E+ w2 U+ ]7 e
2 F" i- g" S2 M. h. Y0 r% E編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有9 A% }4 _' r. F3 F) [+ F* Z% g
0 A2 M8 t- C4 m6 ~* _& p6 C* e
所有發佈的文章都在中心程序自己的獨立數據庫裡面
6 |- b+ i1 ]9 [0 p& i# G! r, c+ G$ T1 v; Y
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
5 S4 X( G4 h7 H* _# ?6 j6 O) {# W+ \; u7 [$ ?  t
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點1 G, K* P  z& g' G3 R9 i
9 ?) i# h$ q  s+ x
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化3 q; L: f9 ?+ M* z, @- R/ W
; c$ {4 T5 }" J7 B& i3 D2 l8 w, V$ T- e
所有的文章在中心程序裡面產生
  O" b$ D9 t+ W% D  ^& s( M* p  y2 {- h+ j: W* _
希望你看明白了! }: L$ V' N* T) K1 z/ T, x

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 $ e3 s$ Z, `9 H
你是這樣管理站群的?/ P$ I, W9 n0 a6 ?' w

! F' o% Q7 Y- P9 d1 e$ `9 k我可以告訴你我怎麼管理站群
$ L4 h' A  [9 N3 n2 m. E& D
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。8 X  P4 H* A0 ^' A  E' ~
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的), T( F+ v  |' h: V
6 z8 V( Z6 k7 V# B/ S
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機- J) j0 k/ {  D" P: ]
http://sshnet.codeplex.com/
# R, j+ [, ^9 S2 G( x! a6 s* mhttp://www.libssh.org/

+ \0 H  @. M; t6 k$ n* y我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
7 n  p2 z4 Q, w0 h1 C
; s) q; E8 C; d+ E8 r' {* s" {: _* F
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
- n9 u' h1 k3 _
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
' k5 g% E8 m0 ]- y你是這樣管理站群的?
+ T5 ~  `, V" ^" X4 r5 V: w
7 C+ l- W& h# A4 q1 c我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫. u  s% c) ?) t& O9 m6 o9 d

% [0 b! H# A# K: F! T5 o/ r
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

GMT+8, 2026-6-27 04:12

By DZ X3.5

小黑屋

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