过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
# V# N/ ]/ a( c1 O+ ~( y
3 {8 x* X7 L$ m& ]! Z2 V以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
0 n4 I! n, s4 n$ r8 `4 o4 i% A
, A$ K  J, y1 \( u' W5 Z2 j準備工作:
' X! V1 `* T+ I: s使用C#調用,推薦vs2010,這裡有下載:, T( t4 d9 X) S, s
http://www.microsoft.com/en-us/download/details.aspx?id=12187

5 s% Q8 e+ ]( \5 c( k0 H! m5 g程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
( ?+ {5 M# b& \4 f
http://xml-rpc.net/download.html
8 n/ Y) H7 _1 F3 _$ J4 r3 n0 \3 C
wordpress api的文檔:
8 Y; `. Z# Q" Q* e- s$ J# U
http://codex.wordpress.org/XML-RPC_WordPress_API
+ k! }9 ?4 i+ L/ y
要點講述:
& l" W# L: o7 _0 \vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:% K9 Z: \( q8 V' p" I
ref-xmlrpc.JPG
+ c4 ?4 l/ M' e6 o
  d# x4 g6 n6 i) v# T3 j; L如何新建Post?
# l4 f1 T$ A1 f8 G查看wordpress的文檔,找到newPost操作需要傳入的參數0 }4 W- r0 d' ~& m
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
1 T5 M2 c# C% \7 X3 [3 R) B) n5 |
newpost.JPG 1 M4 Y; k$ w( P6 F
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
7 p$ Y& I% L' C  u, ?& h4 m
0 e  ]/ {, @  ?9 s# v定義api調用接口
8 L0 s4 l% S" a; G  S+ E調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    7 f& s4 b8 O# k1 j2 ]
  2. {! o5 a8 l6 `6 ?$ V
  3.     [XmlRpcMethod("wp.newPost")]
    ; H. \5 B5 `3 E* V, w& c
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);* d/ i# m  @: E$ \0 \
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    6 J5 P: s, t0 H, H  i. D
  2. {
    7 ^+ Z% ~! l( O( X+ H
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    - p; l4 P! s- L' i/ X
  4.     proxy.Url = url;
    8 r% O0 l  [/ l* P9 H" z
  5.     NewPostInput postInput;
    # Y) l0 y$ G1 n5 |! d5 P
  6.     postInput.post_title = title;" r& z9 U, M9 [6 T' G/ \
  7.     postInput.post_content = content;$ d4 l' H- g+ {% C' \0 ~
  8.     postInput.post_status = "publish";
    8 w" K' ]4 j. m9 |1 t
  9. 5 D8 `# R9 g4 b7 h9 |$ _
  10.     string postId = proxy.NewPost(0, username, password, postInput);
    / \- G/ [! E0 H/ x) y
  11.     return postId;
    1 i% C3 t' p4 Y$ X8 n( R, x
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
* d( w+ l- C4 O3 L$ G其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    7 E4 E6 a! B/ J8 u* i' {0 \/ }
  2. {' s* ?0 j# x; s# B7 N1 u8 X7 q  {
  3.     public string post_title;
    : O9 g. \& v6 C" B' v/ C
  4.     public string post_content;
    . J7 k5 C! e% G. u% q% S8 Z
  5.     public string post_status;6 F5 E+ X9 T% K$ _+ {/ i
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。7 }- X+ K1 u, k( M$ R. j1 ]

9 q$ C% T+ n) q2 U" D) ~' Z如何獲取Post列表?" p1 S  J9 w& \% E
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy3 s. L' {7 w" y* I2 T; ?* G# C
  2. {
    ' f! ]+ ^6 q" T) s; y4 J% ~# A
  3.     [XmlRpcMethod("wp.newPost")]
    9 J0 d& L! W" K1 F4 O' J
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    6 S; w# j, {$ i2 {# J

  5. * u# Q' \# M% x8 C6 F
  6.     [XmlRpcMethod("wp.getPosts")]
    : e% w3 b5 Q% h) s8 v3 @' F
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    ! X0 g  a) t7 u
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
    - ^2 M3 A% i- K9 w
  2. {
    : ^+ ]( I9 a- h& o' x
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    : }6 u, Z" U) W" e8 B
  4.     wordpress.Url = url;. U4 Y) {1 _$ q
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    ; K2 d4 }  A) f
  6.     return ret;
    . J, N2 \+ }  o* p9 B) M5 d. `
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
* X- ?3 Y* w, N+ a1 P" m/ l
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
- M3 k( j( K) y- p
getposts.JPG / z! B( R/ T) ^& a. D" U
% o$ J; J  s0 T6 M
調用wordpress api的url是什麼?0 `' z; `/ s' O2 W, ]6 k1 l% x
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
" D+ e% U3 }6 U' ^1 f9 bhttp://www.example.com/xmlrpc.php. @6 n  F* r, I6 H- O, }$ J

% m2 @( z0 ~' h3 G+ N, s; J很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。1 r' F9 `3 q% L2 ~* Q7 S
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:& X' g* w! f' C1 D$ E6 K( ]" y
WordpressExample.rar (50.22 KB, 下載次數: 7)
9 T- _8 G% e+ J- z# o
# _' s' {1 n; B$ V  M" H  W0 S7 A& ^0 L7 e

( j& `9 v1 B2 R5 _+ w& i( b
( ]% s. [4 t/ r, ]5 W. w0 U
' {% D& V+ R* _! j" h# M7 c) l
4 D3 d4 l- J6 E. s# M% F

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。6 I: u0 M: U* S) Y! ?
wp-example.png
. L5 Y/ t% y1 B& { WordpressExample.rar (50.22 KB, 下載次數: 2) . k) n, L0 j0 k1 y8 E: I. w4 l
! m; C' [" K1 w1 V" n! b0 S. b
) {& ]2 K* @) I0 ]$ u

( C' B5 R: K1 @: A1 G- i
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧2 Z. u( S. ^- H& M
0 S6 L8 c$ e4 r& W6 L0 e
你的帖子是非常好的帖子
" |* O2 r/ u5 v& N
0 |( u" h4 A& t7 }8 l5 l可惜的是,這裡沒多少人懂程序1 V4 R3 p1 o# v) W! d

, i1 R2 F5 D6 r1 x但是我懂,我給你加分了
) K9 _9 ^4 t# d! \7 f
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
$ j4 d9 H& k9 O+ n
3 a/ i- ~" k! I( e$ b我可以告訴你我怎麼管理站群/ T5 D# l  g9 y, P3 K
0 P) w  h: f( y  C
* ~- \! n4 v) u# g" g7 M( I$ y
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
9 H) `: c3 z7 F
" O* \  L) H; V! q7 M所有發佈的文章都在中心程序自己的獨立數據庫裡面3 ?0 @) |( a6 `: {

. a. O$ Q& a! y# `1 }而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
' L6 p6 `& ?7 m2 e- W; h- K; \5 T& H
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
2 B# Q* o- S2 o% Z& H# f$ T/ \: h! f4 ^5 x- o$ z) R
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化! g  I1 T4 ~3 U/ x
* r% n; \: O4 R
所有的文章在中心程序裡面產生0 X  h! ?4 b% I. E

* H. L" Q4 ]1 N7 l5 w希望你看明白了: Q( [+ T" H5 M/ k. i: W# j9 y/ 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
- C# _% `$ W4 A/ g7 K5 p你是這樣管理站群的?1 A! I: n1 B: Z3 A2 m8 d
: Z, Q' U6 K# N7 \# ?) X# P) n" E
我可以告訴你我怎麼管理站群
! r% Z6 k# a: ^! s1 h  g9 q
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。0 U" A, [' G0 P+ ^# H
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
, B7 o+ f2 ^8 H* x. H4 _
# t0 u( U! `0 I/ e: ]如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
1 V& }0 `% e7 x5 @( n
http://sshnet.codeplex.com/; r8 y5 ^# Q' J3 v2 Y
http://www.libssh.org/

! L8 d5 E" K. h7 \+ V) d7 }/ a我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。% u1 ^9 p7 H0 J2 Y" Y/ P( h+ ]

. U/ u8 c3 L4 C6 f, L1 h: i
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,# H  b$ f; T7 i2 A5 l
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
" S% y6 @/ e& T$ ^# P7 L$ v你是這樣管理站群的?; u. Z& H1 O( m) t5 M  Y
) z) }1 ~" j' Y# w- B1 ~. {) b
我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫( i& ?5 A; t. ]; @: p, q

- V0 ?! c1 x+ I; P& C
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

GMT+8, 2026-1-8 15:26

By DZ X3.5

小黑屋

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