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在网络传播上的重要性。

作者:车东 发表于:2004-12-11 00:12 最后更新于:2007-04-15 19:04
版权声明:可以转载,转载时请务必以超链接形式标明文章 的原始出处和作者信息及本版权声明

引用通告

以下是前来引用的链接: Lilina:RSS聚合器构建个人门户(Write once, publish anywhere):

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

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

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

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

直接将以下语句加入到 index.php 头部即可,LILINA中你...
[阅读更多细节]

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

» 新闻聚合Lilina试用手记 来自 94smart's Blog

我使用lilina架了两个站点,http://lilina.94smart.comhttp://news.94smart.com,运行还算正常。

我所在的主机名

[阅读更多细节]

» 中文网志年会 - [CMS]篇 来自 车东[Blog^2]
Blog发布工具/系统一直是让blogger相互联系起来很重要的一个方面,因为写网志首先要解决的就是要有写作的平台。在中文网志年会上:我见到了很多人,其中很多人的网志都是我以前在使用BLO... [阅读更多细节]

» 中文网志年会 - [CMS]篇 来自 车东[Blog^2]
Blog发布工具/系统一直是让blogger相互联系起来很重要的一个方面,因为写网志首先要解决的就是要有写作的平台。在中文网志年会上:我见到了很多人,其中很多人的网志都是我以前在使用BLO... [阅读更多细节]

» 中文网志年会 - [CMS]篇 来自 车东[Blog^2]
Blog发布工具/系统一直是让blogger相互联系起来很重要的一个方面,因为写网志首先要解决的就是要有写作的平台。在中文网志年会上:我见到了很多人,其中很多人的网志都是我以前在使用BLO... [阅读更多细节]

» 中文网志年会 - [CMS]篇 来自 车东[Blog^2]
Blog发布工具/系统一直是让blogger相互联系起来很重要的一个方面,因为写网志首先要解决的就是要有写作的平台。在中文网志年会上:我见到了很多人,其中很多人的网志都是我以前在使用BLO... [阅读更多细节]

» lilina缓存加速II:加入MAGPIE_LOAD_CACHE_ONLY模式 来自 车东[Blog^2]
订阅的Feed越来越多,即使基于简单的配置缓存有时候也经常速度跟不上:网站经常出现只剩下右边半边的情况,就是由于缓存期间抓取远程的网页超时导致的。其实Planet和Gregarius一样,都是... [阅读更多细节]

» lilina缓存加速II:加入MAGPIE_LOAD_CACHE_ONLY模式 来自 车东[Blog^2]
订阅的Feed越来越多,即使基于简单的配置缓存有时候也经常速度跟不上:网站经常出现只剩下右边半边的情况,就是由于缓存期间抓取远程的网页超时导致的。其实Planet和Gregarius一样,都是... [阅读更多细节]

» RSS的在线订阅服务:从订阅中发现社交网络 来自 车东[Blog^2]
今天看到:WebLeOn's Blog: Longhorn拥抱RSS,之前层出不穷的客户端RSS订阅工具要小心了,“缺省”威力目前还是很大的。相比之下我感觉在线的RSS订阅无疑会成为以后更有前景的模式。BlogLines就是目前人气较高的RSS在线订阅服务之一。 我使用BlogLines比较少,BlogLines缺省的按照作者分类的RSS阅读模式效率不高,还是更习惯根据时间倒排的新闻流水,所以一直尝试着使用Lilina每天生成一份RSS报纸。但除此之外:还是能感受到BlogLines这种中心化服务的... [阅读更多细节]

Comments

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

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

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

可以考虑一下用drupal

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

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

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

我也使用lilina一段时间了,还用它给自己做了一个每日漫画的聚集,挺有意思的。
地址:http://www.cqcn.com/comics/index.php

可以看看我用drupal的聚合功能做的中文BLOG集锦:
http://www.shunz.net/aggregator/categories/1

请问车东大哥,如果服务器不支持iconv和mbstring,有什么方法可以解决出现的乱码吗?

回答: 没有其他办法……

你推荐的“Lilina”,应该怎么用啊,具体怎么操作了,才能使用它?麻烦相告,谢谢!!

为什么要把聚合界面定义成主页呢?

看到不少人发表关于Google为什么不支持Rss的问题和看法,这个问题以前不止一个人问起过我,我坚持的看法是Google在有新的赢利基础替代搜索之前是不会支持Rss的,而且我也没有看出来Google需要支持Rss的必要。「虽然我会去Hack google的服务,使得自己有Rss可用」

因为Rss太简单了,简单到将搜索引擎的门坎到了一种令Google感觉到一种压力的地步。

利用rss,可以简单的绕过搜索引擎里面最复杂的一个环节:HTML parse的过程,而这个过程,是众多小型搜索引擎的门坎和瓶颈,因为Rss提供规整化的结构化的数据,使得搜索引擎数据整理的过程简单了许多。可以想象,如果Google支持Rss,那么等于将这个市场的门坎降低,会导致大量的小型的竞争对手来分享未被蚕食的long tail,Google还不至于傻到这个地步。

为什么MSN和Yahoo会支持Rss呢?

MSN和Yahoo的赢利空间里不像Google那么纯粹的倚赖搜索,例如MSN和Yahoo都是门户,服务是其核心,而不搜索。要击败Google这个巨人,可以有很多种做法,其中之一就是培养市场,让搜索市场的门坎降低,培养很多Google的潜在对手,最终使得这个行业的利润薄利化,达到消减Google的目的。

难道MSN和Yahoo不会被消减么?

当然会了,可是如果这样一个大的竞争对手(Google)不断壮大,有朝一日google进入服务(其实现在已经进入了网络服务行业)将反过来蚕食Yahoo和MSN的市场,那么还不如及早的阻击这个敌人。

ZT. by Roboo Meshfire 2005

车大哥
magpierss的地址错了,应该是
http://magpierss.sourceforge.net/

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

我看这个 在线RSS聚合器 很新鲜的: 独逸网RSS聚合: http://www.duyee.cn

有一个很奇怪的问题,不知道大家注意到没有,还是只在我这里才出现. 我现在在添加"搜狐图吧",当然添加的过程是很顺利的,但是当我打开lilina试图浏览内容时,发现图片都没有显示出来. 不大清楚是怎么回事.

希望有人能帮我解决!

Rss problem: many feeds from several sites are the same (duplicate), and the users see many duplicate content!

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

相关文章

关于

此页面包含了发表于2004年12月11日 夜间12时34分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 WSJ新闻标题的中心词提取

此 Blog 的后一篇日记是 Google Suggest ;-) 基于js的动态下拉菜单

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 3.36