Archive for December 3rd, 2005

继续研究podcast

Saturday, December 3rd, 2005

昨天在podlook提交我的这个锵锵三人行 podcast时,提交失败,提示feed验证失败。开始我还不信,都经过feedburner烧过了怎么还能出错呢? 找到feed validator验证,结果大跌眼镜,确实一堆错误,甚至还有一些很低级的,比如忘掉了在channel下的link这个必须的元素 :P。
今天找到RSS 2.0 Specification 和 iTunes RSS Specification仔细研究了一下,重新改写了RSS生成部分的代码。现在最终的RSS,包括iTunes的部分,已经完全是我自己生成的了,我关闭了Feedburner的SmartCast功能(自动生成iTunes相关标签的功能,但是对中文支持不好,下面详细说),它只起到RSS hub的作用罢了。源码我已经升级过了。下面写点感想,发点牢骚。
1. Specification很重要
昨天做的时候,我也只是马马虎虎的找来一个现成的带podcast的RSS文件,照猫画虎的套内容。虽然之后能通过iTunes订阅,但是问题不少。(我想起之前某blog提供商生成的RSS居然把plod RSS的网址都抄去了的丢人事)。
下面说几个及其容易犯错的地方:

author元素(item的子元素)的内容是email: windix@douzi.org (Windix Feng),类似的还有managingEditor和webMaster(channel的子元素)。
enclosure元素的三个属性值都是必选的!其中的length值是文件大小(bytes),而不是时间长度。(昨天发现imboke.com的RSS中把length值忘掉了)
pubDate元素的格式为RFC 822,即类似”Wed, 6 Jul 2005 13:00:00 PDT”这样的。(车东曾经发现一些中文汉化的Blog软件把星期Wed也汉化了造成的问题)
RSS 2.0 Specification对内容没什么要求,遵守XML规范就OK了;但是iTunes RSS新增加的内容是有要求的: 编码必须为UTF-8方式;所有的值必须为文本,不能是HTML;除了itunes:summary可以容纳4000个字符外,其它的元素内容最多255个字符。在它的文档里面特意重新强调了XML命名实体(named character entites)和HTML命名实体的区别。我在新版的build_rss.php中写了个函数mrip()来去掉锵锵三人行介绍文字中出现的<a>、<p>和<img>这三个HTML标签。
guid元素是控制内容的唯一性的。我升级的时候更改了这个guid,结果iTunes就出来一组重复的节目:P。

经过这些改进,现在已经顺利的通过了RSS Validator的验证服务了:)

2. Feedburner的中文支持还是有问题
FeedBurner虽然能够处理中文的Feed,不管是GB2312的还是UTF-8的,但是有一些小功能还是不行。比如昨天遇到的通过它提供的SmartCast功能,我输入的中文内容转换出来就变成了一堆????了。
3. podcast目录服务
podcast做好了,当然下一步就是推广了。我尝试了一下几个:
imboke.com – 播客天下
这个我早就知道了,因为之前订阅的”有一说二”就是它们提供的服务。可是发现这个是一个podcast的服务提供商,它提供的目录服务也只是面向它下面的podcast。没戏了。
podlook.com – 菠萝网
提交成功。整体感觉还不错。节目连接
podcasts.yahoo.com – Yahoo! Podcasts
提交过了,不过还搜索不到。感觉对中文的支持好像不太好。
iTunes podcast directory
这个只能用iTunes浏览,我也提交过了,应该近期就能搜索到了吧。
4. 仍然需要改进
最令我感到遗憾的是iTunes下面的podcast图像仍然显示不出来。我已经按照标准做了(300×300大小,JPG格式),元素也正确,可是仍然不对。只好暂时放下等以后改进了。唉,浪费了我重新制作的图像(还是用不惯gimp,最后用Macromedia Fireworks做的):

iTunes的RSS播放控制功能还是很强大的,通过RSS,不光频道,而且每个节目,节目的每一段都可以指定一个图像来代表,还有段落的时间控制功能,看一些iTunes上面的官方节目就知道了。不过方法似乎在Specification里面没有提到。:(
而且iTunes支持的enclosure中居然还提到了pdf ? (m4a, mp3, mov, mp4, pdf) 难道是广播书用的?