一步步在GitHub上建立部落客頁(7)–相容Windows Writer的服務提供器

來源:互聯網
上載者:User
文章目錄
  •  

摘要

本系列文章將一步步教你如何在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提供的個人部落格及其關鍵技術,以便讀者決策。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.