过期域名预定抢注

 找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯 $ F1 A0 n4 \# f7 r
. p( m! A5 X8 ^. u
以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。( a0 m- ]& r# K  p: H* [8 D9 F2 e
$ F( g3 q' C- A
準備工作:/ D! z8 k; ]/ ?# w) |8 J7 n
使用C#調用,推薦vs2010,這裡有下載:
: }) F) I6 e6 e: J! G& G
http://www.microsoft.com/en-us/download/details.aspx?id=12187

- W. \3 {4 k2 I# u& [程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):: b4 t3 `1 {9 ^6 g* f9 x) k
http://xml-rpc.net/download.html

; T: t$ ^% X* L5 p( s+ N1 |wordpress api的文檔:' G  l# f/ h$ s& {; h
http://codex.wordpress.org/XML-RPC_WordPress_API
$ s  ^# n( X" k) j
要點講述:
# j0 o$ m4 w4 Ovs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:
. N! q) O2 ], S+ B ref-xmlrpc.JPG
5 l3 Q4 i: a; C9 A( H$ `/ k. }  ]: b* D: S, X
如何新建Post?6 @5 q1 f  D, t2 ~  N' S
查看wordpress的文檔,找到newPost操作需要傳入的參數& j' M# ]3 C0 W3 r7 f, B- z
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost
8 C+ Z  v# B& l4 ~2 U
newpost.JPG
: {; j7 \$ q* Q* K, r其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
0 K1 e2 h2 E9 V# V0 W1 \5 t  P! P- C& A% c' E* h7 p! ~
定義api調用接口7 U& C0 m6 ~9 b
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy/ s0 ~1 \9 s& b# {7 V% V7 G# M
  2. {( @2 G  w' O' \  Y9 Q1 C
  3.     [XmlRpcMethod("wp.newPost")]. z6 z- B& q9 R! Z( Y
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    1 d& [/ [. t# C) f6 w
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)( I* B% z# C: n( ]* Z& ?
  2. {" G1 @" w* m/ n0 O
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));( q- W2 U3 o5 n! x6 h2 B& F- ^
  4.     proxy.Url = url;
    8 `- C6 `) Q$ C7 [) m
  5.     NewPostInput postInput;6 n! ~: z. W0 U1 ?- ^2 O
  6.     postInput.post_title = title;2 b% ~* w+ x- ~8 @" S2 S+ N
  7.     postInput.post_content = content;
    % a9 \6 j* x- {
  8.     postInput.post_status = "publish";
    . |. x% l2 F/ X

  9. $ ^2 E) _- }$ U2 ?+ u
  10.     string postId = proxy.NewPost(0, username, password, postInput);2 ?4 y' ?. R" [& ?) g. A
  11.     return postId;
    5 i8 n. @5 e! S6 N! C/ x
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。, t( V: v$ A3 p! |
其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput# U) v0 t5 I: u; v" Z4 y, q+ v+ [6 ~% Y
  2. {
    7 m+ f9 t: a" A: J) \
  3.     public string post_title;, M' {4 b8 B$ Y7 j6 \; h9 B# R+ d5 f1 [
  4.     public string post_content;
    * g# @% {, L- {
  5.     public string post_status;) G3 M9 Z* C% `6 J. n  p
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。  }" K2 n. |0 |# U/ J4 q' @
/ t- t8 \9 g  u+ c; j
如何獲取Post列表?3 a4 l' G! V8 I! C8 E2 l
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy
    $ q& R5 a9 e# P; i' q
  2. {
    " l  e" |1 B9 u
  3.     [XmlRpcMethod("wp.newPost")]
    ) [1 s. N7 K, R: R9 H3 ?
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);- p0 P9 @! O4 g: R, W. D
  5. 6 q4 C" K$ F, d! p) R0 |# Q# e. t
  6.     [XmlRpcMethod("wp.getPosts")]
    4 Q7 S. @0 l+ B/ Y  U2 V
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    . Q1 [) C" O1 i2 `7 A1 t
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password)
      W3 H4 l' W2 p# H  u1 L
  2. {. J% N) R5 Z2 W4 A. \( u
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    8 J" @3 @9 X" u! D* K7 K+ q1 _8 Q
  4.     wordpress.Url = url;9 `2 `) [& L& {
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);; D9 e* |: R- f" ?" o1 }7 i1 j2 `
  6.     return ret;  a7 l& m$ S7 q' Q* J: e
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
% m/ G) M8 Y$ y/ g
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
0 {0 Q& I1 \/ W2 B+ _2 o- U
getposts.JPG
$ o3 d7 \' N! R! T7 G2 u" ]
8 W# |" d. a5 r% l調用wordpress api的url是什麼?
# c; g# l5 E3 |  s! \" a/ V5 z7 gwordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:# u& ~0 m9 b! g2 N" |* b4 R* e
http://www.example.com/xmlrpc.php+ N8 _# R5 S0 n; H) x% L0 }
* x( Y) H9 q4 z. g) v
很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。' [* }% j$ ?% W- c
希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:, u5 a0 O! l" b
WordpressExample.rar (50.22 KB, 下載次數: 7) ' B0 {3 \- v* J, y3 O( o3 L
3 j! @" j8 u: w6 O
. b9 P( N$ d% O1 r: ?: H" m

( j: O2 A6 S! ^$ x  X+ p0 |' `$ P( Y7 ^% c; o) [3 h* e
2 {# ~9 o, N5 i+ E4 z4 c5 m
' u; M2 r) X- u; z, \& i

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。
  Z. _) l, z9 F wp-example.png 5 G- j. ^6 T3 u2 Z. \: d
WordpressExample.rar (50.22 KB, 下載次數: 2)
, L3 x# n( t: w# z. w5 t  {4 H0 {# A/ T. U2 G% v! [  Y7 M! H% ^
9 ]) `+ z* L, C* X( m
0 [$ W5 d. k6 o9 V9 s4 y; w
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧- [% L! k) s, V/ \% g7 z! w1 X* `

7 p2 }9 [; O6 H, N你的帖子是非常好的帖子
, g0 o% w4 h2 w9 i- h1 \$ h$ W
' V: k1 v4 M. _% n& `可惜的是,這裡沒多少人懂程序! |& n% v+ \% G# E1 A- l) k
$ ?& M. ], {/ a1 W% g
但是我懂,我給你加分了
& L2 s9 Q+ s% O4 D0 w, V$ a
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?8 l( m* x1 k0 K* K
# _# C+ T% y6 U# p& F
我可以告訴你我怎麼管理站群
$ C; e  k1 {- }; B. s+ o( Z5 i* j5 I5 K
4 x: f! I) _  s, ?4 _/ k; Q' @
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有
# q$ `$ P% X) v; d" H
* {  V4 R- L6 P$ I1 f' U所有發佈的文章都在中心程序自己的獨立數據庫裡面
' @+ g6 l3 @7 `# G8 m+ S) p, I# G6 `7 Q; M! [
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序
- i1 l! ]+ R3 G" E5 e2 @
6 Y6 o  Y! {1 k! L( }通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點) F, i. d8 T8 g

2 f2 g+ t5 e% G, R* q0 _$ p這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化( _9 Y# _0 [6 l" I4 o% \' l* |# v
8 ]- U4 \4 n3 u6 z& s: d5 l
所有的文章在中心程序裡面產生
/ b0 t3 \/ T+ m1 o( H: f' U# q4 ]5 v
, ^9 U1 S+ ]% h7 r" K希望你看明白了8 D$ a( }; z- S3 ?! I- ?. ~

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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
( Y7 ^1 s0 i' T0 t; K1 W( P你是這樣管理站群的?& ]) d( F" G7 ~; t' M

2 N2 o6 I( L: @( t9 c9 `我可以告訴你我怎麼管理站群
3 ]" ?  V9 f0 J% r1 Q+ y1 Y
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
6 n- k1 c" C; e3 M8 f站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)9 D, _  L+ v$ \% @
" x1 t+ Y# O4 g
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機
7 q& Y  x0 O  K, H/ z
http://sshnet.codeplex.com/
, u3 S  s# L9 g7 R, h7 Uhttp://www.libssh.org/
$ o/ f0 W  l( L
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。5 Q( A' B# u6 i+ }3 |  M$ g# N* A
% x$ l: y" M, f
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,
( ?+ d8 Y0 W9 A( [2 L
回復 给力 爆菊

使用道具 舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
% @6 s$ _$ \. |( e! a你是這樣管理站群的?" h  @  _8 O: @* t0 A

# x% w: K; N( T( ?- Y  u& a+ X8 Y我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫
/ r+ D$ e& O1 ]3 N* ?7 x; _) X& j( p! z3 L" W" g
回復 给力 爆菊

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2025-7-2 11:24

By DZ X3.5

小黑屋

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