Python, Java, Life, etc

A blog of technology and life.

BlogJava 首页 新随笔 联系 聚合 管理
  30 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks

Lilina:RSS聚合器构建个人门户(Write once, publish anywhere)

最近搜集RSS解析工具中找到了MagPieRSS 和基于其设计的Lilina;Lilina的主要功能:

1 基于WEB界面的RSS管理:添加,删除,OPML导出,RSS后台缓存机制(避免对数据源服务器产生过大压力),ScriptLet: 类似于Del.icio.us it的收藏夹即时订阅JS脚本;

2 前台发布:将自己的首页改成了用Lilina发布我常看的几个朋友的网志,也省去了很多更新自己网页的工作,需要php 4.3 + mbstring iconv
lilina.png
开源软件对i18n的支持越来越好了,php 4.3.x,'--enable-mbstring' '--with-iconv'后比较好的同时处理了UTF-8和其他中文字符集发布的RSS
需要感谢Steve在PHP进行转码方面MagPieRSS进行和XML Hacking工作。至少目前为止:Add to my yahoo还不能很好的处理utf-8字符集的RSS收藏

记得年初Wen Xin在CNBlog的研讨会上介绍了个人门户的概念,随着RSS在CMS技术中的成熟,越来越多的服务可以让个人用户根据自己需求构建门户,也算是符合了互联网的非中心化趋势吧,比如利用Add to My Yahoo!功能,用户可以轻松的实现自己从更多数据源进行新闻订阅。想象一下把你自己的del.icio.us书签收藏 / flickr图片收藏 / Yahoo!新闻都通过这样一个RSS聚合器聚合/发布起来。其传播效率将有多快。

好比软件开发通过中间平台/虚拟机实现:一次写成,随处运行(Write once, run anywhere),通过RSS/XML这个中间层,信息发布也实现了:一次写成,随处发布(Write once, publish anywhere...)

安装Lilina需要PHP 4.3 以上,并带有iconv mbstring等函数的支持,请确认一下PHP模块的支持:'--enable-mbstring' '--with-iconv'

另外就是一个需要能通过服务器端向外部服务器发送RPC请求,这点51.NET不支持。感觉PowWeb的服务很不错,很多缺省的包都安装好了:

iconv
iconv support enabled
iconv implementation unknown
iconv library version unknown

Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1

mbstring
Multibyte Support enabled
Japanese support enabled
Simplified chinese support enabled
Traditional chinese support enabled
Korean support enabled
Russian support enabled
Multibyte (japanese) regex support enabled

将安装包解包(下载文件扩展名是.gz 其实是.tgz,需要重命名一下):上传到服务器相应目录下,注意:相应cache目录和当前目录的可写入属性设置,然后配置一下conf.php中的参数即可开始使用。

何东给我的建议:
1)右边的一栏,第一项的sources最好跟hobby、友情链接一样,加个图片。
2)一堆检索框在那儿,有些乱,建议只有一个,其它的放到一个二级页面上。
3)把联系方式及cc,分别做成一条或一个图片,放在右边一栏中,具体的内容可以放到二级页面上,因为我觉得好象没有多少人会细读这些文字。
4)如果可能,把lilina的头部链接汉化一下吧?

一些改进计划:
1 删除过长的摘要,可以通过寻找第2个"

" 实现;
2 分组功能:将RSS进行组输出;

修改默认显示实现:Lilina缺省显示最近1天发表的文章,如果需要改成其他时间周期可以找到:
$TIMERANGE = ( $_REQUEST['hours'] ? $_REQUEST['hours']*3600 : 3600*24 ) ;

进行改动。

RSS是一个能将自己的所有资源:WIKI / BLOG / 邮件聚合起来的轻量级协议,以后无论你在何处书写,只要有RSS接口就都可以通过一定方式进行再次的汇聚和发布起来,从而大大提高了个人知识管理和发布/传播效率。

以前对RSS理解非常浅:不就是一个DTD嘛,真了解起解析器来,才知道namespace的重要性,一个好的协议也应该是这样的:并非没有什么可加的,但肯定是没有什么可“减”的了,而真的要做到这个其实很难很难……。

