文章目錄
摘要
本系列文章將一步步教你如何在GitHub上建立自己的部落格或首頁,事實上相關的文章網上有很多,這裡只是把自己的經驗分享給新手,方便他們逐步開始GitHub之旅。本篇將介紹如何使GitHub部落格如何相容Windows Writer。
本文首發於我的github首頁:一步步在GitHub上建立部落客頁(7)--相容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
不出意外,現在可以直接編譯通過。找到解壓包中的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
選擇其他服務
網址輸入我們的ashx地址。使用者名稱和密碼隨便啦,因為我們自己實現的,不care。先不要點記住密碼
writer不能識別API類型,手動選擇一下,並且再次輸入地址。
這樣就配置好了一個新的blog提供器,你可以自己定義一個名字。重啟writer後就能在列表中看到這個提供器了。
接下來所有的細節就是實現這些介面,不難。這裡我不再詳細講述。不過需要注意一個圖片的問題:
writer處理圖片都時候,預設會產生一個a和一個img,在上傳至服務端的時候會同時上傳兩張圖片一張用於a的連結,一張用於img,兩張圖片有大小的區別。如果都上傳無疑是空間的浪費。所以在編輯文檔的時候要注意去掉圖片的預設連結,這樣上傳至服務端的圖片就會只有一張:
選中圖片,設定為”無串連“
如果有人需要源碼,可聯絡我或留言。
完整系列目錄:
一步步在GitHub上建立部落客頁(6)本篇介紹如何增加blog功能。
一步步在GitHub上建立部落客頁(5)本篇介紹如何利用jekyll構建部落格。一步步在GitHub上建立部落客頁(4)本篇介紹如何在本地搭建一個GitHub的服務端以便發布前測試。一步步在GitHub上建立部落客頁(3)本篇介紹如何綁定網域名稱。一步步在GitHub上建立部落客頁(2)本篇將帶你快速搭建一個GitHub的項目首頁,在開始之前你最好已經安裝好了git用戶端。一步步在GitHub上建立部落客頁(1)本篇介紹GitHub提供的個人部落格及其關鍵技術,以便讀者決策。