过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 ! V( ^7 J2 v" D3 ~, t- J$ T. x; g: e
, F  ?. x/ l6 M& z% O
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。1 u! N5 E. @1 _3 R5 K$ @; p5 A+ Q4 u

' X. O; f# P. o9 X準備工作:
/ I' J6 V/ A! S# Y8 d7 h使用C#調用,推薦vs2010,這裡有下載:
1 G2 X# L- B! r& ^! i
http://www.microsoft.com/en-us/download/details.aspx?id=12187

: [- r0 u* P% i8 ]程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):. Q! e, i: j% j
http://xml-rpc.net/download.html
( L& a  \# U2 e; m
wordpress api的文檔:7 {$ R9 S6 S3 `" Z
http://codex.wordpress.org/XML-RPC_WordPress_API
0 D( G7 J9 @3 ^2 X7 F, g6 J% E% y
要點講述:- K  h5 V8 Q+ c3 v
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
6 o( Q8 g* F# y ref-xmlrpc.JPG 9 {8 F2 m. a$ q( p# G1 k
5 \( Q3 A5 \  T% ?& ^7 G) K
如何新建Post?* e( w2 R9 R+ x9 R7 Z$ X1 x
查看wordpress的文檔,找到newPost操作需要傳入的參數
& K- H) F. ^: S: e  W6 E# M
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
3 ?. F! l% K( w; l$ g' @
newpost.JPG ; }, ?# D! x6 ]$ _/ K, R( J3 P
其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
' c: I# L- G/ |3 t( G
& H( u0 y& `6 h定義api調用接口& i0 E: H4 x) s+ ^
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy9 _3 [5 }2 Z' ^  X
  2. {2 ~+ F+ c( C% T
  3.     [XmlRpcMethod("wp.newPost")]) X4 O2 I: M4 b
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);+ ^' r% d5 t2 o- L  e, ~
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    % e/ F- y( s8 ~# G5 R4 M4 L
  2. {
    / _4 Z$ c1 k5 p1 e! t/ e- I
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));6 S9 |- C2 {# h
  4.     proxy.Url = url;
    1 `/ h' L8 n% p
  5.     NewPostInput postInput;4 x( F! T9 q9 c* u3 S1 v
  6.     postInput.post_title = title;( Q* t) E, k8 Y0 `$ N; z, F) |, ?4 q
  7.     postInput.post_content = content;
    8 W9 O. ?! b- I5 P
  8.     postInput.post_status = "publish";
      c. g1 ?; a! {& ^  u

  9. ! E" H6 d" V/ i6 V) z' G( X
  10.     string postId = proxy.NewPost(0, username, password, postInput);
      k, u/ C* ~" ^* T! O( R/ w( [. h
  11.     return postId;! J& ^, j5 e0 q7 Y5 h# T' X! d& `
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。1 j: n0 g/ y' S1 A  ?
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    , x; j" d$ k$ J; Q1 H4 ?% ?
  2. {  y/ J; n3 C2 G3 ~. B
  3.     public string post_title;& i: w/ Q2 C6 w" p. w/ V. e
  4.     public string post_content;
    ( c' C! I" I1 J$ D
  5.     public string post_status;1 P" X/ z0 [, f' `: ^! c
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。
6 L6 J9 W. ~% H; a/ |
! V8 p$ Y) ^, V0 K, y$ T如何獲取Post列表?
" L9 V3 b) Z, X/ S: N7 [同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy7 z2 e/ M( t6 U8 s* V
  2. {
    & y: `) ?7 \/ D
  3.     [XmlRpcMethod("wp.newPost")]
    8 R2 P5 G7 X$ ~' i( s
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    * A: `( F/ W6 k

  5. - D. n8 a6 E5 f0 ^
  6.     [XmlRpcMethod("wp.getPosts")]( {$ a5 N9 j- U' M3 h! j' I& j/ J. f
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    7 x2 }4 i+ g8 V' o, @
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
    * _1 ?2 w  y0 z0 M
  2. {* y! P  o) R" J
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));; x$ r' _; n; K7 w$ g6 `) V
  4.     wordpress.Url = url;: W7 E3 u$ F* j6 v* |% W
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    : @5 Y, L8 x9 ^7 R1 U% F' `
  6.     return ret;
    , M8 ^( Z, O! h& j; i
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
) R2 z# @& u# z0 v6 ^
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost

4 ]: E! A* O# {  w getposts.JPG 0 i; v7 ?7 ~! y) P  c

( E* F3 d$ u. V調用wordpress api的url是什麼?  \% X3 [7 \% t- v: B
wordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:, }9 U- y  l: Q
http://www.example.com/xmlrpc.php6 k& p8 j4 L* B& p' `' E

7 {1 u4 C% W4 _$ ]8 k很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。# e. M7 o, G+ x; @
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:2 z! x9 F5 l6 M: p. B
WordpressExample.rar (50.22 KB, 下載次數: 7)
6 Z, j* I8 Z; a# }, J4 I2 ~2 ~
- `* ^$ ]) z! b
5 b2 \8 v5 P5 y4 ~) |* R. v: g6 _8 `' n, z8 E
# T2 D. z+ b5 ]1 V5 u

. A. Y* m/ S/ j) w% p1 L- ~. l
) L$ J: z3 i% o3 h9 l

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
3 m# k: [* E. Y6 M wp-example.png 6 F% ?. z  F% |; A4 s" A1 u
WordpressExample.rar (50.22 KB, 下載次數: 2)
5 n' o2 b: `* W, D: t; M- s: e( x, w

9 D- ]- m$ Y) M% R. A+ q5 F. C
9 C' F" Q) x( m2 S
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
1 v" u, {4 P: ]# q3 d/ ^9 e$ @
/ m% p0 H$ _8 I9 }6 t你的帖子是非常好的帖子, u: B1 y( D: H  w. |
' F/ C7 K" s+ e# P
可惜的是,這裡沒多少人懂程序- N5 K2 N% E, ~
) v* p* t7 k! L7 d& c; ]* s8 K0 ^- s
但是我懂,我給你加分了
7 w/ z2 @0 Z3 F( j& @
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
% M% y, ~+ A$ U# s8 m& J/ F: t6 X& y2 O+ l
我可以告訴你我怎麼管理站群
& W) q7 y$ ~) l. F  u$ R$ F  ?; b8 h7 n9 }5 r+ S# V* O
; ~! z2 e6 J- Z) z
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
! X  ]$ M5 c3 _- X/ _" |7 b8 m5 j
  @2 j! [( s1 q# d- I所有發佈的文章都在中心程序自己的獨立數據庫裡面# p" T9 T2 I% L6 u
) J; E; A9 L3 T+ L! T. E' x
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
4 }) _' D6 E8 S  H: b5 }
& u: q2 v  j* L1 Z" t通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點6 P0 U# n$ z2 m7 y

