过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
5 Z/ h2 A& w  T; Y3 ~: v  b
8 C% F* j3 L; K: A以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
0 T* U3 P) e4 E. e! W! A4 V, n) F9 Q2 F2 V1 W  L
準備工作:5 w; u0 l: a1 |* h1 d+ b) m- y2 B
使用C#調用,推薦vs2010,這裡有下載:
  g, E! z/ D, x8 W3 E
http://www.microsoft.com/en-us/download/details.aspx?id=12187
3 `: q! p: R. w) \+ Q
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):9 D8 y5 L, f3 e. c) }( H
http://xml-rpc.net/download.html

- M% G9 e4 m- ?8 [6 Iwordpress api的文檔:
( L3 D. }; m' X2 H$ b2 @
http://codex.wordpress.org/XML-RPC_WordPress_API

" V% |0 }& g1 ^/ y5 G4 f/ \要點講述:
1 }+ G& F2 _8 y$ L0 P( Ovs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
6 x% Z9 _4 H1 K1 t ref-xmlrpc.JPG ! ?+ F" X) K5 n! T% U

/ K5 {0 C0 ]0 q# v9 P如何新建Post?/ p+ r" v% X7 ~
查看wordpress的文檔,找到newPost操作需要傳入的參數4 A, k! n8 ]/ f8 ^. U
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
/ V8 M  N  w- _8 [  `% F
newpost.JPG
' S* W2 T9 |2 I  L4 X7 r& g7 z# X4 Z其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。& @: n. T% c9 l6 ~$ ^

3 N  M; l! M9 K5 R8 z: {定義api調用接口
+ I% ?2 N: ]% X: t/ V/ H  @調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    , ]( s- g$ _& C. v3 N* \. E" a
  2. {
    ' A6 k% w  q5 H3 X
  3.     [XmlRpcMethod("wp.newPost")]1 M3 K& r. d0 t8 l" F
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);, M7 [) n% W8 M- L
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    * E/ F9 C3 G9 M
  2. {7 t, ?2 {' ?! J/ h
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ( j# m- e2 z& h) l
  4.     proxy.Url = url;
    $ z# @, g1 m2 y+ q
  5.     NewPostInput postInput;. _, y* Q. K- f! N/ r+ ]
  6.     postInput.post_title = title;
    ) t3 g: p$ k" |: {  ?
  7.     postInput.post_content = content;
    % Y5 a. p9 C% }8 [0 m: _4 K6 r9 `3 w
  8.     postInput.post_status = "publish";6 @. D& \" m0 M, }! ?
  9. + }/ _4 d1 P  X! `9 W
  10.     string postId = proxy.NewPost(0, username, password, postInput);" \+ f; ?; g8 h$ c5 J
  11.     return postId;6 m  u. L. P; o
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。/ g) s. O  C2 U% L8 `6 |2 l6 x7 t
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    % O" H& c" S/ u( K+ T/ _
  2. {
    / c7 W) C9 Q5 m. }
  3.     public string post_title;( p! q' A7 S1 u: Z( L$ N
  4.     public string post_content;4 n" D7 _, |1 }' y
  5.     public string post_status;% I% O. j6 V/ U
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
. c( I$ E4 q( v$ X8 x; T2 g0 e; w  F% D, l- G
如何獲取Post列表?; f" v9 G4 a2 {
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy3 W7 a( p9 H$ Y% S  g1 h& B
  2. {
      F, h  P- `; I# p
  3.     [XmlRpcMethod("wp.newPost")]
    5 [& j/ o6 B- _' A& W3 r
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);" \, `& F7 U. e  J7 R
  5. 7 L5 f; A) _5 `3 K7 J8 q; a; E1 G0 \& A
  6.     [XmlRpcMethod("wp.getPosts")]3 n" k& S" o: L
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);' V3 U. H- k0 Z5 M
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
    + \- [3 v" U9 s* `6 s
  2. {
      i  z/ G( S% q; k' ]; c
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));* o  X: T& R/ j: B, M1 F8 c. x& G$ f8 x
  4.     wordpress.Url = url;
    0 p. N+ h- d2 |/ J
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    , K# Z9 Z7 p! X8 y
  6.     return ret;& Y3 d6 L2 j/ t4 A' {
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:' r& i- }  |  A9 @, _4 [) o3 C- G
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost

' S; V9 ]* m1 [7 v! h getposts.JPG
9 n) f# C- p: O2 X, f7 H, z$ _% w5 Y6 a$ z
調用wordpress api的url是什麼?
5 c% x3 ^0 N9 }- @8 b) ~wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
; I( L# J0 U5 C2 t, s  e, M% `http://www.example.com/xmlrpc.php
( @, u5 C) \2 J. G  s% Y& Y5 _4 Z+ n( q5 ^: J) R0 }" f' s
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
/ `0 K  ?4 j& q; j0 a7 Q希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
% e3 k% Y, @$ Z" z# k! v WordpressExample.rar (50.22 KB, 下載次數: 7) 5 ?4 d7 _  ~+ ^5 l6 W1 W5 x
2 u1 G9 }+ \$ w8 V: J2 O- @& X, B
% s( E5 Z5 ~8 I6 `

  [7 ^8 C) ^7 I( s- Y1 j' m9 z
- ?! `( A4 \  P' H% O  I- q* }! w- O7 W' i0 E  j* s$ O
$ c- x( p5 x- ^8 `. D* c

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
) T5 A/ p4 H, ]+ a9 P wp-example.png
, \6 a% b- r7 ]& U/ V8 `: N" P WordpressExample.rar (50.22 KB, 下載次數: 2)
" r, o  `  x6 |
( ?% f9 B, B! O* ?4 Q* x( E1 l3 l3 C6 a, z

6 s" V% A" P5 v5 @) \* Z! ]  u
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧' C$ ~& M8 _8 e0 u

) L" e6 a  b8 |8 W" N你的帖子是非常好的帖子
9 \& I$ Z+ V2 @' y6 `( U6 f
1 a% Z( e9 Y& k* o/ I& k6 G可惜的是,這裡沒多少人懂程序
5 x, \, O/ U, }, I8 h
) `3 M7 y% P# O% J但是我懂,我給你加分了. C0 W) W/ k+ G: l2 }. y
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?# y# t* W) J0 c6 _' u/ P
& p4 o9 I$ {& c
我可以告訴你我怎麼管理站群! M2 t/ O& b" ~+ O) ]
* a% t( j. `+ M" M/ q% T
8 W6 s3 u; y1 \+ d# h0 a; W. e- y! Q
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有* j; @( h/ h- t+ s. }/ {" }
7 ]" }5 {5 q& X7 x8 k
所有發佈的文章都在中心程序自己的獨立數據庫裡面+ ~1 c/ s% B. I  v3 m

' f' ^! w9 j  G而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
& V$ y" c8 ?( M8 K/ G. P4 U- L$ A1 x" K$ G1 a
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點8 @! Q1 i1 q6 n% b

6 }# u( G5 Y. A/ \( e$ ]0 R* e這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
- S) \7 K7 @. E7 S) r
/ `7 b8 @' r# ~1 G所有的文章在中心程序裡面產生
6 z' u, ^& t0 Z0 S) e$ A
0 Y+ u1 O7 @) X/ T希望你看明白了
$ }- t+ u$ C  A$ S5 f3 T; f1 P; }0 i

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 # ~) O) `+ y2 l$ f/ E, ?. Y
你是這樣管理站群的?
# w+ e& b- j) Y5 Q7 y
$ z+ \  r; }3 d* R我可以告訴你我怎麼管理站群

+ h5 e  J% o! T/ _- R% S謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。# |/ l8 D+ h" f' S+ }
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)3 X1 J  H5 B# f/ i% P# u6 e6 _
0 A# G0 C4 k; N
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
0 i) T3 Z+ `& [  m; a( ^5 j
http://sshnet.codeplex.com/
, `& N0 P8 r4 T" Zhttp://www.libssh.org/

7 v) w$ p3 V2 x3 P我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。3 v' c" Z/ b) z% h9 J: ?8 @

! i; F+ T! l6 g( ~
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,) n2 k$ M1 s+ V, O! ~
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46   n/ g$ e) E6 W0 W
你是這樣管理站群的?  l" ]) O- g4 I" G

/ f* Z0 r+ L, I1 C; G我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫* _+ p( K2 u! F) Y7 n* }
# ]& F# @8 o2 ~
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

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

By DZ X3.5

小黑屋

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