过期域名预定抢注

用戶名  找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 ) l. a0 {2 G. G1 F4 E

  o0 h! p# b& U, {" H/ X以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
3 z8 j, [! P" `* V# M
2 V2 X. W% Z. ~% q準備工作:
* {  f  Z! X0 }使用C#調用,推薦vs2010,這裡有下載:
) H9 d; E. d$ n& K- w
http://www.microsoft.com/en-us/download/details.aspx?id=12187

  {& K% x8 N1 x程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):9 ^6 I- B. J; ?- `# D: w! d
http://xml-rpc.net/download.html
; H$ K9 @; k. P& u% j
wordpress api的文檔:
  K8 H; x7 l- {1 G0 Q, m+ G2 a
http://codex.wordpress.org/XML-RPC_WordPress_API

! s- f+ \) {4 G: p. L要點講述:% h$ w6 B7 [2 g7 }( ^  q! J3 ?
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
4 }( v- y# v: U2 A$ {& h; V ref-xmlrpc.JPG
  E" }6 w( K1 y4 Q0 j; V$ e  }2 H1 J  t  Y+ ~$ S: I2 N
如何新建Post?) S. n. u' I* x1 P
查看wordpress的文檔,找到newPost操作需要傳入的參數! S! i; |& ^. @) \5 z% u
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

  L1 q. X/ K( [4 [2 \0 y! }/ _ newpost.JPG
, C6 g; H9 A7 {! d其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
! ~8 T- _9 M8 ~1 N% v
; r; t7 ~' V$ A2 d% x定義api調用接口
2 Y7 k& ?) J( J* ]' I調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy
    : b2 K# [; x  k+ |( \, P* q$ u0 i
  2. {
    / g, i0 c3 H* d; u' ?9 Z
  3.     [XmlRpcMethod("wp.newPost")]0 B) k/ o" k7 x/ J0 v8 P
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);# a! j  K5 n5 L' ]3 w' }) q
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    8 u( ^5 j& e5 _$ \
  2. {7 o) J4 G; Q. |- S
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));6 q' j8 P/ w) a
  4.     proxy.Url = url;- |! R4 K! D- f7 y, I
  5.     NewPostInput postInput;: g5 M# I1 H: P; s) H3 T8 r
  6.     postInput.post_title = title;
    0 Z# H( S/ `  V  ]/ U
  7.     postInput.post_content = content;
    2 y9 S0 k- T9 R2 ~  j7 U( {
  8.     postInput.post_status = "publish";
    # ^" `2 Y; s; f- F7 O
  9. " c+ g6 l2 _6 M7 w( a) J. T
  10.     string postId = proxy.NewPost(0, username, password, postInput);  {1 d7 q8 |% ]$ ^: c
  11.     return postId;6 e# O) |/ V4 E/ D" d+ m
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
3 G2 c0 {0 Q# b其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput6 z2 d) M- ]2 @' `( F4 d" Q
  2. {. j, V3 O& |5 @+ C) \8 D! L8 X0 q1 B! T
  3.     public string post_title;
    . j! D4 L; _7 a' i. x# O
  4.     public string post_content;
    ) ?6 l% m. V% K8 S
  5.     public string post_status;
    2 q0 G( Q" q1 r
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。2 j0 ~7 x4 W$ Q. I

5 X8 c2 l5 o  g5 \  F+ O如何獲取Post列表?$ n; o  C5 d  Z
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    & t" t3 ^* i6 C. k* U
  2. {
    8 e9 U: Q  P' Z' V
  3.     [XmlRpcMethod("wp.newPost")]
    ( ^' N0 {4 r: D4 P5 l
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);8 Y& A) J! @/ g6 u5 M

  5. * R- N5 h! d; {8 I+ B
  6.     [XmlRpcMethod("wp.getPosts")]; z, P% {; \( y9 K) d4 d$ C
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);" a( m4 R7 R, R! o9 g2 B
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)# H7 o( I5 |8 [+ p
  2. {
    & X8 c6 V5 T- o7 a% G
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));0 p4 i4 n& w- H
  4.     wordpress.Url = url;
    ( W9 B3 {7 n( l  d# @
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);  u+ ?& \( U3 B' d2 D* E: o# X
  6.     return ret;9 y1 T3 k$ P7 m( ?
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:+ f; d% Z! q& u( n, q
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost

+ F0 X6 D. h8 I( G$ ? getposts.JPG / O8 P6 }9 z& e) m4 l* c+ T

+ \* F6 u7 y% `7 x$ M6 @; ?0 y) P調用wordpress api的url是什麼?
, M, n. [  N6 w: K' F8 ^% ^wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:& Q4 M) k! c! D4 [( A
http://www.example.com/xmlrpc.php
- u7 B3 v" _) ]; C$ d. I
3 l, Q8 \7 a) B) D很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
7 c6 k4 s8 T) `& ~希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
  X* n5 H: S; m" \  H3 p WordpressExample.rar (50.22 KB, 下載次數: 7)
# _3 V1 Z/ R# g  n+ e2 Y9 n1 P* t; C& t6 B. }
- y) \  A8 n, m, V: T) t

( M, {( x/ u  S4 H) ^  M2 ^- A9 X+ @- A
: @) S! A2 h4 W8 y/ [0 ]

2 F. E5 [# ?1 ]2 W; e* N, f

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。' |0 X9 f* @, {" }4 ]
wp-example.png
+ I% k3 G  W; z6 ~8 I8 f+ F0 d WordpressExample.rar (50.22 KB, 下載次數: 2) ' a8 i! q/ O0 k/ U$ I

) K* J: `! x; N  ^! m; |
/ {( v) a; p  P* k* T3 I' y) \7 N/ m& ?# |0 B) D9 F
回復 给力 爆菊

舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧* O8 Q  H* E; u5 q

. e% i! E: m1 \3 Q! [+ G' s7 Z5 a: K你的帖子是非常好的帖子
+ `1 |9 H' T& \$ e5 l: i: t: S' T1 j* `( i5 H# }
可惜的是,這裡沒多少人懂程序: p8 B9 T8 t1 b9 J, j+ g/ p
  q+ N$ G1 q$ a$ h0 a# h+ L: w$ B
但是我懂,我給你加分了( {0 x$ L) u  I  ]
回復 给力 爆菊

舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?/ K2 [, p6 \. I# z, D2 m7 j+ _1 E
0 L, O( ~8 y; H% J5 S- y* n
我可以告訴你我怎麼管理站群
, J7 g1 i6 Q( }, x6 v* j) a7 _7 H; {5 m/ G9 ^% e! S7 |0 p# N" o) Q0 u5 o, q

1 n6 _% n1 u! M! c/ V) ?) @4 j編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有) H% n3 {. n+ A* y! V

+ m8 L" Y5 K2 e* g所有發佈的文章都在中心程序自己的獨立數據庫裡面
" K  ^4 h8 v2 Z8 H" M% ?
1 f' l: x& C, `( @( v' a, y/ a: m而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
2 [; l9 k" P" g( v& [6 c- g
( Z! `/ D$ z+ ]/ e5 Z* |通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
$ S; A/ F+ I+ r
4 [6 r" P, w6 |$ V2 k& \. _這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化2 {5 t" n* I8 E0 b

& q5 `* M0 G' M. P( l$ A( W所有的文章在中心程序裡面產生
# c7 q  j. Q  w* A: R9 A- j
  {. v: r9 @9 x- y/ x7 W$ t! h2 x希望你看明白了! o5 E) f8 L0 A% x8 K* D' n( Y

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 $ h  x! g0 ~" f( S6 w7 t6 A& T* H
你是這樣管理站群的?1 q# e! H9 |; L$ V; [
1 {$ H  {7 g& k4 K5 I3 Z, ~
我可以告訴你我怎麼管理站群

  ]- l% p% U' l& o& l8 d6 [/ S謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。( Y4 G$ V" V1 y( L& e
站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
- |% H2 Z0 B# c% b/ m
( f: h; J1 h! U2 X1 n如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
, v7 Z: e1 Y# z# H9 L/ r! ^
http://sshnet.codeplex.com/
2 w4 e6 b; `$ a  Shttp://www.libssh.org/

1 c# a( C5 U3 u8 _1 N' @我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。3 `7 C' J3 ^7 A5 k$ ^, S  R
- `! H  p$ [9 y2 @" t
回復 给力 爆菊

舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,6 ?5 Q1 \1 h: |
回復 给力 爆菊

舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
3 ~5 k1 s5 p, G4 a5 c. C  A' v5 ~你是這樣管理站群的?
! |' j8 R8 i8 o4 K2 M( D( I1 l- v- {7 q  L6 t' V6 v4 k
我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫6 ]- D  l' r. A/ e

" M% {! w8 l. D9 Z& C
回復 给力 爆菊

舉報

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

本版積分規則

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

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

GMT+8, 2025-7-6 23:27

By DZ X3.5

小黑屋

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