过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 7 R4 ?$ f* M9 l* f' W( g9 F5 E4 }6 D

$ M  N& j3 J% w1 }0 l! o( n以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。) C$ N5 i+ a+ X( ~
/ ]2 Z  D4 J' Z- L' A$ f6 d  L- f- G
準備工作:
5 i. J* u( y! A7 p1 l7 C1 E使用C#調用,推薦vs2010,這裡有下載:
- i- w1 v# c1 l5 v9 _. D
http://www.microsoft.com/en-us/download/details.aspx?id=12187

; u+ L, T0 \  d5 r! R0 E. e程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
- u' G. a* m; b: [( S& j3 w& f
http://xml-rpc.net/download.html
2 i+ v6 w4 E; h) t
wordpress api的文檔:( Z( s6 q3 T- x/ V5 p* p
http://codex.wordpress.org/XML-RPC_WordPress_API

* z; Y( |( \" m  o* O- G( a( H0 o要點講述:- d, W- G' m: L- Z" ~8 T
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
5 i7 E$ q+ b) d1 Z+ \. @ ref-xmlrpc.JPG
3 y: J! c8 Z3 {0 G2 O: W; E- O; t, N1 x
如何新建Post?
5 C! O7 X2 \5 B; s7 ^$ Y/ v查看wordpress的文檔,找到newPost操作需要傳入的參數
# G  B# k0 }; [% \
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

" F$ Q! ~, n6 x& ~: [7 T newpost.JPG 2 G* Q- a% T7 t  E! e9 z/ p
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。6 {, L" A5 B( [$ F6 R

3 P2 D& ]1 {$ _, x" ]$ l* R定義api調用接口
) s# v. S9 x) l6 J4 j$ A調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    - [" P; U- b1 x7 R% b! q) `
  2. {3 z: Y! G5 G: V1 `* g' R1 P/ n$ [
  3.     [XmlRpcMethod("wp.newPost")]
    9 V0 f9 [+ X9 g% N2 H
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    # F2 ], ], }' M% c$ w) l
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)9 J0 [7 G5 _8 n% }: a7 M0 l$ w
  2. {
    9 i; N2 Z0 w( X
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    / e: c# s- B' x6 S
  4.     proxy.Url = url;3 Z! y# v5 F) R8 r+ w
  5.     NewPostInput postInput;
    / P* T5 [5 Y' \8 m! y: e
  6.     postInput.post_title = title;
      R8 d7 F6 `4 {/ z# c
  7.     postInput.post_content = content;( A- L. k- _  l2 |/ l" L1 t
  8.     postInput.post_status = "publish";
    ' A4 h6 B+ m! \7 F
  9. + F' ^& c/ R5 @
  10.     string postId = proxy.NewPost(0, username, password, postInput);
    . w3 l9 L7 Y' @5 i) s$ M
  11.     return postId;
    # I9 }, i, p5 @+ L
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
& q* P" J+ r0 b  I# @其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput- ~+ D* e+ a1 x; p0 X- Q
  2. {' X9 n# h. U6 g! m6 r. u9 w8 N
  3.     public string post_title;/ D4 L0 J  ^9 z; W9 u! z5 @
  4.     public string post_content;
    % S& e3 A; i( {, r3 m2 I* ]2 h
  5.     public string post_status;9 \" h  `" x+ U' }7 @) U# M% W. g/ A
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
* |% k" i8 B3 }# ~/ s/ d5 S; s+ b$ W* g% y& m; H
如何獲取Post列表?
6 r( g! G1 j# F' o3 ^: b& X同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy2 {1 Z, k, ]5 c1 A' X
  2. {
    ( F5 C* J' P2 f/ B9 k- i
  3.     [XmlRpcMethod("wp.newPost")]
    5 ]) }' s) v  r. j! u
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);1 E# t7 T- P% h) c

  5. 9 O  d8 T! @1 K/ a" @: C
  6.     [XmlRpcMethod("wp.getPosts")]; M/ m& R$ N# K5 \* u6 V
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);. G3 N3 C3 v$ u' Q6 M0 X3 M
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)2 a# @( H1 x4 L7 O0 ?* P
  2. {
    $ j0 B/ D: e0 X: e! }
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    8 d/ N0 c: l( E' x- v
  4.     wordpress.Url = url;; @6 q+ D; N" g, @+ c5 Z
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);' {+ n% S+ N8 H8 e
  6.     return ret;* h( a" s1 K0 O! c# l/ l
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:/ T% _0 t2 r/ Y9 H' |8 ]7 N/ ^$ ?
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
* s/ v0 T  {% v
getposts.JPG
  S% r& S) F" s9 a
# F' i1 Y% Q9 T/ ?- ~' u調用wordpress api的url是什麼?
4 v2 y3 b  ?, S( {% ?6 ?& ^wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:, o% {8 d8 E! n( N" c2 M" U6 W/ W
http://www.example.com/xmlrpc.php  y& e( U# W, p/ S, p. W* }; G

( t( ?3 `+ F  i很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
8 P( w! X" N. [; b+ @" r5 r希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:! w5 l1 g+ B8 {- F5 a
WordpressExample.rar (50.22 KB, 下載次數: 7) ! C1 s- t6 K3 U

8 ?- `8 d) c/ T0 [7 G( }0 r% V4 T. d( V: M% o! z8 u% d+ ~: I
* d! x" E# X8 w1 s4 k" f2 m

: Q* n" s, W4 _) w; p, w7 H
; R7 l0 v* |% a$ n% h$ ^/ I
7 v6 f2 {2 s  W: Q2 ?( u' c/ {

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。6 J1 m' m# q- f- B% ^5 Z  `
wp-example.png 5 f& V* o8 G4 W( a
WordpressExample.rar (50.22 KB, 下載次數: 2) $ s1 R1 k7 }6 W0 T0 n7 @/ @. g

% a, K1 Z% H, i( w( G" l% o/ ]: v
) @2 D/ ~+ D3 g  z1 p  M! f0 ^# f: ~+ D$ M8 \$ ^! {
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧, [7 n; ]8 H6 [, h. D$ M
/ P/ T7 h$ U* ?! ?5 g3 L% i( {
你的帖子是非常好的帖子* T9 q) K* H% [: w4 q

( u* p" P' N8 O/ J可惜的是,這裡沒多少人懂程序
0 b8 n$ c7 o8 M/ a" H! |4 \2 e1 l
$ A$ Y; v. I0 X- G' W, ^0 K但是我懂,我給你加分了
" P3 Y! P3 u" c6 K
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
2 }' L7 G9 d" _0 w
1 f. A' B7 z# e  S0 S: p9 _我可以告訴你我怎麼管理站群# K& t% d1 ]( r3 W& Y3 \
0 y/ C" B9 H1 \& K: k/ m# l

6 H6 ?) P1 t( x! e/ F編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有# G1 n" U2 }: h$ m6 d5 \6 r2 L( w
7 l) b- c9 s& n2 [7 ?" k( v
所有發佈的文章都在中心程序自己的獨立數據庫裡面: H$ e6 E6 B$ B" ?1 `3 E

/ B) T) |" ]( B) t而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序4 l/ n% _" K9 u. D7 k$ F8 l
) K6 {2 i- f, Q+ @+ e. j4 @3 W
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點& l9 k. K: n- x9 V

6 x6 l0 p, Y* D, ?8 n; `- I6 H這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化1 Z0 C2 _$ L' R3 w  _

6 B5 N5 {! L$ M0 A8 a所有的文章在中心程序裡面產生
" E" Y1 Q$ C9 m) d  l4 X
7 [# M7 R$ \. O0 F. o7 `3 R3 P; X希望你看明白了- a& _; e7 f2 C! w# x% 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
5 b# h, w5 t# j* k你是這樣管理站群的?* D6 l" F7 h( j& w; n
3 t, L, e: F+ a
我可以告訴你我怎麼管理站群
! F+ v2 {$ {: e% e
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
% I3 \$ j% N# ]7 N站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)' M5 z7 O! g# `" C4 Q, J. Z6 _
" R  {5 b1 v: Z' M2 C
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
7 `! W0 d( b+ P/ s/ G
http://sshnet.codeplex.com/
7 @& }6 b) H: t$ `! i  d, [7 Hhttp://www.libssh.org/
1 f  X' [' i0 j1 k% u( r% J- \
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
# i( E! I  F7 O1 y# C! H. O: Y
$ d1 a% S) D/ N2 ?9 x
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
6 V) {6 y6 S+ {4 b" z. }
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46 / \/ q0 ?  L, N
你是這樣管理站群的?
- o: H0 R4 @0 ~0 q# d7 t8 i, W
. m7 X' J6 f+ R. i* Q我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
2 i0 p8 h3 Y3 c% M/ T& Y) M
7 j, y' {4 g: Y. R0 o7 T
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

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

By DZ X3.5

小黑屋

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