📄 01_8_28_3.asp.html
字号:
<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<TITLE>计算机世界网-使用Perl创建VoiceXML应用程序</TITLE><style>.a1{font-size:1}</style>
</HEAD>
<style>
.a14{font-size:14px;text-indent:25px;line-height:20px}
.f{font-size:18px;color=#0f3ccd}
img{border:0px;}
td,p,input{font-fammily:verdana,宋体;font-size:12px;}
A:link {text-decoration:none;color:black}
A:visited {text-decoration:none;color:#80006f}
A:hover {text-decoration:underline;color:black}
</style>
<center>
<BODY topmargin=2 leftmargin=0>
<style>
.v12{font-size:10pt;color:"#ffffff";FONT-WEIGHT: bold}
.v14{font-size:14px;text-indent:25px;line-height:20px}
img{border:0px;}
td,p,input,select{font-fammily:verdana,宋体;font-size:12px;}
A:link {text-decoration:none;color:black}
A:visited {text-decoration:none;color:#80006f}
A:hover {text-decoration:underline;color:black}
</style>
<style>
.v13{font-size:10pt;color:"#ffffff";FONT-WEIGHT: bold}
.v12{font-size:13px;color:"#4C029C";FONT-WEIGHT: bold}
.v14{font-size:14px;text-indent:25px;line-height:20px}
img{border:0px;}
td,p,input,select{font-fammily:verdana,宋体;font-size:12px;}
A:link {text-decoration:none;color:black}
A:visited {text-decoration:none;color:#80006f}
A:hover {text-decoration:underline;color:black}
</style>
<!--头-->
<table align=center cellpadding="0" cellspacing="0" border="0" width="767">
<tr><td valign=bottom>
<table cellpadding="0" cellspacing="0" border=0>
<tr><td valign=top><img src="/center/image/ccwlogo.gif"></td></tr>
<tr><td height="27" valign=top><img src="/center/image/knowledge.gif" width="207" height="27"></td></tr>
</table></td>
<td valign=bottom width=556 bgcolor="#4c029c" height=96>
<table cellpadding="0" cellspacing="0" border=0 width=556 bgcolor="#4c029c" height=96>
<tr><td height=25 valign=bottom bgcolor="#ffffff" colspan=2 ><img src="/image2002/top.gif" usemap="#F"></td></tr>
<tr valign=middle >
<td align=center valign=middle height="60" align=center>
<!-- <a href="/search/" target=_blank><img src="/img2/esearch.GIF" border=0 width=468 height=60></a> --><a href="/html/search/thememail/" target=_blank><img src="/img2/topbanner_thememail.GIF" border=0 width=468 height=60></a>
</td>
<td align=center width=15%>
<table width=95%>
<tr><td><a href="mailto:center@ccw.com.cn?subject=我要投稿:" target=_blank><font class=v13>我要投稿</a><br><a href="mailto:center@ccw.com.cn?subject=编读往来"><font class=v13>编读往来</a><br><a href="javascript:AddBookMark('计算机世界网首页')"><font class=v13>加入收藏</a></font></td></tr>
</table>
</td>
</tr>
<tr><td bgcolor="#ffffff" height=1 colspan=2 ></td></tr>
<tr><td bgcolor="#b4aafc" height=2 colspan=2 ></td></tr></table>
<map name="F">
<area href="/" shape="rect" coords="29, 3, 61, 18" target=_blank>
<area href="/news1/" shape="rect" coords="72, 3, 143, 18" target=_blank>
<area href="/center/" shape="rect" coords="155, 2, 216, 18" target=_blank>
<area href="/work/" shape="rect" coords="225, 2, 299, 18" target=_blank>
<area href="/search/" shape="rect" coords="310, 3, 364, 19" target=_blank>
<area href="http://www3.ccw.com.cn/" shape="rect" coords="372, 2, 412, 19" target=_blank>
<area href="http://www2.ccw.com.cn/" shape="rect" coords="424, 2, 550, 18" target=_blank></map>
</td></tr>
<tr><td colspan=2 bgcolor="#b4aafc">
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr>
<td width=26% align=center><font class=v12>【2003年2月7日】 </font></td>
<td CLASS=V12> <a href="/center/topic.asp">专 题</a> /</td>
<td CLASS=V12><a href="/center/tech.asp">技 术</a> /</td>
<td CLASS=V12><a href="/center/prod.asp">产 品</a> /</td>
<td CLASS=V12><a href="/center/app.asp">应 用</a> /</td>
<td CLASS=V12><a href="/center/net.asp">网 络</a> /</td>
<td CLASS=V12><a href="/center/prog.asp">编 程</a> /</td>
<td CLASS=V12><a href="/center/skill.asp">技 巧</a> </td>
</tr>
</table>
</td></tr>
</table>
<table align=center width=728>
<tr><td align=center><br><h2><font color='#0f3ccd'>使用Perl创建VoiceXML应用程序</font></h2>
<br><b>刘彦青</b>
</td></tr><tr><td align=right>01-8-28 下午 12:21:10<br><hr size=1 width=718 color=#f46240></td></tr></table><br>
<table align=center width=728><tr><td valign=top width=600>
<table width=100% ><tr><td class=a14><b>简介</b></td></tr></table><table width=100% ><tr><td class=a14>
VoiceXML是一种用来创建可以通过电话访问的内容的基于XML的编程语言,这样的内容不仅仅是具有互联网访问功能的移动电话可以访问,普通的电话也照样可以访问这些内容。HTML使用图形用户界面访问网站的内容,而VoiceXML则通过语音界面访问内容,其中的语音和拨号盘代替了传统的显示器、键盘和鼠标。对VoiceXML及其工作原理进行详细的介绍不在本文的范围之内,有关这方面的知识请参与相关资料。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
<b>
一个简单的例子</b></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
为了说明通过电话访问现有的互联网内容是如何简单,我们将使用Perl建立一个简单的CGI脚本文件,获取一个包含CPAN最近上传内容的文件,然后将文件转换为VoiceXML,以便用户能够通过VoiceXML网关在电话上访问这些内容。</td></tr></table><table width=100% ><tr><td class=a14>
use strict;</td></tr></table><table width=100% ><tr><td class=a14>
use XML::XPath;</td></tr></table><table width=100% ><tr><td class=a14>
use LWP::UserAgent;</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
加载必要的模块后,在脚本程序的开始,我们创建新的HTTP::Request和 LWP::UserAgent对象,然后调用LWP::UserAgent的simple_request方法为RSS文件请求远程服务器。</td></tr></table><table width=100% ><tr><td class=a14>
my $news_url = 'http://search.cpan.org/recent.rdf';</td></tr></table><table width=100% ><tr><td class=a14>
my $request = HTTP::Request->new('GET', $news_url);</td></tr></table><table width=100% ><tr><td class=a14>
my $ua = LWP::UserAgent->new();</td></tr></table><table width=100% ><tr><td class=a14>
my $response = $ua->simple_request($request);</td></tr></table><table width=518 ><tr><td class=a14 width="510">
发出请求后,我们将开始输出VoiceXML。首先创建vxml root元素和包含一个block元素的表格。在block元素中放入一个audio元素,告诉用户在RSS文件处理过程期间需要耐心地等待,然后用一个goto元素告诉VoiceXML浏览器跳到当前文档中标有headlines的小节。</td></tr></table><table width=100% ><tr><td class=a14>
print qq*</td></tr></table><table width=100% ><tr><td class=a14>
<?xml version="1.0"?></td></tr></table><table width=100% ><tr><td class=a14>
<vxml><span lang="EN-US"><vxml></span></td></tr></table><table width=100% ><tr><td class=a14>
<block><span lang="EN-US"><span style="mso-spacerun: yes"> </span><form
id="greeting"></span></td></tr><tr><td class=a14>
<span lang="EN-US"><span style="mso-spacerun: yes"> </span><block></span></td></tr></table><table width=100% ><tr><td class=a14>
<audio><span lang="EN-US"><span style="mso-spacerun: yes">
</span><audio></span></td></tr></table><table width=100% ><tr><td class=a14>
Please wait while I process the c pan news feed.</td></tr></table><table width=100% ><tr><td class=a14>
</audio><span lang="EN-US"><span style="mso-spacerun: yes">
</span></audio></span></td></tr></table><table width=100% ><tr><td class=a14>
<goto next="#headlines"/><span lang="EN-US"><span style="mso-spacerun: yes">
</span><goto next="#headlines"/></span></td></tr></table><table width=100% ><tr><td class=a14>
</block><span lang="EN-US"><span style="mso-spacerun: yes">
</span></block></span></td></tr></table><table width=100% ><tr><td class=a14>
</form><span lang="EN-US"><span style="mso-spacerun: yes"> </span></form></span></td></tr></table><table width=100% ><tr><td class=a14>
*;</td></tr></table><table width=100% ><tr><td class=a14>
然后我们将对response对象进行测试,确保我们已经收到了远程的RSS文件。如果已经收到了远程文件,则创建一个新的XML::XPath实例,并将response对象的内容小节传送给它进行解析。如果在请求文件或在解析返回的内容时出现错误,则将出错的信息存储在$error中以供以后分析用。尽管封装对XML::XPath最初调用的eval块增加了一些系统开销,但在解析过程出现错误时,它能够使我们很“体面地”退出程序,如果没有它,解析出现错误将使脚本意外地结束。</td></tr></table><table width=100% ><tr><td class=a14>
my ($error, $xp);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
if ($response->is_success) {</td></tr></table><table width=100% ><tr><td class=a14>
eval {</td></tr></table><table width=100% ><tr><td class=a14>
$xp = XML::XPath->new(xml => $response->content);</td></tr></table><table width=100% ><tr><td class=a14>
$xp->find('/');</td></tr></table><table width=100% ><tr><td class=a14>
};</td></tr></table><table width=100% ><tr><td class=a14>
$error = 'Error parsing RSS file ' . $@ if $@;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
else {</td></tr></table><table width=100% ><tr><td class=a14>
$error = 'Remote server returned ' . $response->message();</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
如果出现错误,脚本则会向用户返回一个描述错误的audio消息,挂断当前用户的连接,并关闭脚本。</td></tr></table><table width=100% ><tr><td class=a14>
if ( defined($error) ) {</td></tr></table><table width=100% ><tr><td class=a14>
print qq*</td></tr></table><table width=100% ><tr><td class=a14>
<block><span lang="EN-US"><span style="mso-spacerun: yes"> </span><form
id="headlines"></span></td></tr></table><table width=100% ><tr><td class=a14>
<audio><span lang="EN-US"><span style="mso-spacerun: yes">
</span><block></span></td></tr><tr><td class=a14>
<span lang="EN-US"><span style="mso-spacerun: yes">
</span><audio></span></td></tr></table><table width=100% ><tr><td class=a14>
I'm sorry. The following error occurred while fetching</td></tr></table><table width=100% ><tr><td class=a14>
the headlines file. $error Please try again later.</td></tr></table><table width=100% ><tr><td class=a14>
</audio><span lang="EN-US"><span style="mso-spacerun: yes">
</span></audio></span></td></tr></table><table width=100% ><tr><td class=a14>
<disconnect/><span lang="EN-US"><span style="mso-spacerun: yes">
</span><disconnect/></span></td></tr></table><table width=100% ><tr><td class=a14>
</block><span lang="EN-US"><span style="mso-spacerun: yes">
</span></block></span></td></tr></table><table width=100% ><tr><td class=a14>
</form><span lang="EN-US"><span style="mso-spacerun: yes"> </span></form></span></td></tr></table><table width=100% ><tr><td class=a14>
</vxml><span lang="EN-US"></vxml></span></td></tr></table><table width=100% ><tr><td class=a14>
*;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -