过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
5 i  s) y: J* [7 G$ A5 P5 @8 n4 r! g& w0 Q5 {7 Y% |2 g
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
: [% O7 {9 J8 C3 j) W. H
+ |5 _- a* N9 l! C8 C" m準備工作:6 x1 n6 ?2 p2 p, p, J$ B
使用C#調用,推薦vs2010,這裡有下載:
, Y# m% I/ a. U' S, D
http://www.microsoft.com/en-us/download/details.aspx?id=12187
* P* y3 d4 k0 b) {* _5 s8 _
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):' z% P0 j' t8 x$ }  ?
http://xml-rpc.net/download.html
, ~7 u5 Z0 w& \9 L* P, s
wordpress api的文檔:+ f" h, p& I1 D& D- ]! |% ~8 p
http://codex.wordpress.org/XML-RPC_WordPress_API
7 x9 h' f" X; q0 e  B
要點講述:7 D" H4 y: K% C
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
: E) ~2 J" W+ J6 W/ z ref-xmlrpc.JPG ; s* S7 s( Q( B1 Y( ^- j$ I4 d

6 ]3 J( ~4 |! |如何新建Post?
( b3 i" @  p9 R( G查看wordpress的文檔,找到newPost操作需要傳入的參數& C  M+ l3 a; r* J+ R; B
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
  _" Z2 I7 h8 Q  `1 ?
newpost.JPG 8 R( r3 X4 u9 w7 u8 O
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
  E5 U! ]# b' [& y4 `2 ^+ ^( b
! R, Q% Z* g4 L定義api調用接口
1 Q: M0 P7 D. _" J( R4 N9 Z; W調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    " q% @$ i4 S8 a
  2. {
    * S6 Y" @6 ~0 v
  3.     [XmlRpcMethod("wp.newPost")]0 t0 M% D6 J$ n8 h; @
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    + j3 N/ u  h; F# T
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)/ k: Q3 N/ K3 I- v
  2. {9 e$ J" F) l, S% p
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));3 C6 Y3 O, q9 n5 L7 F
  4.     proxy.Url = url;) ?3 k  T5 L) Z' B' s
  5.     NewPostInput postInput;
    / ]0 e# \" ?% N: G
  6.     postInput.post_title = title;. R8 ?3 A) c; n6 e+ e
  7.     postInput.post_content = content;
    : j, Y7 W3 V0 D$ f6 a
  8.     postInput.post_status = "publish";/ m- ~/ d# [0 Q0 R% ?1 M; \1 D

  9.   Q9 \, V4 o6 M. W7 Y% E: B3 L% Q
  10.     string postId = proxy.NewPost(0, username, password, postInput);; t7 h  d' d, Z( `3 ^
  11.     return postId;
    ; e2 [- N8 B. u! d. @( w; p9 l5 y/ ]
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
& `+ u6 _" U, w5 K0 ~其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    . m) Y  [5 w& _: o
  2. {
    + @( o7 X0 ?% B3 Y; D
  3.     public string post_title;& N, w: {: _; F
  4.     public string post_content;
    8 M& D, u+ _6 N. x  l
  5.     public string post_status;. s" |% m$ U4 f7 F6 c9 [
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。/ O. V# r2 g. p
7 X1 I) S3 j" g: `' O
如何獲取Post列表?! F$ R3 M( O9 J# m
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    & u7 }" q  p. J3 ^. R, w8 @; h$ W( k- |
  2. {( l5 |  ~- `4 K% @8 f3 j+ n# g
  3.     [XmlRpcMethod("wp.newPost")]
    ( @3 [3 e; q% v4 P' [
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    5 \  R# o% h4 W
  5. ' I: p5 w: t; r" t( f0 m
  6.     [XmlRpcMethod("wp.getPosts")]" {$ r) g( O0 r& o4 h% J
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);1 X) |# D8 V- c& A) X1 c
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)7 x( z0 p* A: I3 s6 ^& j
  2. {
    & n. _. p1 E& L4 n) ]) x4 b
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    5 s* [' A7 }  m3 C) Z8 S& N
  4.     wordpress.Url = url;" y3 v/ J) y2 _; ~
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);  }( h4 ]7 Y* e$ W# J
  6.     return ret;+ V" o5 O: C% F) C# Z* T
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:) F2 Q' h  i0 H# i% Y, N# R, C$ _
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
5 d1 Q% o4 R, {8 Z1 ?* E
getposts.JPG   D/ n5 s9 B* P* q& @. G. S
( B0 D+ |* Z' e+ v# _# c
調用wordpress api的url是什麼?
8 }. {, m$ t2 f' e: g" P( @! L, Y% {wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
, J. e- ~0 A# ]4 whttp://www.example.com/xmlrpc.php
0 `4 P0 |' c2 H( u* E; Z0 v9 v* ^4 ]) O# c
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。8 f& h1 G$ U% G8 E/ a2 r
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:# B- q5 x1 w6 E' w* ^! b7 s5 S* f: @
WordpressExample.rar (50.22 KB, 下載次數: 7) ; R0 y$ J' o% j/ s: E; y5 {

* \# t4 z  _3 _- W, T. h! f1 }3 s; M5 `1 n- D/ k

7 a7 o# y9 w, l5 N. T$ u+ A! s7 P- S  N

. V5 Z. R. w% m
2 w) r- n# t% S- p6 c$ x

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。9 `! s  i/ C5 @+ G
wp-example.png ' n9 f' q2 O4 T+ ~
WordpressExample.rar (50.22 KB, 下載次數: 2) + i" K4 S9 o& Q* X) ^
2 T7 p: F# ]9 _8 [6 ^
5 I$ z! d0 c: G  I

% @& i* R8 z+ l9 s
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧' G/ }: ~2 Q* K4 l% j4 z" y
" Q1 W- |0 ~; N$ F
你的帖子是非常好的帖子; T7 V/ m% n! `+ ]% A" `( h0 ]
  E) n8 r& ]; N8 F/ l: D4 K
