过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
5 D9 Y2 K; x7 E' Q$ B; Q+ ?
; x/ S/ B; L% t; f2 a以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
* W) L) c: E/ M/ }- ^  K9 I& T8 O. C
% L  R6 s) }. w% z2 p8 m準備工作:9 z- o0 ?* M( T) h8 a
使用C#調用,推薦vs2010,這裡有下載:
& f0 e% j/ j$ ?1 d- L, d: t
http://www.microsoft.com/en-us/download/details.aspx?id=12187
; u5 @8 ]3 H4 f* c7 c( N& `  _; u
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
* z0 \8 Z- x+ L* ?
http://xml-rpc.net/download.html

" Z7 t# G1 ~! Z9 ]: R  ~wordpress api的文檔:
  ^; T0 M% S/ |1 r2 U2 R
http://codex.wordpress.org/XML-RPC_WordPress_API
2 u# b+ x+ w2 }2 S* [/ p; O
要點講述:+ i: d( M3 l9 H' o
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
; i6 b( A' s; `9 V7 {0 P1 e7 @, }: @, ^ ref-xmlrpc.JPG
$ E) K  A4 K% t) ?
; v/ p4 a9 N6 t如何新建Post?! _6 |8 b0 \4 V/ V
查看wordpress的文檔,找到newPost操作需要傳入的參數
; U6 v  O) D8 j/ ~1 V$ q
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
1 ?& a  W0 y7 D9 Z
newpost.JPG 3 g7 s3 r8 V) }* k
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
8 q& }4 F8 N4 s8 \/ s" n+ N. v, D2 K' Z" B
定義api調用接口- x! J: ?* f4 a6 E3 W* r
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    / @% q$ a- f8 b( W
  2. {3 H8 A# w* b( d$ P# e9 I3 M7 S
  3.     [XmlRpcMethod("wp.newPost")]
    - D3 _3 o5 h9 q4 P. N9 O
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    . x' `% I9 |4 ]7 A( y7 F) d2 J3 Q
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    3 v, Q% [9 ?7 k3 D; x& Z; D, F
  2. {1 V6 E. j; P; [, I
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));; V$ U: n" z6 `. y7 _8 S, h5 L
  4.     proxy.Url = url;
    , }' m0 ~& c; m+ l  L. n# q! B
  5.     NewPostInput postInput;
    - A, u9 B1 O4 J6 j  M% _9 E
  6.     postInput.post_title = title;, y3 ?2 k5 T, c% z
  7.     postInput.post_content = content;
    ) \* R& y5 o5 t: G1 Z2 E$ t. I
  8.     postInput.post_status = "publish";
    / `( B; N, x7 C* ]

  9. . x+ p* n3 _; V/ ?% \  r
  10.     string postId = proxy.NewPost(0, username, password, postInput);
    / |0 w( n* U4 k% K4 k
  11.     return postId;
    6 V+ ^* u! Q, R
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
7 g! T! h- {* M6 j, q  P其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    0 `- ?) e$ X" C  v+ k' m
  2. {) M  N, M  `- {4 C! \6 ~' q6 m  n
  3.     public string post_title;
    ! c! b# b% m1 T7 V3 J. x8 @
  4.     public string post_content;$ p0 F, L% N( A+ E; S# S
  5.     public string post_status;3 d" V, @. {! L7 P
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
/ g. I5 Z6 n- M  x, w! e, k: B, e# T4 \# h. c& x# R7 V1 ~. u/ O; d
如何獲取Post列表?  P/ P6 p) Y$ v8 K. C% p: Z1 L' h
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    ! `. ~# z# l) R/ I
  2. {
    4 @) Z9 c4 N: M5 |. M9 K
  3.     [XmlRpcMethod("wp.newPost")]8 r* T+ O, ]. L* S
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);/ l$ h* B8 R- u8 M! [; N
  5. # g! N( m3 W  Y3 f3 o7 G/ X' i
  6.     [XmlRpcMethod("wp.getPosts")]. S! o# Y* ]4 q- X# P+ Z
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);. Y2 P' a& |' L: u4 W
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)9 S2 a2 C# j( v6 {
  2. {
    7 c6 Q! w  U9 @; F2 q- X4 u
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));1 W( ]' w+ s. v  x
  4.     wordpress.Url = url;+ V7 O2 e  Y3 l" ?' j5 [
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    1 ^  |, G5 c0 i# z
  6.     return ret;$ w7 O. e& E. ~9 h+ b& T- W$ n
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
7 }, V7 ]' S0 n4 k
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
  z. c- H$ k$ m6 A) M4 p9 @
getposts.JPG : ^$ h( c; Q% s" B6 g: T7 {

" ?5 R6 h; e  l) `6 }' x$ x6 G& P調用wordpress api的url是什麼?
2 _* S; }# ~, x2 N9 Swordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:2 w4 ?  q& r3 P3 R5 Y4 h9 k2 m2 D
http://www.example.com/xmlrpc.php
2 r. c9 _+ Q+ N; K1 I5 _) c; Y$ r8 y6 }% {( \8 P
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
5 |, G2 b/ x2 T希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
0 G2 o/ k( E! ] WordpressExample.rar (50.22 KB, 下載次數: 7) ) U! N9 [9 E5 ?' L

! }2 I. D+ v: U. o+ g" I  \$ I4 G, {+ j: p

9 D! C, Z; w! u: \
7 x/ W! o$ Y) H5 z: Z
  W7 {& }# ^9 u  ]- b$ J* D# S) ~" M

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。1 e6 @# ]3 }3 O( k" y3 |6 C- a  k
wp-example.png ( B: T: y- O. O/ r
WordpressExample.rar (50.22 KB, 下載次數: 2) 2 c/ W  G, ?6 E! A) f9 r

. M; D7 G! x" G3 w& W$ M7 S' d. P8 o3 j. N1 l6 B/ f2 h0 l" G
+ X7 d" D  ?. w+ ]
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧' j0 U/ x% T9 A( b! d: b
. n/ F" ^$ n2 U" J
你的帖子是非常好的帖子
) k1 K, L# P4 H) R/ V- ^# Z: I6 l2 j* @: H% z
可惜的是,這裡沒多少人懂程序' |% [4 _, w' J9 M9 K

4 X/ B9 p# o9 l1 ?: K0 U9 I  R但是我懂,我給你加分了' d: E$ l, g  O( l, V+ j
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
, A3 i0 d: x; r$ Y  d' [. S, `! N% M6 ^/ _0 e! d- E7 P: j
我可以告訴你我怎麼管理站群* v1 U3 Z* W7 J* ?0 ]% h1 g: z8 ?
+ W  B: ^: x  H
% B6 l5 p3 ?4 f. r: d
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有5 l) K  p4 F4 t+ ?

9 ^1 b% D. z2 B+ ]" E( {5 k所有發佈的文章都在中心程序自己的獨立數據庫裡面7 p# X  j. y0 s5 H

3 `& a& m% ~- f& J$ `而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
( E9 p8 R4 |" o; G0 \
, {1 {! V! A, X- a通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點5 e% J5 n5 U7 Q, b
4 M; T  j, n4 w; y3 E8 ?0 G
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
( u" r( G8 e' c/ D6 `0 {, M; l* p
) k4 ^6 E+ q/ e% R" F所有的文章在中心程序裡面產生/ w' U8 J9 i# ^" M

7 U% X5 u" i- ]+ J希望你看明白了
" _+ x/ y! W) \4 c

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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
$ B/ B& @% T. O  u; k1 T# z3 v1 ~- }你是這樣管理站群的?0 d  l7 B  U* Z: u. z" U* ~, a

9 Z7 \, z2 N4 ^6 H$ [我可以告訴你我怎麼管理站群
/ C5 j' @3 Q$ p% C- e) Q! `( _! b
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
6 ]; T6 R& y/ V# J站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的). A& L* e3 x1 p+ t% O

3 o. N% z- M# A6 q2 \' _4 }& j如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機- T* {1 B5 E* Z" {
http://sshnet.codeplex.com/
5 n  i8 e' C  ^, R# rhttp://www.libssh.org/
1 Q2 l2 ?/ b9 Q
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。' t# s1 d+ M0 H! x

& m. Y9 w7 W+ g3 p" _
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,- A. A3 g/ [) \
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46 ' x: Z. {! H0 D1 i' e
你是這樣管理站群的?6 c4 j0 z( E, _' G0 {

! n3 Z+ v5 ^3 @& k我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
+ M9 `# I8 r0 J8 S. s) I& E4 Y9 \4 z% s, j; {  f) k7 E
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基跨境 數位編輯創業論壇

GMT+8, 2025-2-20 10:40

By DZ X3.5

小黑屋

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