Project DescriptionConvert everything to RSS Feed
GreedyRSS是一个把网页中的新闻或其它各种形式的来源转换为RSS种子的功能平台。针对不同的来源,可以用插件的形式加入不同的生成器。生成器可以分析网页源代码或做其它各种形式的处理,最终创建相应的RSS种子。另外,GreedyRSS还使用WCF提供了部分功能。
GreedyRSS的RSS种子生成器可以插件形式扩充,已随源代码附带六个示例生成器,分别是:
1、卓越亚马逊价格变动通知生成器(名称为amazon,参见
http://semify.spaces.live.com/blog/cns!7CB96C25969B3811!2981.entry)
2、河海大学首页新闻生成器(名称为hhu)
3、河海大学江宁校区新闻生成器(名称为hhujn)
4、河海大学江宁校区通知生成器(名称为hhujnn)
5、河海大学计算机与信息学院新闻生成器(名称为hhujxy)
6、河海大学工程训练中心新闻生成器(名称为hhucc)
部署方式因生成器可以扩充并存放在不同位置,具体部署方式可能不同,下面仅以默认方式为例:
1、在Visual Studio中生成解决方案,生成类型选择Release。
2、在Visual Studio中发布SuchSofts.GreedyRss.Manager项目到IIS。
3、进入存放SuchSofts.GreedyRss.Manager项目部署结果的IIS目录,进入bin子目录,创建Generators子目录,并为其设置写权限(以IIS7为例,建议设置IIS_IUSRS拥有对Generators目录的完全控制权限)。
4、复制各示例生成器项目(名称以SuchSofts.GreedyRss.Feed.Generators起头)的生成结果(项目目录下的bin\release子目录下与项目同名的dll文件)到第3步创建的Generators目录。
5、在浏览器输入http://localhost/XXX/Feed.ashx?name=hhu(其中XXX为存放SuchSofts.GreedyRss.Manager项目部署结果的IIS目录名称)即可访问由河海大学首页新闻生成器生成的RSS种子,订阅河海大学首页新闻。输入其它name参数,可访问由相应生成器生成的RSS种子。
扩展方式GreedyRSS支持以插件形式扩充生成器,获得RSS种子。新闻来源不仅仅局限于新闻页面,可以发挥想象力,创建各种各样的RSS种子,随源代码附带的卓越亚马逊价格变动通知生成器即为一例,此外也可以创建对某某公共邮箱邮件的订阅,等等。
GreedyRSS为创建自定义生成器插件提供了一些辅助类,位于SuchSofts.GreedyRss.Feed项目中,包括:
1、SuchSofts.GreedyRss.Feed.Utility.SourceDownloader类:提供下载指定页面源代码的功能。
2、SuchSofts.GreedyRss.Feed.Utility.Settings类:以一种新方法实现了设置数据的管理,生成器可通过继承该抽象类创建一个配置文件。关于该类的使用方法,可参见
http://semify.spaces.live.com/blog/cns!7CB96C25969B3811!2345.entry,也可查看卓越亚马逊价格变动通知生成器项目(SuchSofts.GreedyRss.Feed.Generators.AmazonPriceNotice)的源代码,了解如何使用该类极大简化存取配置信息的操作。
3、SuchSofts.GreedyRss.Feed.GeneratorForSimpleNewsList类:提供简单新闻列表形式的新闻页面的生成器可以使用的一些通用功能的抽象类。所谓“简单”,指的是类似“主页面是一个新闻标题列表,点击新闻标题可进入新闻正文”这样的新闻页面。许多新闻站点都是以这种形式组织新闻的,若要创建针对这类站点的生成器,可通过继承该类来简少编码量。可以查看河海大学首页新闻生成器项目(SuchSofts.GreedyRss.Feed.Generators.HHUNews)的源代码,了解该类如何发挥作用。
自定义生成器类最终都实现了SuchSofts.GreedyRss.Feed.IGenerator接口(可能是直接实现,也可能是通过继承GeneratorForSimpleNewsList类间接实现),IGenerator接口定义了生成RSS种子的相关方法,涉及SuchSofts.GreedyRss.Feed.RssFeed和SuchSofts.GreedyRss.Feed.ItemTitleDetail类,其中前者又与SuchSofts.GreedyRss.Feed.RssItem类共同实现了一个RSS种子的封装,但目前仅实现了RSS规范中要求必须包含的内容。可参见源代码及相关注释了解这些类,在此不再详细介绍。下面以创建一个生成器并加入到部署中的过程为例,介绍扩展GreedyRSS功能的方式:
1、新建一个Class Library类型项目。
2、添加对SuchSofts.GreedyRss.Feed项目的引用。如果当前项目与该项目在同一解决方案中,可在引用窗口的Project标签中直接添加,否则可在Browse标签中选择并添加由该项目生成的dll文件(SuchSofts.GreedyRss.Feed项目目录下的bin\release子目录下的SuchSofts.GreedyRss.Feed.dll文件)。
3、新建一个实现SuchSofts.GreedyRss.Feed.IGenerator接口或继承自SuchSofts.GreedyRss.Feed.GeneratorForSimpleNewsList抽象类的类,并实现接口定义的有关方法或抽象类尚未实现的抽象方法。可参见已实现的示例生成器的源代码及相关注释了解这些方法。
4、生成该Class Library项目,生成类型选择Release。将生成的dll文件(项目目录下的bin\release子目录下与项目同名的dll文件)复制到IIS具有读写权限的目录(建议与示例生成器存放在同一目录,即Generators目录)。
5、进入存放SuchSofts.GreedyRss.Manager项目部署结果的IIS目录,打开生成器配置文件Generators.xml。Generators.xml按以下格式记录各生成器的信息:
<generator>
<name>生成器名称</name>
<path>生成器dll文件所在路径</path>
<class>生成器类名称</class>
</generator>
其中,生成器名称即通过Feed.ashx的name参数传递的名称;生成器dll文件所在路径即为第4步创建的dll文件的所存放的路径;生成器类名称即第3步创建的类的完整名称(包括命名空间名称)。以河海大学首页新闻生成器为例,其在Generators.xml中的定义为:
<generator>
<name>hhu</name>
<path>~/bin/generators/SuchSofts.GreedyRss.Feed.Generators.HHUNews.dll</path>
<class>SuchSofts.GreedyRss.Feed.Generators.HHUNews.Generator</class>
</generator>
在Generators.xml中添加一段针对创建的生成器的类似以上片段的定义并保存。
6、在浏览器输入http://localhost/XXX/Feed.ashx?name=YYY(其中XXX为存放SuchSofts.GreedyRss.Manager项目部署结果的IIS目录名称,YYY为在第5步Generators.xml中设置的name值)即可访问由创建的生成器生成的RSS种子。
使用WCF新闻服务GreedyRSS通过基于WCF的Web Services暴露了一些实用的功能,以便用更高需求的用户使用。具体地说,包括以下方法:
1、GetAvailableFeeds方法:获得可以生成的种子列表。
2、GetItemTitleDetails方法:获得从指定生成器生成的Item元素的标题、链接组合列表。Item元素即RSS种子中的Item元素,一个Item元素相当于一则新闻。
3、GetTopItemTitleDetails方法:获得从指定生成器生成的最新指定数目条Item元素的标题、链接组合列表。
4、GetItemDescription方法:获得从指定生成器生成的指定链接的Item元素的描述。
5、GetFeedSource方法:获得从指定生成器生成的RSS种子源代码。
可参见SuchSofts.GreedyRss.Manager项目和SuchSofts.GreedyRss.Manager.Utility项目的源代码及相关注释了解这些方法。
通过调用这些方法,可以开发出诸如新闻中心一类的网站或其它形式的应用,例如下图就是基于Java技术开发的一个新闻中心网站的例子。

可通过http://localhost/XXX/Feed.svc?wsdl(其中XXX为存放SuchSofts.GreedyRss.Manager项目部署结果的IIS目录名称)获得该Web Services的定义。
若使用WCF客户端调用该Web Services,需要在为项目添加服务引用后,将项目配置文件的WCF绑定设置中的maxBufferSize、maxReceivedMessageSize和maxStringContentLength的值为6553600,否则因为生成的RSS种子文件过长,可能抛出异常。