代码改变世界

【原】豆瓣电台桌面版插件开发——搜索插件

2010-06-10 21:30 by 拖鞋不脱, ... 阅读, ... 评论, 收藏, 编辑

豆瓣电台桌面版之所以在3.0之后采用了插件架构,一方面是为了练手,而更主要是为了方便。方便用户使用,方便我的开发和发布,更是要方便其他有需求的同学的扩展和二次开发。

观察豆瓣电台桌面版的插件管理界面,就可以发现事实上插件也分几种,目前包括“搜索插件”、“过滤插件”、“歌曲处理”、“历史记录”等几种插件。其中“搜索插件”最为简单,目前接口也比较完善,而且可能用户的需求差异也会比较大,所以先放出“搜索插件”的开发方法。

准备工作

首先是下载豆瓣电台桌面版最新版,在下载下来的压缩包中找到Slippor.Common.PluginFramework.dll、Slippor.Douban.Radio.Search.dll这两个dll。

然后新建一个Class Library工程,建议取名为XXSearchPlugin,并添加上述两个dll的引用到新建的工程中。至此,准备工作完成。

开发搜索引擎插件

一个搜索引擎插件能有多简单?只需要两个类!

其中一个类继承Slippor.Douban.Radio.Search下的BaseSearch基类(这是一个应用了ISearch接口的类,已经实现了所有的方法,只需要提供几个字段的信息即可)。以巨鲸搜索为例,JuJingSearch是这样的:

using Slippor.Douban.Radio.Search;

namespace JuJingSearchPlugin
{
    public class JuJingSearch : BaseSearch
    {
        public JuJingSearch()
        {
            _searchUrl = "http://www.top100.cn/search/index.aspx?keyword={0}";
            _name = "巨鲸";
            _encoder = "utf-8";
        }
    }
}

这里有三个字段:_searchUrl就是搜索引擎的搜索特征Url,“{0}”是搜索关键字的占位符;_name是显示名称;_encoder是对搜索关键字的编码字符集,默认为“gb2312”。

除此之外,还需要一个插件类,用于提供插件的相关信息,同样很简单:

using System.ComponentModel;
using Slippor.Common.PluginFramework;
using Slippor.Douban.Radio.Search;

namespace JuJingSearchPlugin
{
    [Description("巨鲸搜索引擎")]
    [DisplayName("巨鲸搜索")]
    [Author("拖鞋不脱")]
    [Version("1.0.0.0")]
    [PluginCategory(PluginCategory.Search)]
    public class JuJingSearchPlugin : SearchPlugin
    {
        protected override ISearch Search
        {
            get { return new JuJingSearch(); }
        }
    }
}

继承了SearchPlugin类,只需实现Search属性就可以了。这里面看起来字数比较多的是类前面的特性“Attribute”标注。各个Attibute的含义都很明了,其中PluginCategory用于指明这个插件是属于哪个类型的插件,这里当然是PluginCategory.Search了。

小提示

正如我之前所说,BaseSearch实现了ISearch接口,而对于相应的SearchPlugin类来说,要实现的Search属性也只要应用了ISearch接口即可。那么当然可以让搜索引擎类直接应用ISearch接口,具体实现方式就不细述了,只提醒一下可能需要引用Slippor.Douban.Radio.Assist.dll这个dll。

备注

这里只放出搜索插件的开发方法是因为目前只有这类插件的接口比较稳定,其余的有待进一步稳定。当然也可以茶余饭后挑几个dll自己研究下,很简单的,尤其是配合reflector大杀器之后。

如果有童鞋开发的插件愿意共享出来,十分欢迎。请将源代码发予我,我会在检测之后发布在豆瓣电台桌面版——插件大全中。之所以必须是源代码,是出于安全的考虑,请大家谅解。