过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

 火 [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
9 b' ^2 z0 L- Y( ^$ E4 z+ H5 K, p* Q2 M& @7 @* x
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
3 ?% @; k* {; D9 `1 }- q8 e: ]3 R: {  q  f5 _
準備工作:
% X4 p0 E# S: n; n4 v使用C#調用,推薦vs2010,這裡有下載:
& c/ p) E" d! v1 ~- f
http://www.microsoft.com/en-us/download/details.aspx?id=12187
$ U* Q& Q7 ?: ]$ J
程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):$ t, z) Y/ J* K: N; m
http://xml-rpc.net/download.html

$ Y( P/ E  e! e7 ewordpress api的文檔:% J. _5 v( r# W: {( D
http://codex.wordpress.org/XML-RPC_WordPress_API
  M1 s7 N- E0 s! ?# S7 t( U
要點講述:: s1 n$ J8 M* X) U
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
' O- B# n4 R% e( U ref-xmlrpc.JPG 6 A9 L$ y" A9 t+ X5 H5 t4 _8 W% A
# _: j( s. W  _" [0 W
如何新建Post?# \- j* @& G: g( u# m) K
查看wordpress的文檔,找到newPost操作需要傳入的參數:
2 k+ ?! `$ J" u
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

) F7 X2 W/ R' b; i4 n; a0 P newpost.JPG ( M) _& n6 V" d# B, i  o
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
8 p8 S7 u( @  F5 p' T' I7 t  c# U4 |) s# c# L
定義api調用接口:+ J- p' _6 N  r; T2 o- {; D0 w
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy* {4 W3 [) F, l
  2. {2 B. O9 A$ {0 }. Q5 _
  3.     [XmlRpcMethod("wp.newPost")]
    ; F0 e+ k/ ]* P
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);* b; X  C% H; V1 s( m9 }
  5. }
複製代碼
建立一個方法方便程序裡面調用:
  1. public static string NewPost(string url, string username, string password, string title, string content)! C. \( ]0 o9 R. }
  2. {
    2 u% _/ P4 d' M1 {1 Q
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ) Z9 f# R; ]  q, L, h
  4.     proxy.Url = url;: C  b" X* B7 w, |
  5.     NewPostInput postInput;& y9 n8 [5 |2 E% n( G
  6.     postInput.post_title = title;
    9 J5 I! J: x: A
  7.     postInput.post_content = content;( X: c% c; E# V* f! F& L
  8.     postInput.post_status = "publish";
    $ n$ S; N8 H% A( ]. f# s* \
  9. 4 P* M& H7 t8 v# D% m7 G: \
  10.     string postId = proxy.NewPost(0, username, password, postInput);* u) T% k) K: T3 W3 N* L4 Y
  11.     return postId;
    ) P; q. H% L4 J5 m$ A# ~
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。3 s  N* n( H. Z; x
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    9 S& B3 ~: P3 N( Z1 f1 e4 r9 a5 v
  2. {
    4 U( E3 n. ~, z! I
  3.     public string post_title;
    ! y: [6 I0 r! l9 O: N. Y7 G
  4.     public string post_content;
    % E) P. a) t+ H
  5.     public string post_status;
    * r4 ~  D& q7 o0 l& k
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。5 q( v; o8 |5 C! N! f
* ]! p; ], C: w  v* h  E3 I0 `8 h
如何獲取Post列表?  s" g0 h# r3 D& P
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy+ g, i% k. ^. f; y, E) V( Q
  2. {
    * t" b- c1 `9 A+ D# t  F! H
  3.     [XmlRpcMethod("wp.newPost")]1 g/ Z0 l& j6 d- i- v
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);) v4 P! D+ F) T* ^2 n2 S2 O7 _

  5. & ]2 I: a9 t) a6 o0 Y7 k
  6.     [XmlRpcMethod("wp.getPosts")]9 G+ X  q" |$ i) B
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);! ~* D& T  j* u3 w
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password): D  r9 Z+ {" L1 @& u8 K2 a) _
  2. {
    $ n1 |6 K1 q) M( Y7 V
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    7 u5 f8 {& g7 `! k4 u- z
  4.     wordpress.Url = url;/ o' j9 h) `& s
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);2 d& Y; [4 q8 ?4 v/ k) d5 P' F
  6.     return ret;
    : `: ~+ j6 ^" S& k- R. v  {) F
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:( U/ p+ O# o- Q; e
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
3 z$ a5 r( G$ {0 g& c
getposts.JPG & a  J: ^1 r  o9 z9 b2 A; I/ i
6 h, _' }* b' V1 ^6 S
調用wordpress api的url是什麼?) k+ _! n+ i' t: B( a' e! f! I
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:" S3 r* {: b+ @3 N+ [
http://www.example.com/xmlrpc.php  H, |. ~$ m0 x- k$ N

3 @1 \0 x7 ]  t) Z) M( \很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。, i3 ?& H2 i* A1 u1 ^( ]
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:7 U' a9 \) u/ w" f4 R, S/ O- N
WordpressExample.rar (50.22 KB, 下載次數: 7) - x( x) \3 ?5 b4 k8 @, }

& B- p. B! k$ l3 f! e6 V9 o0 k8 p, _4 k' ^
: s$ v3 t. L3 t6 y
' Z( K0 q4 M3 d* A8 u# i. y3 Y- G$ ]4 F# L

8 F8 `/ D) T& f2 v! S8 X+ z, b% |
% ]- U; n% ~" ^) w7 S

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。; t- S' Z6 ~  y; ?5 u
wp-example.png " E5 v& N$ j. g' W- z9 [' C6 p
WordpressExample.rar (50.22 KB, 下載次數: 2)
- V6 a) R1 N" c1 b( ], m+ w: `/ l# G. t; t: u: a9 }, v

