文章選自我的博客:https://blog.ljyngup.com/archives/578.html/
起因
為了給博客帶來流量,我在CSDN,博客園,簡書上開通了賬號并且把博客里的一些可以發布的文章也在這些平臺發布,
但是同時維護三個博客平臺實在太麻煩了,一旦有個地方要修改,三個博客平臺全部要修改,所以現在也基本沒有同步發布了,但是我始終想實作博客平臺同步發布,同步修改,
于是開始研究博客園的發布文章介面,一開始自己抓包分析,發現實在麻煩,于是谷歌之,發現了Metaweblog這個非常好用的API
介紹
XML-RPC是一個遠程程序呼叫(遠程程序呼叫)(remote procedure call,RPC)的分布式計算協議,通過XML將呼叫函式封裝,并使用HTTP協議作為發送機制,
XML-RPC發表于1998年,由UserLand Software(UserLand Software)的Dave Winer及Microsoft共同發表,后來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協議,
可見這個協議發布的非常早,它的官網停留在了2004年,關于這方面的資料非常少,只有在MSDN和博客園很早的文章中才能尋得一點蛛絲馬跡,
可我們講的是Metaweblog,為什么還要介紹XMLPRC?
MetaWeblog API(MWA)是一個編程介面,允許外部程式獲取和設定weblog帖子的文本和屬性,它建立在流行的XML-RPC通信協議之上,在許多流行的編程環境中都可以使用實作,
在2003年之際,很多的博客平臺開始支持MetaWeblog API,允許第三方編輯器和內容管理器對博客進行編輯管理,
在現在,比如MWeb,Windows Live Writer的文章發布都是以這個API為基礎的!
而這個API,就是9102年博客同步的關鍵所在!
介面介紹
折騰了兩天,被博客園的一篇有小錯誤的文章搞得心態全崩,后來查了MSDN才可以成功請求,
以博客園為例,有這些介面
blogger.deletePost —— 洗掉文章
blogger.getUsersBlogs —— 獲取用戶博客資訊
metaWeblog.editPost —— 編輯文章
metaWeblog.getCategories —— 獲取用戶博客分類
metaWeblog.getPost —— 獲取文章
metaWeblog.getRecentPosts —— 獲取最近的文章
metaWeblog.newMediaObject —— 添加媒體物件(圖片等)
metaWeblog.newPost —— 添加文章
wp.newCategory —— 添加目錄
我們主要用到的介面是getUsersBlogs;editPost;getRecentPosts;newPost.
通過newPost回圈多平臺發布文章,editPost和getRecentPosts作為后續管理和編輯的方法,
而getUsersBlogs可用可不用,在一些平臺上要通過此方法獲取blogid才可以實作下面方法,但是博客園只要賬號密碼就可以實作,
不過這個方法可以獲取用戶名,對于工具的用戶體驗有幫助
實作程序
除錯工具:精易網頁助手
API介面地址:https://rpc.cnblogs.com/metaweblog/博客名
訪問方法:POST
編碼:UTF-8
1.blogger.getUsersBlogs
引數:
1)[string]xmlrpc_url(即上述API介面地址)
2)[string]username(博客園賬號)
3)[string]pwd(博客園密碼)
這一步為獲取博主資訊,上面說到這步其實可以省略,但是為了下面的工具撰寫,我們依舊演示,

可見我們成功獲取了blogid和用戶名(非博客名)
2.metaWeblog.newPost
引數:
1)[string]blogid(經過測驗,此項被忽略但是不能刪去對應標簽)
2)[string]username
3)[string]pwd
4)[struct]Post(此項是一個結構,具體參考文末的博客園檔案)
5)[bool]publish(是否發布.1為發布,0為不發布)
這里吐槽兩句,博客園的一篇文章給了這個方法的示例,但是我請求時總是顯示Request from client does not contain valid XML. 但是我提交的XML沒有錯誤,直到找到了MSDN上的一個示例,猛地看到encoding,
沒錯,post提交資訊必須以UTF-8編碼,之前一直以gb2312提交,永遠提示錯誤,當然,如果不提交中文,編碼隨意~
演示:

顯示的字串說明發布成功,字串為該文章的postid
博客頁面:

發布成功,URL地址的最后就是剛付訓取到的postid,內容也是剛剛提交的內容,
最重要的一步,也是坑我最久的一步搞定~
3.metaWeblog.getRecentPosts
引數:
1)[string]blogid(ignored)
2)[string]username
3)[string]pwd
4)[int]numberOfPosts(獲取文章的數量)
這個是接下來我做工具想要的一個功能,用于查看是否同步到最新文章
演示(決議樹很長,截不完整,是對的):

4.metaWeblog.editPost
用法同newPost只是要加一個postid的引數,這個在getRecentPost中可以獲取到~
一點總結
這是一個非常有用的介面,已知國內CTO,博客園,開源中國都支持此方法發布文章,那么就可以寫出一個博客同步發表工具,作為獨立博客流量的入口,提高了同步效率!
參考文章
這次參考的文章感覺都是2000年時代的,自己一點點查檔案研究也是不容易了……
- XML-RPC 簡單理解與博客園的MetaWeblog協議
- 博客園MetaWeblog檔案
- MetaWeblog - 維基百科
- XML - 維基百科
- XMLRPC官網
- metaWeblog.newPost示例 - MSDN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21102.html
標籤:其他
上一篇:USBWebServer - 在U盤里搭一個Web服務器!
下一篇:Git理解
