自己动手生成评论RSS

本文配套源码

最近博客园讨论气氛热烈,有价值的评论也层出不穷。有时候我们会很希望订阅某篇文章的评论RSS ,只可惜博客园目前没有这个功能。对于注册用户来说,我们可以通过点击评论框下方的“订阅回 复”链接,这样就会在出现新评论的时候收到邮件。可惜匿名用户,只得不断刷新才能关注最近讨 论到什么地方了。不过我们是什么人?我们是程序员,这点障碍对我们来说应该是在简单不过的小事了 。自己搭一个站点,获取页面数据,分析HTML,输出为RSS,就这么简单。

老赵为此作了一个最 最简单的示例,可以订阅http://jeffreyzhao.cnblogs.com上任意一篇文章的评论。由于只是简单的个 人工具程序,所以完全不考虑性能、伸缩性、扩展性,容错性,也抛弃任何的单元测试,依赖注入等 “最佳实践”。总之一句话,怎么容易怎么来。

这个示例由两部分组成,第一部分是 个静态HTML页面,根据文章URL生成并转向至其RSS链接。寥寥数行HTML和JavaScript:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
  <title>博客园RSS</title>
  <script  language="javascript" type="text/javascript">
    function  goToCommentRss(url) {
      window.location = "CommentRss.ashx? url=" + encodeURIComponent(url);
    }
  </script>
</head>
<body>
  <textarea id="url"  cols="50" rows="10"></textarea><br />
   <input type="button" value="Comment RSS"
     onclick="goToCommentRss(document.getElementById('url').value)" />
</body>
</html>

CommentRss.ashx将为我们输出评论的RSS。它的 代码如下:

public class CommentRss : IHttpHandler
{
  public  void ProcessRequest(HttpContext context)
  {
    string url =  context.Request.QueryString["url"];

    WebClient webClient =  new WebClient();
    webClient.Encoding = Encoding.UTF8;
    string  html = webClient.DownloadString(url);

    context.Response.ContentType =  "text/xml";
    context.Response.ContentEncoding = Encoding.UTF8;

    SyndicationFeed feed = GetRssFeed(url, html);
     Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
    XmlWriter  rssWriter = XmlWriter.Create(context.Response.Output);
     rssFormatter.WriteTo(rssWriter);
    rssWriter.Close();
  }

   private static SyndicationFeed GetRssFeed(string url, string html)
  {
     ...
  }

  public bool IsReusable { get { return false; }  }
}

其实.NET框架已经为我们准备了太多太多有用的工具,我们只需要将它们拼 接起来即可。例如有了WebClient类,三行代码便可下载到页面的HTML。然后我们通过GetRssFeed方法来 获得一个SyndicationFeed对象,再通过Rss20FeedFormatter输出。SyndicationFeed和 Rss20FeedFormatter都是.NET 3.5中自带的类库,放在System.ServiceModel.dll程序集中的 System.ServiceModel.Syndication命名空间里,可以方便读取或生成Atom 1.0或RSS 2.0格式的XML为我 们所用。更多信息可以参考InfoQ中文站的这篇报道:WCF的Web编程模型资源。

GetRssReed的关 键在于分析HTML字符串,老赵在这里使用了正则表达式匹配出每条评论的标题、URL、时间、用户和内容 。然后构造出一个SyndicationFeed对象就再简单不过了。可惜的是,博客园不同模板的HTML不同,因此 老赵的这个示例只支持现在用的这个模板。您可以自己改造,例如为CommentRss.ashx增加一个新的参数 ,用于指名HTML的解析方式,便可以用于多个模板了。

时间: 2024-11-08 21:19:10

自己动手生成评论RSS的相关文章

asp.net生成HTML_XML/RSS

思路 1. 利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据. 2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件. 优点 1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页

php实现的RSS生成类实例_php技巧

