用AJAX技术聚合RSS
程序员文章站
2024-01-02 11:55:28
有时候,你的blog可能需要这样的功能: 在自己blog上聚合并显示朋友blog的最新文章,这样方便自己及时了解朋友的消息,另外,也方便访问者找到和本blog相...
有时候,你的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”,然后上传到服务器相应的位置:
好了,安装结束,测试一下吧!
在自己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侧边栏合适位置加入这样一段代码:
<script src="ajax_rss.js" type="text/javascript"></script>
然后将下面的内容保存成“ajax_rss.js”,然后上传到服务器相应的位置:
//你可以*添加符合rss 2.0规范的 rss
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;
}
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;
}
好了,安装结束,测试一下吧!