6 n7 H0 E. L; m) v! i9 B4 A( {" m這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化
+ N2 F/ {4 ?0 O! y5 y. r$ s/ J- z9 ?' U5 Q* F
所有的文章在中心程序裡面產生! x3 D5 u7 }$ }2 I4 p
+ z- P, `% R5 a4 j6 A) V, h; C/ j
希望你看明白了0 z; @; b' C! M5 x' R& g1 `

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 3 b! m7 v: O% M% o: m  v
你是這樣管理站群的?
1 _9 f1 I: c+ R* e/ o' ?
4 I$ N- ]! c! y  v+ ^我可以告訴你我怎麼管理站群

2 C+ [0 A% z4 k謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
& X$ m# _5 g' _# m站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)% S; o6 \* W8 G

# c- g0 r* z0 V5 B7 d6 @" a如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機( H% B7 W8 ?6 i' a+ x6 a
http://sshnet.codeplex.com/
) |: _! T4 F. e1 @( h+ Vhttp://www.libssh.org/

: N  s6 }, u0 r# X* h5 B9 X我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
4 g- X  P# U' t. z2 @( O) x% S! H; ?7 p& Q8 Y+ D, D8 P5 `
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,4 ^7 K0 B& e+ t
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46 ; }1 t5 }4 x0 Q' F; E
你是這樣管理站群的?2 b6 p$ n0 }! O' S/ D

! b( E2 U4 r  u9 S我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫- r8 R8 d3 k7 A: }% V5 {, Z
" L* }2 Q; e+ D- n  F& s+ s- I3 g
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

點基

GMT+8, 2026-8-8 05:11

By DZ X3.5

小黑屋

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