论文部分内容阅读
在新一轮的Web开发中,如何将“播客”即英文为Podcast或Podcasting的应用搭建并运行已经成为一个热点。当然,目前已经有很多服务可以实现,其底层的技术为RSS,即Reallly Simple Syndication。
较早的RSS 0.91版本已经被广泛地支持,而且它要算手工编码最容易的版本。不过,RSS 0.91实在是比较基础,它虽然可以从网站上聚合新闻信息,但是这些新闻信息中包括了大量的无用文本信息。另外,它缺少一些十分有用的属性,比如聚合到的信息的发布日期等。
播客技术的开发通常采用RSS 2,因为新版本中添加了众多有用的属性,比如包括播客要用到的enclosure等属性。我们现在就来看看这些新功能的“本领”。简单例子如,你可以利用enclosure属性来描述软件的更新或其他需要定期描述的文件,包括价格表,通讯录以及值班记录等。
简化
在RSS 0.91版本中,对一个feed的描述看起来基本如图1所示。大部分的元素是必须的,还有一些是可选的,像“语言language”就不是一定要被描述出来,如果必须描述则可以用一个选项来包含这些描述信息,而不是仅仅一个标题和链接。
RSS 2确实有了不小的提升,在频道和选项元素中添加了更丰富的更有益处的信息。其中大部分是可选的,不过的确大大提高了效率。
更新
需要注意的是,version的值设置为“2”。你可以在频道中添加可选的图片,和0.91版本一样,也有时间(ttl)标记,其表示频道中信息的有效时间,是不需要检查的,也就是说,一般表现良好的客户端是不会从你的服务器上检查这个更新的。所以,如果你输入:
120
到feed描述中,那么即使那些设置每5分钟更新一次的RSS阅读器也不可能频繁干扰你的服务器了。
另外,还有其他几个控制时间的元素。PubDate是内容的发布时间,这个时间有可能是按天更新的,比如新闻杂志类内容,也可能是以月为时间单位进行更新。邮件的时间格式是类似的,可参见RFC 822(www.rfc.net)。lastBuildDate也是类似的,其定义内容频道的改变,最典型的为最近被改变的选项的日期,标记语句如下:
Mon, 25 Jul 2005 10:17:004 GMT
你当然可以指定具体某些天或小时可以跳过,这样新闻阅读器就不能在非工作时间里打扰你的站点。
你在2.0版本中还可以在选项中添加puDate入口。理论上说,可以将日期设定在未来,那么RSS阅读器只会在这个日期到来的时候发布内容,不过具体还要看实际运行情况而定。如果你不希望人们看到RSS feed中的相关内容,不要使用这个方法。
一个新的标记guid为每个选项指定了全局唯一标识,这个标记使得客户端阅读软件可以识别出内容是完全崭新的还是只在原有选项上的更新。你也可以将其定义为permalink,即读者如果想稍后阅读某些内容,可以用书签标记,这样就避免了链接很容易消失的问题。标记语句如下:
http://www.nigelwhitfield.com/
work/pcw/
通常,你会对guid和link属性使用相同的信息。注意,isPermaLink的默认值为true,如果把它设置为false,那么URL将会永远实效。
RSS 2另一值得称道的就是可编码的HTML属性,比如你希望在文章条目描述中使用粗体或斜体,你就可以使用“&”进行编码:
UPDATED I’ve added
extra information to this
article…
这样就会使“UPDATED”在描述最开始的地方就显示为粗体了。
关于Enclosures
播客技术是endclosure包含的一个简单类型。你可以使用enclosure元素将其添加至一个RSS feed中去。它共有三个属性:url,length以及type;url不用解释了,length是指文件字节的长度,type为Mime。一个Mime type是一种类别,后会跟着一个/,即一个分类里还会包含类别。举个例子,一个MP3 podcast中会包括audio/mpeg的两个类别;一个rtf文件会包括application/rtf两个类别;一个web页会包括text/html两个类别。因此,如果我们有一个PDF文档,可以添加enclosure到RSS feed中,那么在一个条目描述的最后看起来就会如图2所示。
endclosure元素本身就是很完整的了,不需要对应的,所以不用担心会忘记了。
用好enclosure
其实针对enclosure最流行的应用要算播客技术了,目前已经有很多不错的软件可以作为制作播客的工具,比如Lemon Ipodder和iTunes。而且这些软件在描述音频文件使用RSS enclosure时算不错的解决方案,但是如果你要利用此机制完成其他任务就显得功能薄弱了。
比如,如果Lemon Ipodder下载了PDF文档,它会把此文档放入到Windows Media Player中播放,这显然是错误的。相对来说,iTunes的表现好许多,当它遇到这种情况时会显示出一个书状的图标并可以正确地打开PDF文档。所以,如果你是使用iTunes玩播客的用户,还可以用其从网上搜集文档。
Windows用户可以登录Voxlite网站(www.stevenwood.org),苹果用户则可以在www.ranchero.com网站上找到完整版本的Excellent Netnewswire,你可以下载保存文件,如果是合适的类型就可以直接下载到iTunes的库中去了。
当然,选择enclosure对于那些正在使用支持podcase/enclosure的RSS阅读器的用户来说是很实用的,你仍然可以使用相应机制把信息发布给每个人,即使他们在PC上并没有安装最新的软件。右侧的代码例子中,我们使用了guid和permalink,结果是和文件中的download,URL相一致的。我们也可以使用同样的地址添加链接元素。这样至少选择一种能保证即使一些用户使用的是诸如Safari的内置RSS阅读器或Opera等不支持enclosure的阅读器也仍旧可以下载内容到自己的计算机中的方法。
启动属于自己的新闻服务
既然已经懂得如何创建feed,那么在网站中添加脚本以展示新闻和信息就很容易了。笔者就建立了带有简单新闻发布栏目的个人视频网站。因此,其实创建完整的新闻页面和一个从相同信息得到的RSS feed也是小菜一碟。
在以上的这个例子中,需要通过在内容管理中添加HTML来实现在新闻故事中包括链接和一些其他相关信息的目的。当然,如果不需要RSS feed在页面上显示信息也是可行的。还好,PHP标记中可以找到易用的属性来应对此类问题。
新闻描述存储的位置可以通过以下语句使其显示在新闻页面上:
<?php echo $row_news4
[‘message’]; ?>
若要其与RSS描述匹配必须要做的是以下语句:
<?php echo html4
entities($row_news4
[‘message’]); ?>
测试feed脚本是很重要的,你可以通过登陆像http://feedvalidator.org/这类网站来进行测试。有一些RSS阅读器兼容性较高,有一些则偏低。对于Safari和Opera,运行一个启动RSS feed的样例脚本很顺利;但是,并不是所有的应用程序都这么“宽容”,比如Netnewswire就拒绝对识别feed的初次尝试,好在其包括一个可以直接链接到Feed Validator的链接,可以解析text/html类型的内容。
解决这类问题可以进行简单修复,以下的脚本就可以实现:
header(‘Content-Type:
application/xml’);
要注意的是PHP命令在脚本中是最先执行的,其可能会导致输出。否则Web服务器将会通知包括RSS阅读器在内的应用程序传递HTML,这是因为其中的一些RSS阅读器无法识别相关的feed。
较早的RSS 0.91版本已经被广泛地支持,而且它要算手工编码最容易的版本。不过,RSS 0.91实在是比较基础,它虽然可以从网站上聚合新闻信息,但是这些新闻信息中包括了大量的无用文本信息。另外,它缺少一些十分有用的属性,比如聚合到的信息的发布日期等。
播客技术的开发通常采用RSS 2,因为新版本中添加了众多有用的属性,比如包括播客要用到的enclosure等属性。我们现在就来看看这些新功能的“本领”。简单例子如,你可以利用enclosure属性来描述软件的更新或其他需要定期描述的文件,包括价格表,通讯录以及值班记录等。
简化
在RSS 0.91版本中,对一个feed的描述看起来基本如图1所示。大部分的元素是必须的,还有一些是可选的,像“语言language”就不是一定要被描述出来,如果必须描述则可以用一个选项来包含这些描述信息,而不是仅仅一个标题和链接。
RSS 2确实有了不小的提升,在频道和选项元素中添加了更丰富的更有益处的信息。其中大部分是可选的,不过的确大大提高了效率。
更新
需要注意的是,version的值设置为“2”。你可以在频道中添加可选的图片,和0.91版本一样,也有时间(ttl)标记,其表示频道中信息的有效时间,是不需要检查的,也就是说,一般表现良好的客户端是不会从你的服务器上检查这个更新的。所以,如果你输入:
到feed描述中,那么即使那些设置每5分钟更新一次的RSS阅读器也不可能频繁干扰你的服务器了。
另外,还有其他几个控制时间的元素。PubDate是内容的发布时间,这个时间有可能是按天更新的,比如新闻杂志类内容,也可能是以月为时间单位进行更新。邮件的时间格式是类似的,可参见RFC 822(www.rfc.net)。lastBuildDate也是类似的,其定义内容频道的改变,最典型的为最近被改变的选项的日期,标记语句如下:
你当然可以指定具体某些天或小时可以跳过,这样新闻阅读器就不能在非工作时间里打扰你的站点。
你在2.0版本中还可以在选项中添加puDate入口。理论上说,可以将日期设定在未来,那么RSS阅读器只会在这个日期到来的时候发布内容,不过具体还要看实际运行情况而定。如果你不希望人们看到RSS feed中的相关内容,不要使用这个方法。
一个新的标记guid为每个选项指定了全局唯一标识,这个标记使得客户端阅读软件可以识别出内容是完全崭新的还是只在原有选项上的更新。你也可以将其定义为permalink,即读者如果想稍后阅读某些内容,可以用书签标记,这样就避免了链接很容易消失的问题。标记语句如下:
http://www.nigelwhitfield.com/
work/pcw/
通常,你会对guid和link属性使用相同的信息。注意,isPermaLink的默认值为true,如果把它设置为false,那么URL将会永远实效。
RSS 2另一值得称道的就是可编码的HTML属性,比如你希望在文章条目描述中使用粗体或斜体,你就可以使用“&”进行编码:
UPDATED I’ve added
extra information to this
article…
这样就会使“UPDATED”在描述最开始的地方就显示为粗体了。
关于Enclosures
播客技术是endclosure包含的一个简单类型。你可以使用enclosure元素将其添加至一个RSS feed中去。它共有三个属性:url,length以及type;url不用解释了,length是指文件字节的长度,type为Mime。一个Mime type是一种类别,后会跟着一个/,即一个分类里还会包含类别。举个例子,一个MP3 podcast中会包括audio/mpeg的两个类别;一个rtf文件会包括application/rtf两个类别;一个web页会包括text/html两个类别。因此,如果我们有一个PDF文档,可以添加enclosure到RSS feed中,那么在一个条目描述的最后看起来就会如图2所示。
endclosure元素本身就是很完整的了,不需要对应的,所以不用担心会忘记了。
用好enclosure
其实针对enclosure最流行的应用要算播客技术了,目前已经有很多不错的软件可以作为制作播客的工具,比如Lemon Ipodder和iTunes。而且这些软件在描述音频文件使用RSS enclosure时算不错的解决方案,但是如果你要利用此机制完成其他任务就显得功能薄弱了。
比如,如果Lemon Ipodder下载了PDF文档,它会把此文档放入到Windows Media Player中播放,这显然是错误的。相对来说,iTunes的表现好许多,当它遇到这种情况时会显示出一个书状的图标并可以正确地打开PDF文档。所以,如果你是使用iTunes玩播客的用户,还可以用其从网上搜集文档。
Windows用户可以登录Voxlite网站(www.stevenwood.org),苹果用户则可以在www.ranchero.com网站上找到完整版本的Excellent Netnewswire,你可以下载保存文件,如果是合适的类型就可以直接下载到iTunes的库中去了。
当然,选择enclosure对于那些正在使用支持podcase/enclosure的RSS阅读器的用户来说是很实用的,你仍然可以使用相应机制把信息发布给每个人,即使他们在PC上并没有安装最新的软件。右侧的代码例子中,我们使用了guid和permalink,结果是和文件中的download,URL相一致的。我们也可以使用同样的地址添加链接元素。这样至少选择一种能保证即使一些用户使用的是诸如Safari的内置RSS阅读器或Opera等不支持enclosure的阅读器也仍旧可以下载内容到自己的计算机中的方法。
启动属于自己的新闻服务
既然已经懂得如何创建feed,那么在网站中添加脚本以展示新闻和信息就很容易了。笔者就建立了带有简单新闻发布栏目的个人视频网站。因此,其实创建完整的新闻页面和一个从相同信息得到的RSS feed也是小菜一碟。
在以上的这个例子中,需要通过在内容管理中添加HTML来实现在新闻故事中包括链接和一些其他相关信息的目的。当然,如果不需要RSS feed在页面上显示信息也是可行的。还好,PHP标记中可以找到易用的属性来应对此类问题。
新闻描述存储的位置可以通过以下语句使其显示在新闻页面上:
<?php echo $row_news4
[‘message’]; ?>
若要其与RSS描述匹配必须要做的是以下语句:
<?php echo html4
entities($row_news4
[‘message’]); ?>
测试feed脚本是很重要的,你可以通过登陆像http://feedvalidator.org/这类网站来进行测试。有一些RSS阅读器兼容性较高,有一些则偏低。对于Safari和Opera,运行一个启动RSS feed的样例脚本很顺利;但是,并不是所有的应用程序都这么“宽容”,比如Netnewswire就拒绝对识别feed的初次尝试,好在其包括一个可以直接链接到Feed Validator的链接,可以解析text/html类型的内容。
解决这类问题可以进行简单修复,以下的脚本就可以实现:
header(‘Content-Type:
application/xml’);
要注意的是PHP命令在脚本中是最先执行的,其可能会导致输出。否则Web服务器将会通知包括RSS阅读器在内的应用程序传递HTML,这是因为其中的一些RSS阅读器无法识别相关的feed。