过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
1 f. y. m1 y/ ?  Z$ U
/ \8 Q$ x; n- L! b以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。4 k/ W1 I" l- Q, P
/ V8 w  @1 L5 d/ q1 p0 P2 _9 W
準備工作:
5 m8 Z+ ~+ b5 f+ J$ |使用C#調用,推薦vs2010,這裡有下載:
3 f5 U0 g0 P( w- b5 w
http://www.microsoft.com/en-us/download/details.aspx?id=12187

6 Z1 T4 _9 B) s% R7 M/ w0 w程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):+ ?( I. H, y/ Z- B: k  T* Y
http://xml-rpc.net/download.html
3 k7 G0 N7 y* i& L0 c3 M1 p& K
wordpress api的文檔:
/ ^8 E2 A- s$ t, y8 ?
http://codex.wordpress.org/XML-RPC_WordPress_API

$ O. [- m. u, T! q要點講述:+ C& {: _' h  Q: P2 }% n
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:+ V( f# T: Y$ Z7 e
ref-xmlrpc.JPG
. l. u2 r' l! N+ n' l% n: h! m* \8 J" ^) F/ G% M! n
如何新建Post?& p' k& H1 K/ |! N" q, d6 P, G* x
查看wordpress的文檔,找到newPost操作需要傳入的參數! p1 Z; Z& ]  d9 q0 m
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

* k( {8 K2 |0 x# m% t newpost.JPG
5 a' f, s. ]5 r( ]4 A; G3 J6 E其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
0 X' g/ b$ p- f1 C! l6 F, Q- x, G7 a: \* M
定義api調用接口0 s! t5 R# A; [/ Z9 h3 v) F
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy2 N- r2 G6 d* Z" [7 h% h+ P
  2. {% t# z% L; e, R* C+ q
  3.     [XmlRpcMethod("wp.newPost")]8 V5 h; Z! k0 g! L3 w8 }, Z7 U
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    ; ?- Y9 ^4 {- H- o/ ~. u
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)7 r+ K0 \! I5 q7 V& |* m
  2. {
    ' Y7 g& S5 \5 w' N' g
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ) P8 U# `( i# v; x; s! t, v
  4.     proxy.Url = url;1 C" ~! f/ a- O) o& ?
  5.     NewPostInput postInput;
    , e" _* G# b  Q, S
  6.     postInput.post_title = title;
    % r. [6 A7 v4 Q8 ?
  7.     postInput.post_content = content;
    ; B( h' k4 m7 _( M  {) d
  8.     postInput.post_status = "publish";/ x# D+ m2 y+ x; G7 b
  9. - u$ C) m$ K! w$ c* J5 p
  10.     string postId = proxy.NewPost(0, username, password, postInput);7 t+ `5 ^6 u% B  L
  11.     return postId;6 _- W+ o8 q0 \
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
! L- C* o9 T7 A7 F其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput' X8 F) }$ U5 B6 x* J4 k; t5 \' F5 ]
  2. {
    2 ~+ v. w4 Y9 ~7 {; T
  3.     public string post_title;
    4 P) ]$ j0 @9 v$ `
  4.     public string post_content;3 ?% Y. m. l/ e3 s- Z+ H6 A4 g
  5.     public string post_status;
    " E; u% F7 p" f9 ]
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
+ u# i$ W' B0 P' I; g: U# k7 }% @' x" q  x+ S
如何獲取Post列表?8 f3 W" @7 n" p) S
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy# S+ H& e5 L7 i2 @$ M, `# k' ?: G5 @
  2. {( M6 T, I/ K2 c
  3.     [XmlRpcMethod("wp.newPost")]
    ( t) N3 S4 \: N& I  @
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    % Q: J( {. v% k9 l4 V! V3 z$ V
  5. " X0 B3 F# O4 W
  6.     [XmlRpcMethod("wp.getPosts")]
    * X. h5 @8 v2 w8 q2 U% ~* V
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    - V8 ^. |+ f  x+ v
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)  v  N1 q2 @/ H2 X$ D4 Y: c; o
  2. {' u/ V8 c( P* q5 ?" G+ o
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    : h$ u: S; \0 K- x
  4.     wordpress.Url = url;! r+ I# l$ ^3 c7 [# C
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    & f. c- G7 V# `# t1 }0 i/ Z+ v
  6.     return ret;
    - j' A2 P/ T4 i, c  `/ |' R
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
% }& K7 s: G/ C! [' `2 J0 z+ B
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
# I: o4 f) K; ]: z2 T5 f) A
getposts.JPG 9 V) I/ ?, i4 Z* ]+ P

( t, x' z% e7 D6 g% D調用wordpress api的url是什麼?
# z% K2 `5 H3 e& Y$ B1 Wwordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
+ o3 N' _) h/ b/ k/ shttp://www.example.com/xmlrpc.php
% `6 T, P4 m/ W& U. ~
$ h% @0 T; `3 r- W$ B. }很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。. z9 r* O- J* y  H/ S% N) O' K
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
5 r! p9 E" Y- G1 P$ Z# \ WordpressExample.rar (50.22 KB, 下載次數: 7)
0 \  B; F# Z; |; }. O  U! ^) r( p6 Y5 O

3 k, e) b2 f2 X7 F% ]8 h8 z, p: \1 s3 V, ?) `2 a7 C

  Q8 C+ ^7 [$ W" _. P) e# v6 z/ w4 L& `: b" [4 Q9 l
, ]: {4 q" p# i# e( v7 L  y4 K

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
; P  o8 d0 D+ U" b/ y wp-example.png 1 R# @$ E: E' E) e: V
WordpressExample.rar (50.22 KB, 下載次數: 2)   ]- w5 [- a- h$ ?7 v) v1 z
6 ~+ G+ f, d: ~9 F

7 Q# H  R  x4 P* Q9 |! ]: D  D7 M% X4 X( m' V# U+ f
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧3 G/ M/ `; j8 j5 a2 o) B9 [
6 h. ^% Q* I+ y" H( Z% \
你的帖子是非常好的帖子
2 b: {* z2 C+ @+ \$ p! B( `% `' x! R8 O7 C: i
可惜的是,這裡沒多少人懂程序: ~. d0 n: p  p3 E4 `
0 M1 {1 s/ X4 h8 w8 }9 A
但是我懂,我給你加分了
2 q5 ?1 }7 E* g$ q: \
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
3 _9 {. a% C7 g& ?+ t* V0 ^& Y
1 Q+ k; U/ j8 U* M; c我可以告訴你我怎麼管理站群
2 I% @% s$ Z) }
$ V( m$ G. D( @1 h
& v6 C" R6 R9 f( O8 }編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
& C  ]6 Z% b: u- t# X
6 k) A7 D' s' Z% O3 y所有發佈的文章都在中心程序自己的獨立數據庫裡面$ \8 q/ `" m* Q( ^) \; u2 E

" E3 y4 }1 e( p. [- o而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
- g# Q5 q) t1 r( N/ ~9 Y. Q# t: p5 d0 V; ^1 F0 p! g0 l
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點1 k) E, P7 I0 B

2 C4 v& _5 n- Q- d, \這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
3 ~( Y9 g( c) i" ]0 @' z. \
3 F5 p& t; m: b4 W7 M9 V) V1 r所有的文章在中心程序裡面產生
# w6 q' I, U- i8 X" T
7 w( `, t1 k/ ~4 I希望你看明白了4 d( b0 \/ r+ ~8 p$ R% m

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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
9 G  X  O3 ]; e  J  l& B你是這樣管理站群的?
% w& i' {8 e$ a* f
* e- M0 k7 r( r9 D8 C/ F我可以告訴你我怎麼管理站群

# Q" W0 O2 l0 B$ l9 I; o謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
% p. d3 ?% y/ B% x# I3 J; h2 ^站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
- }0 f$ V5 P: ]- z" b3 J) g+ E) r. ]' Z
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
+ u! X# w+ q) S* G
http://sshnet.codeplex.com/
' l* K5 f$ b+ H+ O& H) y3 |http://www.libssh.org/
. A2 ]# K$ j! v% ?! e' e
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
% J) S9 A( M) ]* h, |% L, B2 G6 I+ K+ [
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,( ?$ H2 f- b; ~, m) g4 k3 ?4 @
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
5 x. E/ _& M$ F* p, a你是這樣管理站群的?# {% Y! J& r- `+ ]

4 M# \9 r0 F6 d7 z' {我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫3 y) d( \9 K+ h( i2 s; D
# W3 g( o/ P$ i. Z5 {/ J
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

过期高净值品牌域名预定抢注

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

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

By DZ X3.5

小黑屋

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