我会再尝试一下JAVA的相关解析器,将其扩展到WebLucene项目中,更多Java相关Open Source RSS解析器资源

另外找到的2个使用Perl进行RSS解析的包:
使用XML::RSS::Parser::LiteXML::RSS::Parser 解析RSS

XML::RSS::Parser::Lite的代码样例如下:

#!/usr/bin/perl -w
# $Id$
# XML::RSS::Parser::Lite sample

use strict;
use XML::RSS::Parser::Lite;
use LWP::Simple;


my $xml = get("http://www.klogs.org/index.xml");
my $rp = new XML::RSS::Parser::Lite;
$rp->parse($xml);

# print blog header
print "<a href=\"".$rp->get('url')."\">" . $rp->get('title') . " - " . $rp->get('description') . "</a>\n";

# convert item to <li>
print "<ul>";
for (my $i = 0; $i < $rp->count(); $i++) {
my $it = $rp->get($i);
print "<li><a href=\"" . $it->get('url') . "\">" . $it->get('title') . "</a></li>\n";
}
print "</ul>";

安装:
需要SOAP-Lite

优点:
方法简单,支持远程抓取;

缺点:
只支持title, url, description这3个字段,不支持时间字段,

计划用于简单的抓取RSS同步服务设计:每个人都可以出版自己订阅的RSS


XML::RSS::Parser代码样例如下:
#!/usr/bin/perl -w
# $Id$
# XML::RSS::Parser sample with Iconv charset convert

use strict;
use XML::RSS::Parser;
use Text::Iconv;
my $converter = Text::Iconv->new("utf-8", "gbk");


my $p = new XML::RSS::Parser;
my $feed = $p->parsefile('index.xml');

# output some values
my $title = XML::RSS::Parser->ns_qualify('title',$feed->rss_namespace_uri);
# may cause error this line: print $feed->channel->children($title)->value."\n";
print "item count: ".$feed->item_count()."\n\n";
foreach my $i ( $feed->items ) {
map { print $_->name.": ".$converter->convert($_->value)."\n" } $i->children;
print "\n";
}

优点:
能够直接将数据按字段输出,提供更底层的界面;

缺点:
不能直接解析远程RSS,需要下载后再解析;

2004-12-14:
从cnblog的Trackback中了解到了Planet RSS聚合器

Planet的安装:解包后,直接在目录下运行:python planet.py examples/config.ini 就可以在output目录中看到缺省样例FEED中的输出了index.html,另外还有opml.xml和rss.xml等输出(这点比较好)

我用几个RSS试了一下,UTF-8的没有问题,但是GBK的全部都乱码了,planetlib.py中和XML字符集处理的只有以下代码:看来所有的非UTF-8都被当作iso8859_1处理了:
try:
data = unicode(data, "utf8").encode("utf8")
logging.debug("Encoding: UTF-8")
except UnicodeError:
try:
data = unicode(data, "iso8859_1").encode("utf8")
logging.debug("Encoding: ISO-8859-1")
except UnicodeError:
data = unicode(data, "ascii", "replace").encode("utf8")
logging.warn("Feed wasn't in UTF-8 or ISO-8859-1, replaced " +
"all non-ASCII characters.")

近期学习一下Python的unicode处理,感觉是一个很简洁的语言,有比较好的try ... catch 机制和logging

关于MagPieRSS性能问题的疑虑:
对于Planet和MagPieRSS性能的主要差异在是缓存机制上,关于使用缓存机制加速WEB服务可以参考:可缓存的cms设计

可以看到:Lilina的缓存机制是每次请求的时候遍历缓存目录下的RSS文件,如果缓存文件过期,还要动态向RSS数据源进行请求。因此不能支持后台太多的RSS订阅和前端大量的并发访问(会造成很多的I/O操作)。

Planet是一个后台脚本,通过脚本将订阅的RSS定期汇聚成一个文件输出成静态文件。

其实只要在MagPieRSS前端增加一个wget脚本定期将index.php的数据输出成index.html,然后要求每次访问先访问index.html缓存,这样不就和Planet的每小时生成index.html静态缓存一样了吗。

