• Windows Writer的服务提供器


    摘要

    本系列文章将一步步教你如何在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

    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提供的个人博客及其关键技术,以便读者决策。
     
     
    分类: ASP.NETWeb开发
    标签: Github-page
  • 相关阅读:
    掌游 新项目:我采用NH连接MySql所遇到的问题
    运行时动态将字符串编译为C#可执行代码
    数据库连接字符串用IP死活连不上,只能用计算机名连,ADO或ORM错误提示为表“对象”无效
    File.Copy是Copy完再执行下一句的,自己验证过了。
    window.external.XXX 判断是否有这个方法
    java构建工具——ant使用
    大数据学习之路(1)Hadoop生态体系结构
    Java经典代码片段——使用NIO进行快速的文件拷贝
    Java代码片段——向文件末尾添加内容
    JAVA几种常见的编码格式(转)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2868950.html
Copyright © 2020-2023  润新知