2007-3-25
排序Blogger Feed,终于解决了一个棘手问题
以前提到过Blogger输出Feed的排序问题,始终没有找到好的解决方案。最近修改了一篇旧文章,导致该文在Feed中被提到最新,通过BXNA过来的朋友对此提出了批评,愧疚的很,在网上找了找,终于算是找到了一个还算过得去的方案。阅读全文...
目前Blogger对FTP发布的Blog提供了一个如此格式的Feed地址:
http://www2.blogger.com/feeds/blogID*/posts/default
并且仍然可以附带几个参数进行定制,针对今天这种情况,需要用到的一个就是:
orderby=published
这样文章就不会以Blogger默认的<updated>(修改时间)进行排序,而是按照最初的发布时间排序。
只是这样还不能解决问题,虽然排序是合适了,但是这个<updated>仍然存在,而且Feedburner烧录的Feed仍然会采用这个修改时间作为文章的发布时间。如果Feeds被一些聚合网站(例如BXNA)收录,或者读者是通过RSS阅读器(例如Google Reader)阅读的话,最后修改的文章仍然会被提到最前。
于是再多加一个参数
max-results=6
缩减Feed输出的条目数为6,既然排序已经是按照最初的发布时间来的,那只取最新的6条文章,这6条之前的文章即使刚刚被修改,也不会被列在Feed内容中。当然,只取1条最保险,但这样会对网站新用户造成不便。
至此,我使用的Feed地址为:
http://.../posts/default?alt=rss&orderby=published&max-results=6
问题基本算是解决了,希望加了个“alt=rss”强制输出RSS 2.0格式,但是Blogger并没有理会,好在这个工作Feedburner也可完成。现在,但愿Blogger不会频繁变动这个Feed输出地址。
标签: blogger, blogging, feed, feedburner
2006-11-20
巧用Javascript的location对象给Blog各页面加上标题
在使用了Blogger系统的Blog中,存档页面和Label(Beta)页面都没有一个醒目的标题,看起来跟首页没有什么两样,这对于阅读者来说多少有些不友好。如果能够给每个页面加一个标题,例如“存档:2006/11 - 2006/12”或者“TAG:Javascript”,那么阅读者就会减少很多迷惘(本站的演示:Label页面、存档页面)。这个功能只需了解一下Javascript中的location对象就不难实现。阅读全文...
以URL
http://www.mixfog.com/blog/index.htm?action=view#comment
为例,看一下location对象的几个常用属性:
| 属性 | 值 | 备注 |
| hash | comment | 即我们平时所说的“锚点”链接 |
|---|---|---|
| host | www.mixfog.com | 主机名 |
| hostname | mixfog.com | 与host相同,有时会省略www |
| href | http://www.mixfog.com/blog/index.htm | 完整的URL |
| pathname | /blog/index.htm | URL中hosthost之后的内容 |
| port | 端口信息,通常都是空的 | |
| pritocol | http: | 协议 |
| search | ?action=view | 查询字符串 |
看了这个表之后,基本上能够总结出一个解决方案了。Blogger中生成的Label页面的URL都是
http://Blog地址/labels/labelName.htm
用Javascript很容易就可以得到这个labelName。
同样,如果设置了存档文件的目录为“archives”,文件名为archive.htm的话,一个存档页面的URL应该类似
http://Blog地址/archives/2006_11_01_archive.htm
也会很容易的获得“2006_11_01”这个字段作为存档页面的标题。但是有一个更好的途径,利用存档页面的<title>,Blogger生成的存档页面的<title>大多是“网站名称:存档时间”,这个存档时间的格式是由个人在后台设置的,例如本站为“2006/11 - 2006/12”。
那么看一下具体的代码:
function getPageTitle() {
var pathName = location.pathname; //获得页面路径
if (pathName.indexOf('/labels/')!=-1) { //判断是否为Label页面
var fileName = pathName.split('/labels/');
var tagName = fileName[1].split('.');
document.write ('<h1>TAG: '+ tagName[0] +'</h1>');
} else if (pathName.indexOf('/archives/')!=-1) { //判断是否为存档页面
var pageTitle = document.title.split(':');
document.write ('<h1>存档: '+ pageTitle[1] +'</h1>');
}
}
代码很简单,基本上没什么好说的,然后在模板中调用getPageTitle即可。由于只在Label页面和存档页面用到,所以ItemPage就完全不需要这段代码:
<MainOrArchivePage><script type="text/javascript"> getPageTitle(); </script><MainOrArchivePage>
把这段代码加在模板中希望出现页面标题的位置即可,本站的演示可参考“Label页面”、“存档页面”。有几个需要注意的地方:
- 存档的路径会因为个人设置的不同而不同,这不难解决。
- 本例中假设站点名称中不包含半角的冒号,因为存档页的时间和站点标题是用半角冒号来分割的,但即使包含,也不难解决。
- 第三个有点致命,不支持中文的Label,因为Blogger对中文的Label进行的转码,例如“电影”,对应的Label页面地址可能是“55S15b2x.htm”,好在我的Blog中尽量少用中文的Label名称,所以这个问题就有待其他人士来解决吧。
- 补充一个,如果您的Label中含有空格,在URL中会自动转换为20%,在获取的时候就需要转换回来,但是个人不建议在Label中使用空格,用一个连字符“-”也许更好。
标签: blogger, blogging, javascript
2006-11-16
最近被Blogger beta的Feed搞得比较烦
前不久因为Blogger beta迟迟不推出ftp发布功能,打算把blog转换到Thingamablog(一款开源的桌面Blog发布软件,基于java),等我准备得差不多了,Blogger beta却推出了ftp发布功能,而且还支持label,我又把做的差不多的Thingamablog模板改到Blogger上来,之前在 Thingamablog上写的几篇文章,放在Blogger beta上修改了一下,结果问题就出来了。Blogger beta的Feed升级到ATOM 1.0,而且取消了原有的RSS 2.0格式。在现在的Feed中有两个时间,一个<published>,一个<updated>,对应一个发表时间,一个修改时间。而我现在用Feedburner来烧制Feed,并开启了格式转换,转换成RSS 2.0(不转换的话,BXNA认为原feed存在格式错误)。Feedburner使用了那个<updated>,也就是说我修改一下现有的文章,即使只改个标点,Feedburener也会获取到这个修改时间,并把这个时间当成文章的发布时间,把文章提到最新。正是由于这个原因,我的几篇文章长时间在BXNA上位居前列,对读者造成了不便,对不起各位。
这几天在网上找解决方案,也没什么收获,找到了一些Blogger beta的Feed地址,放在这里存档一下。阅读全文...
站点文章Feed:
http://beta.blogger.com/feeds/blogID*/posts/type*
站点评论Feed:
http://beta.blogger.com/feeds/blogID*/comments/type*
单篇文章的评论Feed:
http://beta.blogger.com/feeds/blogID*/postID*/comments/type*
Label Feed:
http://beta.blogger.com/feeds/blogID*/posts/type*/-/labelname*
*说明:
- blogID和postID都不用说了。type可以是full、summary和default,分别对应全文、摘要和默认,默认的话根据Blogger管理后台中的设置来显示。
- 有说法是labelname可以有多个,中间用/隔开,但我试了一下好像不行。
- 还有两个有用的参数:max-result和start-index。默认的Feed是从第一条开始,一共输出25条,如果加上?max-results=60就是输出60条,加上?start-index=5就是从第五条开始输出。
标签: atom, blogger, blogging, feed, feedburner