* {1 n0 \+ L4 {5 x% t2 F% q5 _
7 [- `; u* U* w. k% t
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧' I# S! z* S; d
2 U" E( |+ u: W
你的帖子是非常好的帖子
( x( }% T: |4 h' I  |3 x
7 o7 c) [' N  k# D8 U( c4 N9 H可惜的是,這裡沒多少人懂程序3 E* u9 w& I( O% q8 M- N9 v
8 e2 y) X$ z$ C+ A4 O. D
但是我懂,我給你加分了
4 [- c  [. i% v3 C* x
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?) F+ c0 C+ Q0 R

3 n" k2 F& r- e# C我可以告訴你我怎麼管理站群
3 R1 T. K" Q" Y4 G0 A( H
, Y. I2 Q" ^) ^& x  r
; H4 _4 ~) |3 R; x/ S編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
3 c0 e3 i% j* N9 V4 J; ^
2 J& c; Z# Y5 l所有發佈的文章都在中心程序自己的獨立數據庫裡面* t8 Z3 l9 t3 J4 a9 X
+ s3 X% t& D% a. ]( y  H& Y
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
, {! n( x) }0 P/ G" j  j
' ~+ |( f" R1 r. o通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點. g/ h. m# ^. ~5 t

  s, b* ~! M' Y/ q- i7 b這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
4 M. k3 G2 K3 S7 g' r( A1 y3 W8 \* j' k1 {6 Z
所有的文章在中心程序裡面產生
: r* L) O0 ^; N; W& T! ?9 l/ C/ c6 _6 i' O4 E5 \+ V
希望你看明白了
% s2 u; \' y# i( u

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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
( {2 S6 t) g4 v9 I: H$ N你是這樣管理站群的?
: b( g6 n$ u; I" S+ w% @, ^. d5 j- D1 H
我可以告訴你我怎麼管理站群
, j! C  ~, q% e% `
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。4 q# F4 F9 C! K& s, t& v0 n# |
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
9 Q7 t( K, T& ?8 Z7 [9 |+ E' ~2 i) p5 t) e9 H4 v
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
: A: e1 x8 ~& i
http://sshnet.codeplex.com/4 M5 D( k2 A5 a  W& F( `  n
http://www.libssh.org/
6 t+ Z( J( `; i# J3 i2 ?
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
: g5 e, U$ p! Z$ I% c. U3 v; R/ l3 t# e- p- G6 q
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
$ N; n1 f2 o' ]" R  A; |
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
- F: q6 B) d- D3 v$ W3 \  T你是這樣管理站群的?
# R+ m9 R: k, ^! X! @9 ?: b. e- i
3 F9 {, \- h  b0 H3 V$ s我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
, h. O4 o9 A7 h" v. t$ X( n
7 d# N* c8 j) y2 Q) ]
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

點基

GMT+8, 2026-10-17 08:45

By DZ X3.5

小黑屋

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