过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 2 E+ D$ z8 O, t1 H* F, l  O: \
+ q2 B" E) B. A( `# k
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。5 I2 b8 Y: y- r/ y$ g" x
5 ?" n8 B! C- S6 o( [
準備工作:
! A. F  R: _; ?& g6 v/ z使用C#調用,推薦vs2010,這裡有下載:
6 D8 z$ G; r3 \! q$ H+ H# Z+ {$ W* B
http://www.microsoft.com/en-us/download/details.aspx?id=12187

: y9 F+ ]( ~8 |/ r$ B0 @3 o程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):. k' }4 i) U" t
http://xml-rpc.net/download.html
6 X% ?# I6 m& j  _+ h- t
wordpress api的文檔:
- O# R  i5 ]& t' ~/ u& E# G
http://codex.wordpress.org/XML-RPC_WordPress_API
. s! R$ e& V) u- @
要點講述:9 Z7 `) R+ j% V$ o/ n
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:% a& C8 u: ]+ O
ref-xmlrpc.JPG 6 T; Q& w5 K8 T3 U# U* z

0 y5 J. c; |9 e1 L& H如何新建Post?) A: \) N* {, I% h3 D
查看wordpress的文檔,找到newPost操作需要傳入的參數
$ \& I$ l: }; u5 R. w
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
0 m# m) B( A! t. q) y+ N* q' e6 c
newpost.JPG
, x6 J  D) C) Y其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。$ F; q9 ^8 D9 {8 `

