过期域名预定抢注

用戶名  找回密碼
 免费注册

wordpress api快速入門

  [複製鏈接]
發表於 2013-6-17 02:39:06 | 顯示全部樓層 |閱讀模式
本帖最後由 hudba 於 2013-6-17 02:45 編輯
; r" x! ~, x$ k
- `7 ^( @  a/ I7 {% \以前用到程序中要調用wordpress api的地方,探索了一下,這裡整理一下發給大家,但願對有需要的朋友有幫助。
& `) Q5 g: j5 O2 _. z2 {
# |# w; _/ O4 W& x' P準備工作:$ ~  h4 j; ]/ h! g6 o; X
使用C#調用,推薦vs2010,這裡有下載:6 h8 k6 J. z9 t: Y# d5 A
http://www.microsoft.com/en-us/download/details.aspx?id=12187

' n; ^( L  a  K1 m4 c程序和wordpress通信需要使用xmlrpc,需要從這裡下載獲得,(或者從我附帶的壓縮包裡也可以獲得):: e" L: [! B- @; ~8 {% i# M
http://xml-rpc.net/download.html
4 s" \$ [# a" W# S+ c; W1 X, Y
wordpress api的文檔:
: g$ ^( z, N- `* Q8 k1 b
http://codex.wordpress.org/XML-RPC_WordPress_API

& \( l! @/ f  P8 d; m要點講述:+ E+ I/ A0 j! O3 \) k7 h
vs裡面建立solution:WordpressExample,然後引用xmlrpc的dll,如下圖:' u1 ?& P/ Q6 [$ _1 G4 S
ref-xmlrpc.JPG
+ `9 x9 |. A: S& P, p6 t3 ?1 T' x/ {8 t+ @% l7 ], ]
如何新建Post?8 Y, B8 Y6 g% h' F& W  O  K
查看wordpress的文檔,找到newPost操作需要傳入的參數
, ?5 X( w  c, o6 r4 ?
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.newPost

* D; W! }' H$ E/ y, R newpost.JPG
' r& J8 \9 ?; [; l8 y其中,blog_id, username, password是每次調用api都需要傳入的身份信息。如果不是mu版本,blog_id使用0。struct content部分是針對每個操作的具體的參數。不過不是每個參數都必須要傳入。
& U! v# ~+ r4 v6 ]- [" L' i( |2 ?; F# h+ ]$ x9 ?% I9 q$ ~
定義api調用接口1 f) ^* _2 y, F7 U
調用我們使用的xmlrpc類庫,需要建立一個從IXmlRpcProxy繼承來的interface,我們這裡取名叫IWordpress,然後把調用的每個api操作的method寫出來,因為此類庫使用了反射,所以參數的名字必須要和文檔裡面一樣。api的名字使用屬性標識,例如:[XmlRpcMethod("wp.newPost")],這樣你interface裡面的方法名稱可以取一個可讀性高一點的名字。
  1. public interface IWordpress : IXmlRpcProxy1 s* ?$ s/ s/ k+ D  |
  2. {0 y3 K* S' S8 M! r% [' Z5 H, y
  3.     [XmlRpcMethod("wp.newPost")]
    4 G0 ^( J- _+ W5 n9 S. H! f
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);
    ; U9 F% f: h7 W; ~% L
  5. }
複製代碼
建立一個方法方便程序裡面調用
  1. public static string NewPost(string url, string username, string password, string title, string content)
    9 `9 r4 G1 s+ Q5 D
  2. {
    ; y, \  ]5 z) Z, T# X0 }% K& W0 z+ n
  3.     IWordpress proxy = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    9 j7 f9 r4 @8 r7 y* j; g! ^  r
  4.     proxy.Url = url;
    1 n* _, e4 w, i% {
  5.     NewPostInput postInput;
    . \; P! y) `) L4 V
  6.     postInput.post_title = title;
    # h9 _" i' a' n& \3 {5 _
  7.     postInput.post_content = content;
    / H  R3 k8 d* T, K; `
  8.     postInput.post_status = "publish";
    2 |# C4 x3 ?- k5 k

  9. 2 g  J5 d8 d: a- n
  10.     string postId = proxy.NewPost(0, username, password, postInput);
      ]4 [+ R) [6 ?1 T& M, G5 E* i
  11.     return postId;
    # I7 ^: {( o" G+ V: q1 V! q' J+ c
  12. }
複製代碼
這裡我們首先通過XmlRpcProxyGen.Create創建了一個剛才IWordpress接口的對象,然後指定wordpress url和傳入參數。
! }* Q& e6 ?5 {# e% g/ }其中,作為Post內容的參數是個復合類型,所以我建立了一個struct來表示:
  1. public struct NewPostInput
    8 Z2 t; A/ j3 [& G  [
  2. {
    % D* d, b1 M0 ]8 g, T; h% |+ M! f
  3.     public string post_title;4 I* g* ?6 T) Z8 I9 |- s9 p
  4.     public string post_content;
    7 Z) v1 ?0 e7 P  t2 m! O) ]. e+ J
  5.     public string post_status;* \$ ^4 W0 o$ @$ a
  6. }
複製代碼
文檔裡面的很多參數是可選的,所以作為例子,這裡只有3個主要參數。注意,參數的名字要和文檔裡面的一樣。. O) d5 E+ I! z+ [& W  K) R( R

" c3 }# b4 j, W7 |如何獲取Post列表?; X: W1 G9 z* C% S
同NewPost一樣,先查看文檔,然後把api的定義寫到IWordpress裡面:
  1. public interface IWordpress : IXmlRpcProxy7 p2 s! ?6 z0 D( A* o& V3 X
  2. {
    % S0 R6 _/ `- {
  3.     [XmlRpcMethod("wp.newPost")]5 k; `7 ^1 A$ Y: F* s. }
  4.     string NewPost(int blog_id, string username, string password, NewPostInput newPostInput);: h- s9 h: ?. B; O6 B0 u
  5. ; x) d; i" J# o
  6.     [XmlRpcMethod("wp.getPosts")]( s% O1 h9 g# m) C9 P8 M
  7.     XmlRpcStruct[] GetPosts(int blog_id, string username, string password);
    . v& x4 f$ h: `4 G$ G! q' n3 D" ?
  8. }
複製代碼
接下來,建立一個方便用戶調用的方法,GetPosts:
  1. public static XmlRpcStruct[] GetPosts(string url, string username, string password); C( |' b& u! J! h! O
  2. {" N2 v% B3 T( ~, Y2 j, ]& r
  3.     IWordpress wordpress = (IWordpress)XmlRpcProxyGen.Create(typeof(IWordpress));
    ! d8 I1 c, M  b
  4.     wordpress.Url = url;
    7 F' q' i6 C  D. f* d% F' `4 z$ b1 D
  5.     XmlRpcStruct[] ret = wordpress.GetPosts(0, username, password);
    ! a  t0 X+ s% K7 s6 a  t
  6.     return ret;7 Y, m9 Q2 A3 Z0 E$ `: f6 d% L
  7. }
複製代碼
這裡返回的是XmlRpcStruct數組。XmlRpcStruct是可以通過字符串索引內容的,比如:ret[0]["post_title"],可以查詢的字段名稱在文檔的return values裡面有說明:
, G) Z8 y2 h/ X' b6 f: R. v+ x
http://codex.wordpress.org/XML-RPC_WordPress_API/Posts#wp.getPost
& T0 _+ a( p# D' b
getposts.JPG 4 R1 @5 ]* D9 A* a1 j# F

0 B3 w0 m; j/ f; m5 P# _% m3 S4 r調用wordpress api的url是什麼?
3 \' u3 u+ W; f/ D* f- ^. Bwordpress的安裝目錄下面有個xmlrpc.php,調用的url就是這個文件的web地址,比如:
: `; n. h, C3 V7 x1 ihttp://www.example.com/xmlrpc.php
, r/ C: A* i# ^4 d
* z, g0 }/ g2 K! p& z% l0 K很少寫東西,一動手才感覺簡單的東西,自己雖然知道,但是表達出來挺彆扭。(由己知彼,對寫出一大堆教程的moon light更加佩服了)。
  X+ r& z  W6 \1 D0 }( |希望能對大家有幫助,為有這方面需要的朋友節約一點時間,附上源代碼供大家動手試試:
: d6 z" C+ z% t WordpressExample.rar (50.22 KB, 下載次數: 7)
  N4 L# B+ J6 C0 v/ M  }' C$ u8 G
8 Z5 G; a  ^) l7 H8 O$ I  B

% D# C  Q3 R: o) R) W, @5 i0 l! d: o: k4 @- t" y

' y, {$ n, ~& C" J# S
* y# `6 t1 D5 t, N( L' R

評分

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

查看全部評分

 樓主| 發表於 2013-6-17 04:36:28 | 顯示全部樓層
忘記發圖了。好像過一段時間主貼就不能編輯了。" ~. w& L, u( c/ B
wp-example.png + L' o/ v. `8 D4 ?8 s* z# Y4 l
WordpressExample.rar (50.22 KB, 下載次數: 2) " A, X# B* i& j

7 d% A/ o1 H" u! p& o# p
+ r5 W! I8 \' _' |$ k5 T
/ L! m8 {7 O- I# F% k
回復 给力 爆菊

舉報

發表於 2013-6-17 12:43:08 | 顯示全部樓層
你的意思是,使用C#編寫軟件,然後通過wp的api批量管理wp程序對吧
5 X* T, p2 V8 p: g7 i( u$ _  v7 l
) ]# c) _) d  K8 O0 L7 B你的帖子是非常好的帖子! q# c' k1 w/ v; ]' b+ s

* ~0 R+ q; a+ E% J. r6 f可惜的是,這裡沒多少人懂程序
6 J( A6 ]/ d  b9 \/ x1 r' R; P) t2 m6 z% x: V3 v
但是我懂,我給你加分了
. a3 D7 B4 t6 q: \& m
回復 给力 爆菊

舉報

發表於 2013-6-17 12:46:49 | 顯示全部樓層
你是這樣管理站群的?
& [" `6 R* q6 _1 w; y
% Z- R8 S( F; d' t2 Y& K- R我可以告訴你我怎麼管理站群' H' d3 b0 ?) q+ c' N/ t
& o" u0 d7 {% G% g" P5 q& M/ V' C8 W
2 b* y9 Z' R. B+ S2 y
編寫一個中心程序,這個程序就像一個wp後台一樣,所有的功能都有7 E0 s; s3 A& W  d
' T" Q$ f# j# h
所有發佈的文章都在中心程序自己的獨立數據庫裡面; q- K* k. n0 g4 U4 }) z: N' L
9 U1 G+ f6 R% m7 m6 l
而站群裡面的每一個站點,不是wp程序,是自己寫的網站程序3 }5 c. V% Z9 d) k

: J  B" B# z5 Q- S) u/ ^1 v2 Z通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
& ~, F: Y& O1 A! ~2 {3 r. x6 o5 N0 _/ V
這樣站群裡面一個站就出來了,其餘的子站點一樣的全部自動化; a& t3 ^3 ]. s/ J6 H4 K

" }$ C# Q! K5 r/ F$ T所有的文章在中心程序裡面產生$ O  s: Z: Y# U- q) f

* B/ v8 V. `& _" P7 E希望你看明白了
3 m; ]8 G( X$ H* L+ n+ ]0 u

點評

这个不太懂 难道有个主数据库 添加内容都在主数据库里 当子站点需要调用不同的内容的时候访问主站点某类文章 还是 主数据库可以实现 实时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 ( v9 P: A* L4 Z3 m$ k1 C' ?
你是這樣管理站群的?" }2 k! Y& U% ^8 D
9 r" |& d/ H% v) _
我可以告訴你我怎麼管理站群
) C' [4 W* F/ n& \) F2 N
謝謝moon light mm的分享,你的這個想法挺好的,感覺是個好東西。中心程序和網站程序都不和wp沾邊嗎?那comment等,wp這些動態交互的功能就沒有了吧。
* Q" u- V9 U/ y" \站點多了後,最好有個工具把這些活都包了或者管理好:數據每日備份,文章更新,網站搬家,網站監控(偵測突然死機不能訪問什麼的)
6 u7 }7 _: \" q, \7 ]- a0 Q, [6 Z+ o+ q: r$ a2 _, U
如果是vps,可以使用winscp加密拷貝文件,還有相關的庫可以C# ssh控制主機6 L% ]2 d: |9 B7 Z9 j3 _
http://sshnet.codeplex.com/
; e8 G; a9 k4 o% g4 y' ?5 l2 jhttp://www.libssh.org/
, w+ ^/ [3 P* V4 Z3 J, m4 a) Z( o
我以前做了幾個垃圾站,程序都自己寫,但數據都垃圾搞來的。追求頁面的數量而不是質量,思維上和網賺的思維差距比較大,死得挺慘。正在努力學習你的教程,學完了準備重新出發搞一下。
1 v/ }; Y: R4 A. i5 H& q6 ?* B( G# E! ~' E+ k
回復 给力 爆菊

舉報

發表於 2013-6-18 23:06:54 | 顯示全部樓層
技術帖啊,進來收藏,以後用,+ b/ F6 M6 y3 [) g3 Z! c2 C
回復 给力 爆菊

舉報

發表於 2013-6-21 20:45:07 | 顯示全部樓層
月光飛燕 發表於 2013-6-17 12:46
! Q5 G2 u. z- q你是這樣管理站群的?/ Z% \0 R& k! y  H4 |

! N0 D2 H* o: h4 h. w5 e; ?我可以告訴你我怎麼管理站群
通過中心程序,配合多個虛擬主機的ftp,自動將子站點通過ftp上傳,然後裝載數據到子站點
這個不太懂 難道有個主數據庫 添加內容都在主數據庫裡 當子站點需要調用不同的內容的時候訪問主站點某類文章 還是 主數據庫可以實現 實時COPY到子站點數據庫+ ]7 J: I0 Z' T- ]& G4 w

, t9 b, f: N/ a+ s
回復 给力 爆菊

舉報

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

本版積分規則

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

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

GMT+8, 2025-7-26 09:46

By DZ X3.5

小黑屋

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