修改了一下RSS输出

Microlog自带的RSS输出使用的是Atom格式,但是之前却发现Chrome和twitterfeed对我的blog的feed输出都有问题,Chrome是直接把feed打印成了文本,而twitterfeed倒是可以parse我的输出,就是发布到twitter上去的时候不贴链接。在确认自己的twitterfeed设置没有问题之后(感谢maotouc同学的贴图教学),决定好好修一修这个feed的输出。

首先想到了去官方组织validate一下,google一下找到了这里,是W3C官方的Atom feed validater。发现直接输入blog地址不能进行验证,于是查看模板代码,发现有如下问题:

 

<link rel="alternate" type="application/rss+xml" title="{{ blog.title }} RSS Feed" href="{{ blog.feedurl }}" />

#应该为

<link rel="alternate" type="application/atom+xml" title="{{ blog.title }} RSS Feed" href="{{ blog.feedurl }}" />

 

改好之后就可以进行validation了。

然后又开始找不能贴链接的原因,在feed验证过程中发现一个问题,就是feed中生成的<id>有重复的问题,而且是无效的URI,代码如下:

 

<id>{{ blog.baseurl }}/entry/{{entry.slug|escape}}</id>

 

这样写的问题在于,如果一篇文章没有指定slug,就会造成id变成:“http://blog.perlfect.me/entry/”。如果有多个文章都没有slug,自然就会出现重复id。

幸好发现文章的链接都是对的,所以直接复制粘贴:

 

<link href="{{ blog.baseurl }}/{{entry.link|escape}}"/>
<id>{{ blog.baseurl }}/{{entry.link|escape}}</id>

 

这样,feed输出终于顺利通过了validation。不过这其中发现feedburner会给blog的feed里插入写乱七八糟的元素,例如:

 

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PerlfectBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="perlfectblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

 

不知是何居心...搞得W3C的validator还抱怨一回……

然后上载至appspot。feed重新生成一回,然后因为id变了,所有的文章在google reader里就又涌出来一遍……也不知道twitterfeed的问题解决了没有,这期间我甚至还迷信地把atom模板里的utf-8改成了UTF-8...

不过说回来W3C的这个在线标准验证还挺好用的,收到侧边栏里了。


然后顺便做了一点优化,在<meta> 里加了keyword和description,也算是小小做了一把SEO。顺便看了一眼appengine的quote,发现生成feed很耗……于是enable了memcache,并增加了cache的有效时间,反正我又不是拿blog当twitter写的人……

最后在怨念一下:为啥appengine的应用不支持SVN?满地打滚要求支持中……

本文网址:http://blog.perlfect.me/2010/07/14/atom-feed-fix.html

comments powered by Disqus