手动生成评论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的解析方式,便可以用于多个模板了。
这个示例使用起来也非常简单,您可以将其编译或部署在本地的IIS上,打开Default.html页面,将文章的URL复制进去,如《老赵谈IL(2)》一文的URL:
点击按钮,便会链接至RSS页。于是在IE中便会展示为:
此时您只要把URL放入本地的RSS阅读器即可。因为程序部署在您的机器上,因此您无法使用Google Reader等工具进行订阅。如果您有条件的话,把它们放到虚拟空间等地方即可。由于您的程序只为您一个人服务,因此不会占用大量资源,目前的写法也足够了。
我们是程序员。自己动手,丰衣足食。
【相关推荐】
1. RSS高效入门教程
以上是手动生成评论RSS的代码实例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

如何用PHP和XML实现网站的RSS订阅管理和显示RSS(ReallySimpleSyndication)是一种用于发布经常更新的博客文章、新闻、音频和视频等内容的标准格式。许多网站都提供了RSS订阅功能,使用户可以方便地获取最新的信息。在本文中,我们将学习如何使用PHP和XML来实现网站的RSS订阅管理和显示功能。首先,我们需要创建一个RSS订阅的XM

随着互联网的迅速发展,越来越多的网站开始提供RSS订阅服务,使得用户可以方便地获取网站更新的内容。而PHP作为一种流行的服务端脚本语言,有着许多用于处理RSS订阅的函数,使得开发人员可以轻松地从RSS源中提取需要的数据。本篇文章将介绍如何使用PHP函数获取RSS订阅内容。一、什么是RSS?RSS全名为“ReallySimpleSyndication”(简

如何通过PHP编写一个简单的RSS订阅器RSS(ReallySimpleSyndication)是一种用于订阅网站内容的格式,通过订阅器可以获取到最新的文章、新闻和博客等更新。在本文中,我们将使用PHP编写一个简单的RSS订阅器来演示如何获取和显示RSS源的内容。确认环境和准备工作在开始之前,确保你已经有一个PHP环境,并且已经安装了SimpleXML扩

如何使用PHP实现RSS订阅功能RSS(ReallySimpleSyndication)是一种用于发布和订阅网站更新内容的格式。使用RSS,用户可以方便地获取他们感兴趣的网站的最新信息,而无需定期访问网站。在本文中,我们将学习如何使用PHP实现RSS订阅功能。首先,我们需要了解RSS的基本结构。一个典型的RSS文档由一个或多个项目(item)组成

XML/RSS数据整合可以通过解析和生成XML/RSS文件来实现。1)使用Python的xml.etree.ElementTree或feedparser库解析XML/RSS文件,提取数据。2)使用ElementTree生成XML/RSS文件,逐步添加节点和数据。

XML是一种用于数据存储和交换的标记语言,RSS是基于XML的格式,用于发布更新内容。1.XML定义数据结构,适合数据交换和存储。2.RSS用于内容订阅,解析时使用专门库。3.解析XML可使用DOM或SAX,生成XML和RSS需正确设置元素和属性。

随着互联网内容的不断丰富和多样化,更多的人开始使用RSS技术来订阅自己感兴趣的博客、新闻等内容,让自己不再错过任何重要信息。而作为Web开发中常用的编程语言之一,PHP也提供了一些强大的函数和工具来帮助我们爬取其他网站的RSS订阅,并将其展示在我们自己的网站上。本文将介绍如何使用PHP来爬取其他网站的RSS订阅,并将其解析为数组或对象,

使用PHP和XML实现RSS订阅功能RSS(ReallySimpleSyndication)是一种用于发布和订阅网站更新内容的标准格式。它以XML为基础,并通过订阅者的RSS阅读器获取最新的内容。在本文中,我们将介绍如何使用PHP和XML来实现简单的RSS订阅功能。创建XML文件首先,我们需要创建一个XML文件来存储我们要发布的内容。假设我们要发布的是文