所以在不允许自己配置服务器脚本的虚拟主机来说Planet根本是无法运行的。

更多关于PHP中处理GBK的XML解析问题请参考:
MagPieRSS中UTF-8和GBK的RSS解析分析

2004-12-19
正如在SocialBrain 2005年的讨论会中,Isaac Mao所说:Blog is a 'Window', also could be a 'Bridge',Blog是个人/组织对外的“窗口”,而RSS更方便你将这些窗口组合起来,成为其间的“桥梁”,有了这样的中间发布层,Blog不仅从单点发布,更到P2P自助传播,越来越看到了RSS在网络传播上的重要性。

Posted by chedong at December 11, 2004 12:34 AM Edit
Last Modified at December 19, 2004 04:40 PM

Trackback Pings

TrackBack URL for this entry:
http://www.chedong.com/cgi-bin/mt3/mt-tb.cgi/27

Listed below are links to weblogs that reference Lilina:RSS聚合器构建个人门户(Write once, publish anywhere):

» MagPieRSS中UTF-8和GBK的RSS解析分析(附:php中的面向字符编程详解) from 车东BLOG
第一次尝试MagpieRSS,因为没有安装iconv和mbstring,所以失败了,今天在服务器上安装了iconv和mtstring的支持,我今天仔细看了一下lilina中的rss_fetch的用法:最重要的是制定RSS的输出格式为'MAGPIE_OU... [Read More]

Tracked on December 19, 2004 12:37 AM

» 用 lilina 和 blogline 来看 blog from Philharmania's Weblog
看到一篇介绍 lilina 的文章后就自己安装了一个试了下。lilina 是一个用 PHP 语 [Read More]

Tracked on December 26, 2004 01:57 PM

» CNBlog作者群RSS征集中 from CNBlog: Blog on Blog
在CNBLOG上搭建了Lilina RSS聚合器,请各位志愿者将各自网志或者和与cnblog相关专栏的RSS提交给我 — 直接在评论中回复即可。 推广使用RSS聚合工具主要的目的 . [Read More]

Tracked on December 26, 2004 07:42 PM

» 关于加快 lilina 显示速度的一些设置 from Kreny's Blog
我的 lilina 在设定了几位朋友的 blog 和一些 news 以后,发现打开速度异常的慢,于是请教了车东,解决了问题。 解决的关键在于:

直接将以下语句加入到 index.php 头部即可,LILINA中你 .
[Read More]

Tracked on January 14, 2005 06:14 PM

» MT的模板修改和界面皮肤设置 from 车东BLOG
分类索引: 首页缺省有按月归档的索引,没有分类目录的索引,看了手册里面也没有具体的参数定义,只好直接看SOURCE:尝试着把Monthly改成Category,居然成了 :-) 还到了Movable Style的MT样式站,... [Read More]

Tracked on January 17, 2005 01:25 PM

Comments

请问如果更改默认显示7天的新闻,谢谢。

Posted by: honren at December 12, 2004 10:20 PM

我使用lilina已经一段时间了。
http://news.yanfeng.org
稍微改了一点UI。
如果你能改进它,那就好了。

Posted by: mulberry at December 13, 2004 09:24 AM

老车同志,没觉得你使用lilina以来,主页的访问速度具慢吗?放弃吧,至少没必要当作首页,lilina还在技术还不成熟`~

Posted by: kalen at December 16, 2004 10:33 AM

可以考虑一下用drupal

Posted by: shunz at December 28, 2004 06:46 PM

可以试试我做的:http://blog.terac.com

每3小时抓取blog,然后每个选5条最新的,排序,聚合,生成静态xml,用xsl格式化显示。。。

Posted by: andy at January 6, 2005 12:53 PM

车东同志,这样做不好:P
rss本来就在网上,你聚合它在你的网页上不仅损害了你自己主页的质量,而且迷惑了搜索引擎,造成你痛斥的“门户网站损害创作热情”的效果。还是不要聚合的好!

posted on 2005-02-17 03:00 pyguru 阅读(796) 评论(0)  编辑  收藏 所属分类: Build Website

只有注册用户登录后才能发表评论。


网站导航: