过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
1 h! C9 D" v6 a1 p# M+ R# |
$ H% p2 \# N/ K6 T以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
) V" Q# m1 T' w% g/ x2 S& d: F  u2 W8 w5 W1 j
準備工作:
* z+ K" ]' [& L+ N3 D' @& c使用C#調用,推薦vs2010,這裡有下載:
1 F' Y4 x1 P) u* s0 \
http://www.microsoft.com/en-us/download/details.aspx?id=12187

. C. O$ Z& U# G5 Z程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):
1 E" w" y* |5 u. v+ W5 m
http://xml-rpc.net/download.html

/ q; i; p) T0 N0 _wordpress api的文檔:
% a3 t- {& ~0 }, N) x' m
http://codex.wordpress.org/XML-RPC_WordPress_API

" I7 C% m7 c$ X1 D# t* K  ?要點講述:
) u6 V3 }1 C3 g0 Tvs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
( Y& H( t: j1 o! |% [* G ref-xmlrpc.JPG
9 q# h+ D( C" B: l. }" g$ C( Y9 l; x9 @/ `5 f
如何新建Post?4 L( \' G( P6 W8 j9 ]# g4 `; c8 m
查看wordpress的文檔,找到newPost操作需要傳入的參數8 Q+ U  y6 V- i  Z: f: W0 D9 i, r# s
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
; s7 E3 ~% Q( _$ D
newpost.JPG
$ _4 Y" p* K& A6 K+ `: ^, ]$ C4 B% X其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
) d# S; n2 a& a! ~: D
: k6 E+ {5 W+ P& p6 u! [1 x+ z定義api調用接口
' L1 y9 q( ?; j3 B3 P6 [# l調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy: n3 m4 l  j" P8 m
  2. {& ]1 Y5 d' e1 @: ]% D
  3.     [XmlRpcMethod("wp.newPost")]
    5 c6 D0 s, y3 k/ K( z& t
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);6 }( ~( N  B" {0 R3 k2 Z
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    . n( f; b& g5 I( o7 w
  2. {
    # p7 c" c; h! F% J# p. U  b0 ^  S
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));9 T/ R3 ~0 i2 n! x, x* b0 F  N
  4.     proxy.Url = url;
    6 j* I* j% H4 A( ]* z& T' [/ h2 ?. k! w/ G
  5.     NewPostInput postInput;
    ! ~0 z8 O0 C4 Q0 T. \! k
  6.     postInput.post_title = title;* e; Q2 e! _* I' H5 N
  7.     postInput.post_content = content;+ U5 P' m1 ]2 }: D. U+ P
  8.     postInput.post_status = "publish";2 k0 l" ?' q3 }' [/ W

  9. , f; O+ q3 m( F
  10.     string postId = proxy.NewPost(0, username, password, postInput);2 b# ~; r1 g' u9 m5 q
  11.     return postId;7 D* z4 d$ w* L( l  {, N9 P. g
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。( ]/ b. m% v) r# ^( @9 r
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
      L0 G+ V/ \: Y; J& ~
  2. {
    / O" F4 J6 K" B
  3.     public string post_title;7 I$ Q2 ^; Y; d. J. L' a. \* U, U
  4.     public string post_content;
    ) D0 @) p$ b  [: ^
  5.     public string post_status;0 Y6 `5 t. B. |7 c8 ^. l
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。  x  e6 b* D' {) x/ |$ a1 q2 Z) A
; y9 L% I0 i: @# l+ ?* z) u
如何獲取Post列表?
: Q% y3 ?, o& R( c( Z8 K9 q0 i( L同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    & F2 _& @2 ?) U+ g+ }# O
  2. {; m' X$ K1 z. W$ A3 z  ^! I
  3.     [XmlRpcMethod("wp.newPost")]! S! \  G) X- Y" K2 s6 j
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);# i- V  R2 r4 A4 J

  5. 3 ^7 K% l! e; M* S
  6.     [XmlRpcMethod("wp.getPosts")]$ `) W. ~& t: {6 O( N: j& F
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    + J; K& b: {) [, a  x0 V. J% h6 O& X
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
    1 V1 B! c- e$ T# S! L( @9 x
  2. {" ^% m0 q0 O9 u) ]( q8 E+ L
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ( t0 Z  s+ ?1 ?; I7 ^( @9 s5 M
  4.     wordpress.Url = url;+ @+ \- v# g' p9 M. e
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);9 o$ b1 x' O  @/ I5 P5 e4 x) ~
  6.     return ret;3 F- O3 n9 j4 b' _) N
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
% ~1 w4 [; U$ W2 T8 i$ Z
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
1 G9 E# _" a  o- K
getposts.JPG
' u1 {  B3 i" X
" b# n: B7 w. T9 Z7 z調用wordpress api的url是什麼?
4 Y) @& `( C- |wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
) K* V/ V7 r  f% Y: u8 Nhttp://www.example.com/xmlrpc.php, K+ k4 v8 x  v) ?0 h; e
9 r6 p8 T: u7 ]% H) M5 m, r4 G
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
" D0 D& T4 y% H! h( q+ X' `希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
' U$ h/ l6 K& V" W! P$ U WordpressExample.rar (50.22 KB, 下載次數: 7)
" R1 Z0 ~8 p$ E/ R! w$ X# ?9 L3 x
% s- e' G% W) A, S& {7 T; x' k3 j/ U3 `! d
/ Z( m1 O6 B# p  q5 {& H" S

8 ?" n$ B3 c, K' p
: _& o2 h0 Y8 ^
0 _8 N; _0 [2 \  t  m

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。2 N% D" o, B2 d5 z* a2 i: P
wp-example.png ; ]$ j) j* X0 {( `, D5 Z. c
WordpressExample.rar (50.22 KB, 下載次數: 2)
, K/ ^, l: F+ O* Z
- q( h. V( T! n5 s. j
: `1 @8 Y' V$ @. x" R9 A4 ?/ Q( H9 z- @; B7 d
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧% c0 n  ?. n  N5 [% K; V, H
1 \: g% d* e6 F/ t) N+ f
你的帖子是非常好的帖子5 W: U, }  `0 @, @  B# d

2 [* W" U( W( e& K可惜的是,這裡沒多少人懂程序
, W) d' M% Q4 ?
1 a* H, m5 ]; E% X+ L+ C但是我懂,我給你加分了
9 e9 ^; G# o- h6 J" p- ?) p
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?5 F7 Z3 l  T8 T) S/ h
4 [) E' o$ B* I
我可以告訴你我怎麼管理站群$ e/ n6 m/ H- c5 O9 g* G3 m
7 }2 F% v8 K6 u( E3 h

- r/ H3 l) r1 J, W6 d編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
  f5 d8 c% L. K; l6 f/ Q" v; `1 k  g% k2 e' e9 L4 y2 Y
所有發佈的文章都在中心程序自己的獨立數據庫裡面
$ h, y/ I, b2 _5 J5 d. O7 f
  ?% T" G/ N. |; k) D而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序6 _" K  ]) e# r+ w; g3 _5 f
# Q1 Y" F2 i* `! s
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
2 i) k* T+ a, Q# F4 `5 F& ^! s3 @) w! x' C. A- ^
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
2 q' ]; @! T1 F1 I! G/ T# h. g. v
9 ?% k2 \. ^9 _& C9 v( K7 p  _8 b所有的文章在中心程序裡面產生1 B& c4 z+ ?4 t& {3 G

% D' u2 \( }" K. j) b9 r希望你看明白了
; A7 @. T$ `3 ?# a0 e$ \; 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
' ?/ ^% I6 P( Z3 h, q$ Z你是這樣管理站群的?3 x" q: w% l3 ]% o& {
" Q. E* e' c7 h6 S% Y( e
我可以告訴你我怎麼管理站群
- w- s, v# P" D0 t2 p$ {
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。* B8 K# k- [+ g! c& d8 D  [
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
( R/ L. F  k( e1 M
2 D7 Q6 f8 p5 `' F1 y$ v& V如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
- f3 o: p; ?6 E# u0 l
http://sshnet.codeplex.com/5 O; ?: e$ ?" {$ H# R& F1 {' K! _
http://www.libssh.org/
% V# t8 C. m5 a; L
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。; s% @/ ]( p  ]! }
# o/ L4 H! {7 U5 G
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
3 T. }1 r+ e' ]! ~) d, g' e( O
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
% M- V2 {1 l; @0 O你是這樣管理站群的?0 L4 k" l8 m( i) V

" C* V* w/ z$ L7 s+ @我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫& X3 J7 o! K0 [! ]9 y* m' b

' d9 R4 z. w4 z1 \! B) b
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

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

By DZ X3.5

小黑屋

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