过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯   [1 z; {; a$ r) }+ s1 _1 m

5 v* R' V/ {6 ]5 B以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。- B$ a2 i. u! }( K" E' I
+ S) Z* i  n8 G7 j2 i
準備工作:# O" K" V2 R& W/ s
使用C#調用,推薦vs2010,這裡有下載:' o. r* j* W" n! c
http://www.microsoft.com/en-us/download/details.aspx?id=12187

  g. ]5 E" ]$ @' n3 \, ?程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):/ e( a$ [5 b$ U
http://xml-rpc.net/download.html
4 Z6 L, H+ |/ P2 {& {: I* d3 R. b
wordpress api的文檔:
, o/ C3 {1 l' z2 X' i) j( x
http://codex.wordpress.org/XML-RPC_WordPress_API

1 {1 i8 u+ n- _, u$ p" }9 ^* t" Z$ p要點講述:* I+ h  M; }8 Y2 O3 V
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
8 Q! Z) J: ~5 a2 R6 c  x ref-xmlrpc.JPG 9 K+ p; o+ ]+ u8 u% q+ w& @

3 n0 K0 M# L- e+ Z2 u* L6 y! Z5 R  C如何新建Post?' f+ \& \$ a9 H& ]5 t; u) Q9 j
查看wordpress的文檔,找到newPost操作需要傳入的參數! q* V5 X" D" c  T2 }" e
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

  I0 h$ [  {/ T. r) I" z7 \ newpost.JPG % x( u! S, y1 t/ J: b
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。& d' S3 E1 Y( k0 ~! {

$ y* Q% m9 D1 y/ d定義api調用接口' q; M, f& m3 e/ I& s0 M& P
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy' \3 x: X& E# c: g; c
  2. {
    # |1 w- \: V8 W5 o
  3.     [XmlRpcMethod("wp.newPost")]
    ' a1 D' }, k7 Q- h. S% F
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);3 V' D" D! D; O6 o
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    ! m' k, G: Q% i' l9 o/ o
  2. {
    + D  k1 H: e2 f5 l; O5 e2 {
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));  Y2 \* l- m9 j: b! l
  4.     proxy.Url = url;0 G7 L7 B! C3 ^" Y
  5.     NewPostInput postInput;- \6 {& H; @% h- [
  6.     postInput.post_title = title;
    2 Q5 ?. c/ c! }
  7.     postInput.post_content = content;, z4 r+ R  ?& T- `! d: I
  8.     postInput.post_status = "publish";
    8 F5 o* H2 y/ l. r5 F
  9. 7 h  N. k' C( X# B* P. N  p5 H
  10.     string postId = proxy.NewPost(0, username, password, postInput);9 S2 }; L1 Q" s/ Q0 ^
  11.     return postId;
    ' @* K  [. \+ ]6 w$ Y
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
4 V1 h5 m# s$ x6 g" ~/ ~其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    & j" ~1 r1 L/ L
  2. {7 z) R7 v0 R& Q
  3.     public string post_title;
    9 O' J/ c7 }4 A6 i* A& q
  4.     public string post_content;! Q6 W$ a; D  N: w0 K# @! k" Z
  5.     public string post_status;1 N' r2 ?1 Y  t4 m; V
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
$ R4 H( ?4 K3 j! K, u
: q- g, N4 a/ b+ e8 w) \如何獲取Post列表?  v: W* k: S3 l0 e
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    1 k4 o; `% ?, v# j  R
  2. {5 a8 M; L+ V% T8 E. E' S) Z8 {
  3.     [XmlRpcMethod("wp.newPost")]) u7 O) {0 Z2 _: V1 X( d3 Y
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);: A* T2 A9 z) b( d) b! H
  5. 7 W' W0 t1 K: G* v
  6.     [XmlRpcMethod("wp.getPosts")]
    7 K3 W- g* S# `( E9 [
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);9 ?1 h; w/ B/ ]; {. L( u: ^
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
    ' H# c% q9 x% L/ F
  2. {: }) u- ~5 M% e! d0 q1 G( a
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    9 A0 R3 {9 ?% ^5 ], g* l. u
  4.     wordpress.Url = url;" t: r1 H+ o; P& _7 }3 B' R+ k
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);6 o: r5 V0 I9 @2 w  x
  6.     return ret;, `  M0 N2 L# M
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:9 h# f+ O- ^6 B3 D
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
& j2 ]* v+ C- [  ]  |# T5 s. a
getposts.JPG
( s. C, ]8 M6 ^5 x0 h' U, o7 |4 }
調用wordpress api的url是什麼?
: y; _" @2 C% g$ {( a# y' owordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
, |* m3 V% U$ L, z3 K4 M& q/ Xhttp://www.example.com/xmlrpc.php$ \* I4 L- O1 g8 k. M1 j2 c

7 i  L3 D& \3 m: K, ~% r, P* `' ~很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。$ R- o: i8 Y  F. @1 A
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
% Z% W! f1 O# F6 w WordpressExample.rar (50.22 KB, 下載次數: 7)
+ p- V* [6 u4 h0 e/ s
+ k, h, p  m5 X6 l, L' ~; s# M) w) B" n: _4 K% \8 a: l

3 ?1 ]2 u8 w' f. j
" Y- F+ Q3 [; D$ G9 ?8 Q$ a  K
0 ~- G) X! k6 g7 f. q9 G; T; G9 d3 e! m! U$ V, N. s

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。( r. f& H; P1 u7 z- [' D, N
wp-example.png 0 _2 g8 h# z( A7 ^/ z: V! _& C
WordpressExample.rar (50.22 KB, 下載次數: 2) ! ]8 U) m3 ~! Y4 N2 \