本文实例讲述了php实现的RSS生成类.分享给大家供大家参考.具体如下: class RSS { var $title; var $link; var $description; var $language = "en-us"; var $pubDate; var $items; var $tags; function RSS() { $this->items = array(); $this->tags = array(); } function addItem($ite

PHP RSS/Feed类库

通用PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM) PHP Universal Feed Generator (supports RSS 1.0, RSS 2.0 and ATOM)   可 生成的RSS版本: RSS 1.0 (which officially obsoleted RSS 0.90) RSS 2.0 (which officially obsoleted RSS 0.91, 0.92, 0.93 and 0.94) ATOM 1.0 功能: 可生成R

用 Ajax 和 RSS 攒个首页新闻

ajax|rss 为了排遣这段时间的无聊也顺便做个 RSS 应用的练习,决定给自己维护的一个小网站加个首页新闻,浏览器用 Ajax 或者 Ajah 从服务器取新闻异步的显示出来,同时提供 RSS 源供聚合器订阅. XMLHTTPRequest 从上次做过一个手机模拟器后就再没碰过,这次在网上搜寻了一番居然发现了一个好东西:http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/,一个 Cross-Browser 的 XMLHtt

巧用Ajax和RSS做个人门户网站

ajax|rss 为了排遣这段时间的无聊也顺便做个 RSS 应用的练习,决定给自己维护的一个小网站加个首页新闻,浏览器用 Ajax 或者 Ajah 从服务器取新闻异步的显示出来,同时提供 RSS 源供聚合器订阅. XMLHTTPRequest 从上次做过一个手机模拟器后就再没碰过,这次在网上搜寻了一番居然发现了一个好东西:http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/,一个 Cross-Browser 的 XMLHtt

RSS 开发教程

rss|教程 RSS(Really Simple Syndication,真正简单的连锁)是一种 Web 内容连锁格式.RSS 成为通过 Web 连锁新闻内容的标准格式.作为最近与 Sun Microsystems 签署合同的一部分,我负责开发任何懂得 RSS.JavaServer Pages 和 HTML 的人便可以使用的"JSP 标签库".taglib 主要面向用 RSS 收集新闻内容的 Web 站点的非技术性编辑人员.我的目标是开发在 Web 页中将简化使用 RSS 内容(0.9

用Ajax和RSS制作一个首页新闻

ajax|rss 给自己维护的一个小网站加个首页新闻,浏览器用 Ajax 或者 Ajah 从服务器取新闻异步的显示出来,同时提供 RSS 源供聚合器订阅. XMLHTTPRequest 从上次做过一个手机模拟器后就再没碰过,这次在网上搜寻发现了一个好东西:http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/,一个 Cross-Browser 的 XMLHttpRequest 实现,作者在创作共用条款(Creative Com

基于ASP.NET AJAX技术开发在线RSS阅读器(上篇)

[注]本文测试环境:Windows XP专业版+Visual Studio 2005+整套ASP.NET AJAX框架+ASP.NET RSS Toolkit+SQL Server 2005. 一.RSS技术简介 RSS是一种描述和同步网站内容的XML格式,已经成为越来越流行的网站内容订阅技术.通过这种技术,网站可以极大地提高广大网站用户和网站数据之间的数据交互. RSS阅读软件可以分为桌面离线式和在线式两大类.有了这种工具,用户只需要添加初始其所关注的RSS网址,以后系统会自动更新相关内容,网

SEnuke快速入门之六:RSS提交

在介绍RSS提交模块之前,先回头来想一下我们之前都做了哪些操作了 我们有给web2.0站点发过文章了,有把文章提交到书签站了 提交成功的文章和书签就会生成一个rss地址,并且保存在URL Manager里 那我们今天的任务就是把这些RSS地址提取出来,提交到各大Rss目录,主要目的就是让之前的文章和书签被收录. 思路理清楚就可以开工了 看下图 首先我把所有rss地址都合并成一条了,拿这条去提交即可. 如果你的rss过多,最好不要全合并成一条,分成几条来提交,或者直接提交原rss Please e