可惜的是,這裡沒多少人懂程序
: x; a" T$ G4 _- B" J
$ E* s' r! b8 k* }1 u但是我懂,我給你加分了. k1 u0 i, C6 T5 O+ r9 r% W7 ?+ h# n1 C$ ~
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?- D9 F# I; h: N/ \6 G' n

) a, y8 m+ F8 }2 {我可以告訴你我怎麼管理站群
8 C+ [; y! y1 z. ]1 i5 f& t
8 O# I6 E' w3 k) a: \4 x6 {: i1 v& h; p5 v& h
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有6 K; C$ V& I/ ]' h

* Z- ?# m$ B7 E! ]  Z. E所有發佈的文章都在中心程序自己的獨立數據庫裡面) b# C2 D) v# K) U- _
! |7 |/ i% v! A
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序& |8 c" L& ?: Z! X% F

- U% M! P2 ?' ]. q3 C& w" h通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點  G! m: g8 g$ ^2 z

$ E$ w" O$ F: {# B! ^這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
# X9 P# N) N! h0 M7 _
. g9 y* V, a5 d- ~2 B! B所有的文章在中心程序裡面產生
, H7 G- q, j6 b& t! f  K' `7 t) Q2 `- x3 [" n; L
希望你看明白了0 _* M' L* V1 Q

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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
1 e2 l% n& g; n0 V9 U你是這樣管理站群的?
0 K4 k# @9 E, a9 p$ Z7 @7 c9 ~0 {- }/ P0 W  q
我可以告訴你我怎麼管理站群
1 M. a1 x6 B0 D" _3 {) f$ N" \1 E
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
" m7 r, Z' W! e. r+ y+ W$ C' P' D' m站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
& @, R: R: M4 n0 i$ ~$ c0 s' S; z, N9 H7 y/ y) R
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機4 R5 W) X  P& _1 N; x
http://sshnet.codeplex.com/
) \- V8 `0 k$ X  V# h" bhttp://www.libssh.org/
4 `  c9 R  c6 P/ i/ s
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。' T4 S, H; @% l, F, ~

; s, z4 [9 x+ W1 f+ Y' s/ i) v
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,1 ^: B' K; a6 r
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
/ w0 y; C9 D6 n! f& ?3 R! x+ W. V你是這樣管理站群的?2 A0 v" R5 [& R/ |" u

# R% T6 F; R2 ^4 `1 G. G- o我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫* p$ w. U( v# S8 s
( D! J9 \# Q7 K5 a3 S  Z2 h
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

GMT+8, 2026-6-27 05:08

By DZ X3.5

小黑屋

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