过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
- `9 K% J# Q# E- Q4 K! p. {
* n# ?! p5 y! n8 q) b以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
* y" ^; y3 ?9 j! ]  F; Z' P/ P# f  l* O9 J: ~  O+ U
準備工作:
9 E' N9 J4 C3 A, l- V! C使用C#調用,推薦vs2010,這裡有下載:- y" X: Z0 }6 r8 o: s
http://www.microsoft.com/en-us/download/details.aspx?id=12187
, z$ P0 N$ X) ]: P
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
2 ]! \+ L: G( h" I  D1 v* o
http://xml-rpc.net/download.html

0 `+ U  r. q6 y7 ^* R5 |wordpress api的文檔:1 f$ L9 [9 L" M# ^2 S7 u
http://codex.wordpress.org/XML-RPC_WordPress_API

, b8 R; B/ e  m% k, O2 R9 M要點講述:% j+ i: d: \# J7 l! N, J
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
1 Z8 r& \' N1 A' Q+ [$ {- ~) { ref-xmlrpc.JPG : S  y2 F8 V, y/ b! m
* Q" H: l. d$ h. N$ a
如何新建Post?' T8 P# z: j$ y0 {; e4 }
查看wordpress的文檔,找到newPost操作需要傳入的參數3 E( a8 f0 k) ^
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

3 H+ P" @! g3 { newpost.JPG
* J- M, Q: t& k- V其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。6 s. F: o+ V) Z0 c# K0 c) r+ N
, [# }/ i3 H4 U# b9 o
定義api調用接口- k% G9 O! y; l0 Y
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    0 X7 b1 k7 o. Z# E0 J0 }: s; h
  2. {( X' V  O- x2 G
  3.     [XmlRpcMethod("wp.newPost")]
    - O: _2 _1 ^2 L+ i
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);# ^, E5 i* |( v# X) `8 K  t
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    : a/ |$ _  {: q" C9 m6 y
  2. {
    " V) e$ u6 S* @% N2 C3 U7 V) m
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ! e9 A' Z9 K# ~2 [
  4.     proxy.Url = url;- p+ b7 H. f8 o! \% P( {% e5 W$ c
  5.     NewPostInput postInput;+ l3 O, e. w7 R8 f5 ^
  6.     postInput.post_title = title;
    * [4 E8 ^( h5 E% Z
  7.     postInput.post_content = content;1 L9 F8 o0 U2 s8 K8 _* F
  8.     postInput.post_status = "publish";& L1 Q- r8 P8 p" I+ z; p3 x" h

  9. 5 C" d1 i* j  X9 R6 y! G
  10.     string postId = proxy.NewPost(0, username, password, postInput);9 \8 Y7 s2 V" Z4 [$ ~- e+ l0 J; Q6 W
  11.     return postId;
    6 K- }( n" L: f8 P
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
' z' m. p+ }, m; j5 M其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput  `1 g1 s+ ?6 g. G1 S8 {: M
  2. {8 q" r# }5 w, g, |
  3.     public string post_title;9 s2 o3 a5 L3 s" V/ P+ `1 m
  4.     public string post_content;/ q' i3 p% ?& v+ [/ t/ R$ i
  5.     public string post_status;& u- l) j7 [7 u8 V$ i- m
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。) ?7 J" M3 ~' P/ f7 u

/ |! U0 G/ Z" g3 r2 g, L9 T4 g如何獲取Post列表?
7 v1 q; ~5 T; t" \% a同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy" x, N' n! ?+ Z6 \/ I
  2. {
    : u: W" Q! D2 Z
  3.     [XmlRpcMethod("wp.newPost")]0 Q" X0 S5 O6 @* V+ u! Y
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);# T/ m7 ~2 N1 ~

  5. ' J8 H( E8 o/ [( m
  6.     [XmlRpcMethod("wp.getPosts")]+ }/ F: b# a) O6 m5 D; x
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    + _( r* A% R! D5 {, j
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)7 O2 O- |. r6 O9 R
  2. {( s( ~7 L" h1 O+ U
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    $ o3 G2 |- g0 Y
  4.     wordpress.Url = url;
      s: @6 ^5 q6 l
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);6 Y1 P6 u) B  V! [3 s! [
  6.     return ret;; h' G8 R0 x4 _/ J5 o- k- \
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:/ X9 ?! c( O0 g; P! q* D, l* [" \
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost

% k& I5 x- ]4 h  j4 m: @! m" b4 o( B, G getposts.JPG
# g8 j0 F' `" e, V& [
" |# d/ K' H, z2 E/ B: |調用wordpress api的url是什麼?
+ z+ X- n  y$ t- }: m" i# O6 swordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
( m* d" d+ n$ Khttp://www.example.com/xmlrpc.php- `. K, A1 r3 M0 U2 V: o

0 L5 O+ L% H% N& h  @% A% |. _很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
, j/ s! Z9 y9 k6 i/ z1 a  |希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
7 x. T6 ~4 P8 ~0 D8 D' ^ WordpressExample.rar (50.22 KB, 下載次數: 7)
" A. x" z/ j( R  y4 Q
  v$ I/ r3 {; Q( i) h: R- |
# H" @; `2 P  G
. l' x+ ~' h3 X" t$ g6 A' x
, w& T' ~4 q" D4 s
; L* g" H- U* s6 B/ |+ U/ Y8 W) Y2 s" s7 M3 s, A0 }4 o

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。* B" _2 v& @$ {' j) B3 X8 M
wp-example.png 8 f# P) D" Y1 |& V7 {7 ]5 A- q
WordpressExample.rar (50.22 KB, 下載次數: 2) % h5 P5 _* y3 Q9 V

2 N) x- G. o3 s0 h* k* a) g
& I$ R- _( d7 I) R* [$ x& Y3 y6 U& s! o7 |$ o4 k
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
+ P) q: x1 f1 v
* G) z& f' h# f你的帖子是非常好的帖子$ C& a$ {1 b5 A
8 c+ J; }; Z3 G, p2 V  g
可惜的是,這裡沒多少人懂程序, y6 |0 q9 i2 J) k$ ?" V; S( R
! @6 S& U0 _( Y" m+ Y$ m' a3 s
但是我懂,我給你加分了( q+ G$ X1 D! \( w  _
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
4 S2 ~7 H9 v7 |% m1 Y) G5 k
- J4 k4 u) `# [我可以告訴你我怎麼管理站群
4 X( Z& a# q. x- ^- f
( [/ P) U0 [, |0 ?7 p) Y( N( f+ B: S' T7 Z
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
/ }3 b0 C# o/ S; y
( l# Z. |0 t, e( E( w8 u  [所有發佈的文章都在中心程序自己的獨立數據庫裡面
& N* o! B) F" R& c4 t: n
2 E# }% S+ W, a6 z: m3 j5 x8 \: P而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
3 y9 E' ?4 F1 u1 S; A+ \4 c: ]2 W- A" H" B. A9 t* s1 f7 H: R8 s! b
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點% J* W* D8 o# Q5 s" I' y: a& u
2 T8 H! g8 j* b/ W. {! v' {
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
, l. z5 N2 e, V! j# ^7 `- S5 H. d
) e; }, A8 y0 ~6 q, i所有的文章在中心程序裡面產生* T- S. m! ~) x5 i7 f5 l' a; d
, T9 W1 s; `6 K5 {
希望你看明白了7 `& ], W1 K. m: 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
4 \6 z# _: i! S你是這樣管理站群的?0 E% \( K3 x& V& @7 t5 U5 t9 Y9 l

) f4 i5 F2 D  I6 Y我可以告訴你我怎麼管理站群
, D2 }6 D, v, ]( w9 |6 P6 ~: V
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
4 G3 }+ n% S0 k9 Z8 S' |站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
: k; u5 H& k5 q% n% F2 e4 e3 U: T4 L% A) i
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機/ ~5 M  v: x1 j0 F! a: Q9 a
http://sshnet.codeplex.com/
7 }/ o9 l3 d* }6 `, m* uhttp://www.libssh.org/

7 b/ z9 e' a8 U0 z我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。9 S9 @+ L* T/ y9 {
8 T0 }  `2 b- D  I) S
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,' Z$ @6 ~1 S, e& V$ \
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
+ i1 c7 x3 ^3 _! `1 u你是這樣管理站群的?; S- n4 ?4 a5 D; S( W) a, c
2 }3 L& i9 y/ _' V' X' g% \8 u( W
我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
( D- X9 ]- J7 g1 ^, p8 @$ t! y  V2 j0 P2 R$ k$ d* [" C
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

GMT+8, 2026-9-19 06:53

By DZ X3.5

小黑屋

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