用AJAX技术聚合RSS
有时候,你的Blog可能需要这样的功能:
在自己Blog上聚合并显示朋友Blog的最新文章,这样方便自己及时了解朋友的消息,另外,也方便访问者找到和本Blog相关的blog和文章。
这个功能你可以叫它“Blog聚合”或者“Blog联播”,目前,实现这样功能的软件或服务都有限制:比如,Terac Sinfonia、Lilina、MXNA虽然功能都很强大,但是需要安装,不能自由定制,不能嵌入到Blog侧边栏。另一方面,目前提供这样服务的BSP只能聚合本系统内的用户,限制也很多。
为了解决以上问题,我采用AJAX(Asynchronous JavaScript + XML)技术实现了在自己Blog上聚合并显示朋友Blog的最新文章的功能,你可以根据需要,进行自由定制。默认是支持RSS 2.0规范的,Terac Miracle、Movable Type、Word Press、Donews / 博客园 / CSDN采用的.Text系统都能很好的支持,你可以自由修改,来支持RSS 0.92、RSS 1.0、Atom 0.3。
为什么采用AJAX呢?首先,聚合别人的RSS不能影响自己网站的速度,所以需要异步执行,其次,RSS本身就是一个很规范的XML文档,另外,由于聚合内容大小不可定,所以必须要局部刷新,最重要的一点,采用AJAX完全把加载解析XML的操作放到客户端进行处理,节省服务器带宽和资源,最后,这个功能我完全用JavaScript实现的,这样,不管你的blog是ASP、.Net、PHP、JSP、Perl,甚至纯HTML的都能用。下面说用法:
首先,在你Blog侧边栏合适位置加入这样一段代码:
然后将下面的内容保存成“ajax_rss.js”,然后上传到服务器相应的位置:
processRSS('http://www.songlian.cn/blog/feed.php');
processRSS('http://www.bo-blog.com/weblog/feed.php');
function processRSS(url){
var req = getXMLHttpRequest();
req.onreadystatechange = function () {
if (req.readyState == 4 && req.status == 200) {
var doc=req.responseXML.documentElement;
parseRSS(doc);
}
}
req.open("GET",url, true);
req.send(null);
}
function parseRSS(doc) {
//如果要用RSS 0.92, RSS 1.0, Atom 0.3,你需要改下面3行
var blogName=doc.getElementsByTagName("title")[0].firstChild.data;
var entryName=doc.getElementsByTagName("title")[1].firstChild.data;
var entryLink=doc.getElementsByTagName("link")[1].firstChild.data;
document.getElementById('ajax_rss').innerHTML += '<a target="_blank" href="'+entryLink+'" title="'+blogName+'">'+entryName+'</a><br/>'; }
function getXMLHttpRequest() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
好了,安装结束,测试一下吧!
最新文章
- Automated Memory Analysis
- Linux中vim的简单配置
- D. Book of Evil
- Andorid-15k+的面试题。
- 删除mysql
- jQuery Ajax 实例 全解析
- css hack 兼容性
- 关于ubuntu中的软件安装
- Eclipse无法打开“Failed to load the JNI shared library”
- PhpMyAdmin隐藏数据库设置同前缀失效的问题
- Java匿名内部类使用与示例
- UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character &#39;\xa0&#39; in position 46:illegal multibyte sequence
- 淘宝NPM源的使用
- linux rsync实时同步
- [Ioi2011]ricehub
- 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思
- LoadRunner(四)——深度了解LR相关功能
- Java多线程:向线程传递参数的三种方法
- SQL反模式学习笔记19 使用*号,隐式的列
- 【函数参数】什么是*args和**kwargs?
热门文章
- Docker 基础技术:Linux Namespace(下)
- 【转】从外行的视角尝试讲解为什么这回丰田栽了【全文完】【v1.01】
- 使用curl操作openstack swift
- R工作空间
- [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照
- DNN 错误代码 0x80070005 解决方案
- 数据结构 -- 图的最短路径 Java版
- ArrayList中元素去重问题
- MSSQL 2005数据库可疑状态
- 解决 Unable to load DLL &#39;OraOps9.dll&#39;: 找不到指定的模块。 (Exception from HRESULT: 0x8007007E)