& @6 g1 M8 w5 h* ?( J5 ?+ j+ r- {9 x6 c2 x2 ^9 g( C1 z
! P3 u5 D( U) J3 y2 ~, |
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
& c) U' K/ [2 n+ u: i1 W  t0 g( B
0 S4 a0 ~3 b/ v* T) `0 U你的帖子是非常好的帖子
6 o6 b4 P# S7 a' }0 D: e! O2 b: ^9 T/ ?3 P5 h9 k
可惜的是,這裡沒多少人懂程序4 o/ u4 y  t' s' i! {- `
4 q8 O: X% S9 X
但是我懂,我給你加分了
# h$ ?- L& g$ i" W1 A
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
% d* }( h5 [% N
3 Y# _: ^* X" |+ ~) y我可以告訴你我怎麼管理站群
( w+ ?9 T2 n* A4 t2 Y! f6 I
' C( @: s- ^2 `: k  `2 ^7 N. Q3 j4 M4 I8 X% y+ W4 [: w% x% Y2 I
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有0 f" t8 e! D9 U% ?; a# F% v

9 D" T& r: l4 t0 ~* H7 P所有發佈的文章都在中心程序自己的獨立數據庫裡面% i' L6 S+ ]  F: r! N0 U+ g

1 ^3 l4 Q$ @5 D: R而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
( E& R7 U# G- k8 L9 w: H5 L6 c& C$ E- y7 Z- \
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
- ~0 T; M% B; B: u
; x, q' \% {8 j# e( c' K這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
- V/ W5 y3 a# s& E7 \  _6 o
3 |. D" {! }3 _! t7 [, B% @! N& c/ G所有的文章在中心程序裡面產生
: [4 M& E5 [, }& q$ u! M
3 B1 B/ B4 t  c* W2 V希望你看明白了
9 M0 _4 d% l4 G) q0 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
, q, h. w8 g/ b' P你是這樣管理站群的?
6 D/ g5 ~4 k' U9 j2 e% m. C
/ u2 x; u4 g  j$ P; g我可以告訴你我怎麼管理站群

8 x! P/ ]  \, p6 J. v6 y  D謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
" m' `8 D  ^6 g' S4 C! h8 H站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
8 L; n; H, C; t) y5 y9 q
* w/ a. ?  g8 U- ~1 {+ j0 R7 [如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機2 G( L; G) l2 T0 b
http://sshnet.codeplex.com/
" ~. F* Q# A* d0 y) H$ Fhttp://www.libssh.org/

! G$ l. i% Q$ g. n2 o$ r我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
0 S8 K% X5 a% _8 u" @; d# b3 M8 Y! G; V; o, g
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,' E0 |: A% F3 H! c
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46 / W% @- l0 g* h  x. Z! |+ F8 P
你是這樣管理站群的?
8 d8 H+ f% t+ m+ Z+ z# b
1 W; `& A2 f4 |& T我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫9 d' ]0 a; ]6 a' ~0 Q. K

" }3 v2 `( j3 H; I% r% I/ |" u4 P# K9 i
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

GMT+8, 2025-11-22 00:44

By DZ X3.5

小黑屋

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