& O; s; G8 J7 t& X, M$ \4 ]# U定義api調用接口1 ?/ g% `" Z3 f. i4 s6 G) e
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy6 m9 {* j+ R( ?0 x, l8 a  m
  2. {
    ) ~" s; k8 P, O1 ]" p
  3.     [XmlRpcMethod("wp.newPost")]
    " {& a8 {) i* M9 E5 a1 r
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    ) s; y$ J4 D& Y5 L* z9 H
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    : J' r1 Z: A. l: v3 [2 P
  2. {& }+ o+ ?! h$ n- Y0 z# e" @
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    4 \/ F; T& v5 R# i" O
  4.     proxy.Url = url;5 Z4 ?2 U5 \7 n. [! K& \3 J  T
  5.     NewPostInput postInput;# I9 o" P% w' w6 X+ s* c
  6.     postInput.post_title = title;, }( W* a0 j4 {" O6 N  g
  7.     postInput.post_content = content;- V7 g8 T$ e3 X$ _) s3 ^6 ]4 }
  8.     postInput.post_status = "publish";/ M- H- g% x  F

  9. 4 q5 V, a$ |! {. o6 w8 \
  10.     string postId = proxy.NewPost(0, username, password, postInput);+ T1 _8 y6 z( }2 U0 w; ~* i) \
  11.     return postId;
    : E9 X& {" i% h% ]9 `. q
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。) J3 L6 C' u8 y
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput+ z1 R: E% c+ n
  2. {& e0 b% \" `0 w" u! U2 i7 w7 `; Q
  3.     public string post_title;
    : g4 a5 I. d2 M4 K. j, X
  4.     public string post_content;
    # y0 c2 O% k( m; l0 o$ G
  5.     public string post_status;
    - |) k) t3 s7 F& j# T( V8 w
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。5 m3 w; Q/ `3 T3 J6 i
2 y# S! f) Z) l1 h2 A8 _
如何獲取Post列表?
& @" L' u9 n! U/ X: u同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    7 y6 i) I' e* C6 X9 B- ?% j% A+ _
  2. {, l( g( o) e( ^
  3.     [XmlRpcMethod("wp.newPost")], h. j3 V5 H0 Q& }/ `1 P
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    3 n* V/ v6 N1 P2 j& q3 h! \
  5. ; w1 P; ?  n: y! N0 z) v
  6.     [XmlRpcMethod("wp.getPosts")]! r8 i5 ^5 \2 n) O) k3 C/ z
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);9 u: V; K+ W4 J4 d" Z
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password): {0 e$ v- {2 o7 d: h4 H
  2. {
    ( \8 O. S* @! }* P
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    / j1 j# s- w4 @) T# ]/ I( H, U
  4.     wordpress.Url = url;/ R; f8 }+ Z6 _. H+ O
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);9 \- Z+ m0 C" h, _. D# y4 c  v; I! t
  6.     return ret;
    9 a$ N! c- u8 {  _& _; {: D
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
) i' [6 q% b1 F% r  ]7 ]- Y
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
4 j  v! {0 I6 o" T, a
getposts.JPG
3 t) _" h( r" m7 D2 l- B. i' y, g5 w1 v5 I. D
調用wordpress api的url是什麼?; _* q  c9 F0 r' d, @  H
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
: w) u2 w, y9 v# o  bhttp://www.example.com/xmlrpc.php2 i# w# D6 k" `' a6 G: r

; ?" w6 ~$ k9 ^# @很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。$ {" n# J$ G, S* P- L
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:. d$ O+ i5 v% B2 R  f5 J: ^4 e
WordpressExample.rar (50.22 KB, 下載次數: 7) - Z+ Q( k, q) H
- Z! l, P8 }; ?, z
* m' H* d- Y5 b

) O0 j9 N: Y/ U2 w7 i: w3 g  m% j* ]; f4 h+ A( n9 z

; r) b: R- j2 u8 m0 i
. X+ \8 }  k9 {

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
* _1 c7 B/ `* l+ Q! a wp-example.png # b! O3 j0 \' h; u2 n8 w5 S
WordpressExample.rar (50.22 KB, 下載次數: 2)
' Y5 h1 u* T& @/ z( m8 q6 P# b2 k( ^5 Z4 i, l

- x3 V7 e$ E% @; j2 L  n4 N5 y2 d) p. ?
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧5 Q4 d9 w6 f& y$ p9 X; t/ K

. x: ?% s/ o  x) V( s  n$ u你的帖子是非常好的帖子+ D( j* J; p3 }( F
9 ?2 A4 r/ X0 J' h+ [- d: j( ^; j
可惜的是,這裡沒多少人懂程序
0 c5 q& z" {" B, Y& B  k0 F; `- r& j- {+ n* v% H9 [
但是我懂,我給你加分了3 E* u7 g3 ~+ ~4 C) d3 C8 q( t
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
  U0 u$ x1 \3 w) g* J
$ {1 e0 \5 e0 ]我可以告訴你我怎麼管理站群0 D" E0 G5 S% z4 |1 h& A. o0 Z: p
: G; D% w! ]! @9 p
( r7 T8 |0 L) M
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有& a& i$ `! X( \8 ^0 ^" z" z: g9 N, k
5 t' L# e! L0 K
所有發佈的文章都在中心程序自己的獨立數據庫裡面5 c5 E$ A! o9 \% y9 w# e  I" Y+ }

/ a' i/ `) P$ d: m而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
+ V+ l5 N2 e% F' N, d, f  r5 f9 J1 i1 k# Y1 g4 y
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
6 f  R/ r: ^! e9 X! i
4 J( Q$ G7 }: r+ M6 }- J* c& |0 C! x這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化! `3 u6 }5 D# t2 J2 @$ Y0 y

3 M0 c" {- L3 w所有的文章在中心程序裡面產生0 J! c0 C8 {8 P+ q: s$ e
/ \2 ~! @6 |* f; h0 U1 M
希望你看明白了0 {" _& p. C4 f5 _- @, 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
6 ~# G3 D2 K2 s4 e  J+ s$ @你是這樣管理站群的?
8 o6 b, I( G+ r) X$ D0 G( u  S$ b, ?( e4 Y6 p3 n. M. `3 ~! L
我可以告訴你我怎麼管理站群
# v2 ?9 V1 W- H8 p
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
% J$ d1 |, X7 D) j+ |4 b8 {站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
3 G/ c  [9 _# C8 ~! c2 h/ j% `9 \* E4 t: s/ ~
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
' n( r% V; S4 R1 e# _; O: D
http://sshnet.codeplex.com/
- I+ o  A; |1 C5 M# phttp://www.libssh.org/

) }0 i# O. s7 q8 b- }$ K8 h我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
+ P  e. H* T+ p0 s
# @8 m" q4 D4 t$ f, K. h4 U
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
9 K0 I& g4 q7 }' u- L/ o" e
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
1 E. M+ g- R9 z4 }; p你是這樣管理站群的?0 K, M  Q2 E6 l" f: i1 I7 U

" Q# t/ U$ M! d* ^) o  h% J我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
8 [/ q( K  S" r& H  ^2 S4 U8 k5 D5 e: ?* h( t! {2 L; ~3 P
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

GMT+8, 2026-8-8 06:02

By DZ X3.5

小黑屋

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