?? 01_8_28_3.asp.html
字號(hào):
<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<TITLE>計(jì)算機(jī)世界網(wǎng)-使用Perl創(chuàng)建VoiceXML應(yīng)用程序</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=編讀往來(lái)"><font class=v13>編讀往來(lái)</a><br><a href="javascript:AddBookMark('計(jì)算機(jī)世界網(wǎng)首頁(yè)')"><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">專(zhuān) 題</a> /</td>
<td CLASS=V12><a href="/center/tech.asp">技 術(shù)</a> /</td>
<td CLASS=V12><a href="/center/prod.asp">產(chǎn) 品</a> /</td>
<td CLASS=V12><a href="/center/app.asp">應(yīng) 用</a> /</td>
<td CLASS=V12><a href="/center/net.asp">網(wǎng) 絡(luò)</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創(chuàng)建VoiceXML應(yīng)用程序</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>簡(jiǎn)介</b></td></tr></table><table width=100% ><tr><td class=a14>
VoiceXML是一種用來(lái)創(chuàng)建可以通過(guò)電話訪問(wèn)的內(nèi)容的基于XML的編程語(yǔ)言,這樣的內(nèi)容不僅僅是具有互聯(lián)網(wǎng)訪問(wèn)功能的移動(dòng)電話可以訪問(wèn),普通的電話也照樣可以訪問(wèn)這些內(nèi)容。HTML使用圖形用戶(hù)界面訪問(wèn)網(wǎng)站的內(nèi)容,而VoiceXML則通過(guò)語(yǔ)音界面訪問(wèn)內(nèi)容,其中的語(yǔ)音和撥號(hào)盤(pán)代替了傳統(tǒng)的顯示器、鍵盤(pán)和鼠標(biāo)。對(duì)VoiceXML及其工作原理進(jìn)行詳細(xì)的介紹不在本文的范圍之內(nèi),有關(guān)這方面的知識(shí)請(qǐng)參與相關(guān)資料。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
<b>
一個(gè)簡(jiǎn)單的例子</b></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
為了說(shuō)明通過(guò)電話訪問(wèn)現(xiàn)有的互聯(lián)網(wǎng)內(nèi)容是如何簡(jiǎn)單,我們將使用Perl建立一個(gè)簡(jiǎn)單的CGI腳本文件,獲取一個(gè)包含CPAN最近上傳內(nèi)容的文件,然后將文件轉(zhuǎn)換為VoiceXML,以便用戶(hù)能夠通過(guò)VoiceXML網(wǎng)關(guān)在電話上訪問(wèn)這些內(nèi)容。</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>
加載必要的模塊后,在腳本程序的開(kāi)始,我們創(chuàng)建新的HTTP::Request和 LWP::UserAgent對(duì)象,然后調(diào)用LWP::UserAgent的simple_request方法為RSS文件請(qǐng)求遠(yuǎn)程服務(wù)器。</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">
發(fā)出請(qǐng)求后,我們將開(kāi)始輸出VoiceXML。首先創(chuàng)建vxml root元素和包含一個(gè)block元素的表格。在block元素中放入一個(gè)audio元素,告訴用戶(hù)在RSS文件處理過(guò)程期間需要耐心地等待,然后用一個(gè)goto元素告訴VoiceXML瀏覽器跳到當(dāng)前文檔中標(biāo)有headlines的小節(jié)。</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>
然后我們將對(duì)response對(duì)象進(jìn)行測(cè)試,確保我們已經(jīng)收到了遠(yuǎn)程的RSS文件。如果已經(jīng)收到了遠(yuǎn)程文件,則創(chuàng)建一個(gè)新的XML::XPath實(shí)例,并將response對(duì)象的內(nèi)容小節(jié)傳送給它進(jìn)行解析。如果在請(qǐng)求文件或在解析返回的內(nèi)容時(shí)出現(xiàn)錯(cuò)誤,則將出錯(cuò)的信息存儲(chǔ)在$error中以供以后分析用。盡管封裝對(duì)XML::XPath最初調(diào)用的eval塊增加了一些系統(tǒng)開(kāi)銷(xiāo),但在解析過(guò)程出現(xiàn)錯(cuò)誤時(shí),它能夠使我們很“體面地”退出程序,如果沒(méi)有它,解析出現(xiàn)錯(cuò)誤將使腳本意外地結(jié)束。</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>
如果出現(xiàn)錯(cuò)誤,腳本則會(huì)向用戶(hù)返回一個(gè)描述錯(cuò)誤的audio消息,掛斷當(dāng)前用戶(hù)的連接,并關(guān)閉腳本。</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>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -