一步步在GitHub上創建博客主頁(7)--兼容Windows Writer的服務提供器


摘要

本系列文章將一步步教你如何在GitHub上創建自己的博客或主頁,事實上相關的文章網上有很多,這里只是把自己的經驗分享給新手,方便他們逐步開始GitHub之旅。本篇將介紹如何使GitHub博客如何兼容Windows Writer。

 

本文首發於我的github主頁:一步步在GitHub上創建博客主頁(7)--兼容Windows Writer的服務提供器,歡迎交流

 本人近期還開發了一個簡單實用的PHP服務提供器,開源,並且有詳細的原理說明:

基於PHP的Windows Writer服務提供器--介紹

基於PHP的Windows Writer服務提供器--如何使用

緣起

什么?GitHub主頁能支持Windows Writer?開玩笑吧!你一定會這么問我。好吧,我的確是標題黨了,但是本篇要介紹的不是讓GitHub主頁兼容我們的Windows Writer,而是自己實現一個的兼容Windows Writer的服務提供器。你可以通過編程讓這個提供器支持你想要的功能,以方便我們在本機構建jekyll模板和博客結構。

我喜歡使用Windows Writer寫文章,主要是因為它能夠兼容很多博客系統,我可以將截圖復制在Writer里面,還可以使用代碼插件,當我發布博客的時候這一切都工作單非常好,圖片會上傳到我的博客托管網站上,並自動建立應有的圖片鏈接。這使我節省了很多時間。然而,最近開始在Github上開自己的博客。並使用git管理靜態的文件。我在本系列前面的文章中對此有很詳細的描述。但是,由於Github實際上僅僅支持的是靜態html,我必須在本地用windows writer完成我的文章編輯,然后將writer生成的html源代碼貼到我預先准備好的_posts路徑下的文件中。如果文章沒有圖片那還比較簡單,但是如果有圖片就非常麻煩了,每張圖片都必須想辦法從writer中復制並手動在img文件夾中創建好,這還不是最糟糕的,我還必須將source中的img標簽的src手動一個個改成應該的鏈接。重復上面的步驟讓我十分不爽。之前想過是不是通過做一個writer的插件來讓這個過程更方便些,但是無果。今天偶然想到,能不能像博客園那樣自己在本地實現一個writer的provider,這樣writer一定會將圖片和文章“上傳”到我的本地web應用程序,我只要在web應用程序中把上面這些繁瑣的工作自動實現就行了。

 

XML-RPC和IMetaWeblog

在網上搜索到相關的實現方法:給自己的Blog程序添加對Windows Live Writer的支持

writer與支持writer的提供程序之間有很多接口方式,其中一種簡單的實現方式就是XML-RPC和MetaWeblog。

什么是XML-RPC:顧名思義吧,就是基於XML的遠程調用,類似SOAP。XML-RPC的唯一優勢就是”as simple as possible”。

什么是MetaWeblog:是一種博客系統的接口標准,容易實現。

 

XML-RPC.NET

這是一個實現了XML-RPC的一個類庫,並在源碼中結合實現,附帶了IMetaWeblog等接口的定義。這里下載。

 

開始

交代完基本概念后,我們開始動手做起來。首先按照上面的鏈接下載XML-RPC.NET。我喜歡使用源代碼構建應用程序,所以解壓后找到源代碼中的src目錄,其中是一個.net 2.0的項目xmlrpc,包含了完整的源代碼。構建一個solution,並添加這個項目,以及新建一個ASP.NET web應用程序,並引用項目中的xmlrpc

E)$@Q27(%S]7_0@6(91[O1Z

不出意外,現在可以直接編譯通過。找到解壓包中的interfaces文件夾中的MetaWeblogAPI.cs,該文件中有IMetaWeblog的所有接口定義,將它添加到web應用程序中。為了能夠與writer兼容,需要添加一個接口和一個結構:

public struct UserBlog
{
   public string url;
   public string blogid;
   public string blogName;
}
[XmlRpcMethod("blogger.getUsersBlogs")]
UserBlog [] getUsersBlogs( string appKey , string username , string password);

XML-RPC.NET的XmlRpcService類實現了IHttpHandler,並提供所有XML-RPC的所有底層細節的實現。所以接下來只要用一個ashx實現IMetaWeblog就可以了:

Rpc.ashx

[XmlRpcService(Description = "MetaWeblog XML-RPC Service")]
public class Rpc : XmlRpcService , IMetaWeblog
{
}

然后debug起來之后,能夠看到一個方法說明列表。

再來看看接口中各個方法的定義:

  • getUsersBlogs:在writer中設置博客的時候會被調用,必須實現,隨便返回個就行。
  • editPost:用於writer編輯已經在服務器端的文章,可選實現
  • getCategories:獲取所有的分類,在writer“設置類別”功能刷新的時候會被調用;初始化一個blog配置的時候也可能被調用,可選實現
  • getPost:writer試圖同步遠程文章,以實現同步,可選實現
  • getRecentPosts:獲取最近文章,可選實現
  • newPost:新文章創建,必須實現
  • newMediaObject:圖片通過此方法上傳,最好實現,不然就沒有做的意義了

接下來,我說說我的需求吧。我需要在writer中點擊“發布”時,圖片能夠自動存到我指定的路徑,文章也能自動創建在我指定的路徑,文章中的圖片鏈接能夠正確的指向。

配置writer

image

選擇其他服務

image

網址輸入我們的ashx地址。用戶名和密碼隨便啦,因為我們自己實現的,不care。先不要點記住密碼

image

writer不能識別API類型,手動選擇一下,並且再次輸入地址。

這樣就配置好了一個新的blog提供器,你可以自己定義一個名字。重啟writer后就能在列表中看到這個提供器了。

 

接下來所有的細節就是實現這些接口,不難。這里我不再詳細講述。不過需要注意一個圖片的問題:

writer處理圖片都時候,默認會產生一個a和一個img,在上傳至服務端的時候會同時上傳兩張圖片一張用於a的鏈接,一張用於img,兩張圖片有大小的區別。如果都上傳無疑是空間的浪費。所以在編輯文檔的時候要注意去掉圖片的默認鏈接,這樣上傳至服務端的圖片就會只有一張:

image

選中圖片,設置為”無連接“

 

如果有人需要源碼,可聯系我或留言。

 

完整系列目錄:

本篇介紹如何增加blog功能。 
一步步在GitHub上創建博客主頁(5)
本篇介紹如何利用jekyll構建博客。
本篇介紹如何在本地搭建一個GitHub的服務端以便發布前測試。
本篇介紹如何綁定域名。
本篇將帶你快速搭建一個GitHub的項目主頁,在開始之前你最好已經安裝好了git客戶端。
本篇介紹GitHub提供的個人博客及其關鍵技術,以便讀者決策。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM