01_8_28_3.asp.html

来自「手把手教你安装PHP」· HTML 代码 · 共 467 行 · 第 1/3 页

HTML
467
字号
    如果RSS文件的获取和解析过程都没有出现错误,我们将创建一个新的form元素,然后,利用封装在block中的一个audio元素,通知用户解析已经成功,准备收听他所需要的信息。</td></tr></table><table width=100% ><tr><td class=a14>
else {</td></tr></table><table width=100% ><tr><td class=a14> 
    print qq*</td></tr></table><table width=100% ><tr><td class=a14> 
    <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;form 
    id=&quot;headlines&quot;&gt;</span><block></td></tr></table><table width=100% ><tr><td class=a14>
      <audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
      </span>&lt;block&gt;</span></td></tr><tr><td class=a14>
      <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        The RSS file has been fetched and processed successfully. The</td></tr></table><table width=100% ><tr><td class=a14>
        following modules have recently been up loaded to c pan.</td></tr></table><table width=100% ><tr><td class=a14>
      </audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    </block><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;/block&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    <block><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;block&gt;</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>
    然后,我们在一个循环中处理RSS文档中的所有item元素。对于每一个item元素我们都输出一个相应的audio元素,让VoiceXML文档使用每个item元素title子元素的值作为需要输出的文本内容。</td></tr></table><table width=100% ><tr><td class=a14>
    foreach my $news_item ($xp->findnodes('//item')) {</td></tr></table><table width=100% ><tr><td class=a14> 
        print "<audio><span lang="EN-US" style="font-size:10.5pt;mso-bidi-font-size:
12.0pt;font-family:&quot;Times New Roman&quot;;mso-fareast-font-family:宋体;mso-font-kerning:
1.0pt;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA">&lt;audio&gt;</span>" .</td></tr></table><table width=100% ><tr><td class=a14> 
          $news_item->findvalue('title') .</td></tr></table><table width=100% ><tr><td class=a14> 
          "</audio>\n";</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> 
    最后我们告知用户整个名单已经读完了,并欢迎他明天继续拨打,然后断开连接并关闭VoiceXML文档。</td></tr></table><table width=100% ><tr><td class=a14> 
    print qq*</td></tr></table><table width=100% ><tr><td class=a14> 
    <audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      This completes the latest c pan up loads. Please call again tomorrow.</td></tr></table><table width=100% ><tr><td class=a14>
    </audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;/audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    <disconnect/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;disconnect/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    </block><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;/block&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
  </form><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/form&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</vxml><span lang="EN-US">&lt;/vxml&gt;</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>
</td></tr></table><table width=100% ><tr><td class=a14>
<b>
创建动态的VoiceXML应用</b></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    尽管上面的例子揭示出通过电话提供互联网网站内容和服务的可能性,但用户和VoiceXML应用之间的“对话”还太缺乏交互性。幸运的是,VoiceXML也提供了一些专门用来接收用户输入的元素。另外,象HTML表格那样,VoiceXML表格也可以用来接收通过标准的HTTP GET和POST方法向服务器传送的数据。</td></tr></table><table width=100% ><tr><td class=a14> 
    在下面的例子中,通过创建一个很小的讲述“神奇的oracle”故事的应用程序,我们根据使用POST方法输入的数据创建了一个动态的VoiceXML文档。为了使程序简单明了,我们将把程序分为二部分:一个纯文本的包含获取用户输入表格的VoiceXML文档和动态的、由CGI创建的对这些问题的回答进行规格化的文档。</td></tr></table><table width=100% ><tr><td class=a14> 
    首先,我们来创建这个表格。在表格的开始处是一个问候语,只有用户在第一次连接时才会听到它。</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">&lt;vxml&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;form 
    id=&quot;greeting&quot;&gt;</span><block></td></tr></table><table width=100% ><tr><td class=a14>
      <audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
      </span>&lt;block&gt;</span></td></tr><tr><td class=a14>
      <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        Thank you for calling the mystic oracle!</td></tr></table><table width=100% ><tr><td class=a14>
      </audio><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <goto next="#main_query"/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;goto next=&quot;#main_query&quot;/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    </block><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;/block&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
  </form><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/form&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    然后,我们将开始设计主表格。这个表格只包含一个名字为query_type的字段,它的用途是获取用户的问题。我们需要特别注意grammar元素,它使VoiceXML应用开发人员能够精确地确定给定字段能够接收什么类型的输入。例如,在我们的例子中,如果用户的问题中含有“career”、“job”、“boss”、“coworker”或“department”等词汇,query_type字段的值勤将被设置为“career”。</td></tr></table><table width=100% ><tr><td class=a14>
      <field name="query_type"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; 
      </span>&lt;form id=&quot;main_query&quot;&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <grammar type="application/x-gsl" name="qtype"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;field name=&quot;query_type&quot;&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <![CDATA[</td><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;grammar type=&quot;application/x-gsl&quot; name=&quot;qtype&quot;&gt;</span></tr><tr><td class=a14>
      <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; 
      &nbsp;</span>&lt;![CDATA[</span></tr></table><table width=100% ><tr><td class=a14>
      [</td></tr></table><table width=100% ><tr><td class=a14>
         [romance love sex boyfriend girlfriend] {<query_type "romance">}</td></tr></table><table width=100% ><tr><td class=a14>
         [career job boss coworker department] {<query_type "career">}</td></tr></table><table width=100% ><tr><td class=a14>
         [family husband wife mother father son daughter] {<query_type "family">}</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>
      </grammar><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/grammar&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    prompt元素通知VoiceXML网关向用户朗读一段文字,并等待响应。在本例中,如果用户提问的问题中包含上面一段脚本中的grammar元素中定义的词汇之一,应用程序就会向用户表示感谢,并使用POST方法把信息提交给应用程序的CGI部分。submit元素的namelist属性允许我们指定准备提交当前文档中的哪个字段或变量。</td></tr></table><table width=100% ><tr><td class=a14>
      <prompt><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;prompt&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        Clear your mind and concentrate on your question. <break/></td></tr></table><table width=100% ><tr><td class=a14> 
        You may ask your question now.</td></tr></table><table width=100% ><tr><td class=a14> 
      </prompt><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/prompt&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <filled><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;filled&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        <span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;audio&gt;thank you.&lt;/audio&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        <submit next="http://mysite.tld/cgi-bin/mystic_response.cgi"</td><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;submit next=&quot;http://mysite.tld/cgi-bin/mystic_response.cgi&quot;</span></tr></table><table width=100% ><tr><td class=a14>
                method="POST"</td></tr></table><table width=100% ><tr><td class=a14>
                namelist="query_type"/></td></tr></table><table width=100% ><tr><td class=a14>
      </filled><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/filled&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    下面的代码是一个错误陷阱结构,可以使oracle应用有一个更合理的界面。如果用户所问的问题中不包含上面的grammar元素中所包含的词汇,nomatch标记中所包含的文本就会被朗读出来。reprompt元素使VoiceXML浏览器返回到所在模块的开始,并重新朗读前面的提示。如果用户没有提问问题,系统将根据每个noinput的count属性定义的顺序每次朗读一个noinput元素。如果三次提示后用户仍然没有提问问题,应用程序将挂断与用户的连接。</td></tr></table><table width=100% ><tr><td class=a14>
      <nomatch><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;nomatch&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        The mystic oracle can only answer questions about romance, career,</td></tr></table><table width=100% ><tr><td class=a14> 
        or family matters. Please try again.</td></tr></table><table width=100% ><tr><td class=a14> 
        <reprompt/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;reprompt/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      </nomatch><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/nomatch&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <noinput count="1"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;noinput count=&quot;1&quot;&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        I can sense your apprehension.</td></tr></table><table width=100% ><tr><td class=a14>
        <reprompt/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;reprompt/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      </noinput><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/noinput&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <noinput count="2"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;noinput count=&quot;2&quot;&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        You must say something.</td></tr></table><table width=100% ><tr><td class=a14>
        <reprompt/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;reprompt/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      </noinput><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/noinput&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      <noinput count="3"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;noinput count=&quot;3&quot;&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
        Please call back when you are less stressed.</td></tr></table><table width=100% ><tr><td class=a14>
        <disconnect/><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
        </span>&lt;disconnect/&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
      </noinput><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </span>&lt;/noinput&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
    下面的内容是为了结束query_type字段、其父表格和最顶部的vxml元素。</td></tr></table><table width=100% ><tr><td class=a14>
    </field><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
    </span>&lt;/field&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
  </form><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>&lt;/form&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</vxml><span lang="EN-US">&lt;/vxml&gt;</span></td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    下面我们来创建响应用户问题的CGI脚本程序。这一脚本程序将接收一个通过POST方法传送、名字为query_type的字段的参数,query_type的可能的值为romance、career或 family。</td></tr></table><table width=100% ><tr><td class=a14> 
</td></tr></table><table width=100% ><tr><td class=a14> 
use strict;</td></tr></table><table width=100% ><tr><td class=a14> 
use CGI qw(:standard);</td></tr></table><table width=100% ><tr><td class=a14> 
</td></tr></table><table width=100% ><tr><td class=a14> 
my $q = CGI->new();</td></tr></table><table width=100% ><tr><td class=a14> 
</td></tr></table><table width=100% ><tr><td class=a14> 
my $query_type = $q->param('query_type');</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> 
my @intro_phrases = ('My sources say',</td></tr></table><table width=100% ><tr><td class=a14> 
                     'All signs indicate that',</td></tr></table><table width=100% ><tr><td class=a14> 
                     'Search your heart. You know');</td></tr></table><table width=100% ><tr><td class=a14> 
</td></tr></table><table width=100% ><tr><td class=a14> 
my @responses = ('the answer is yes.',</td></tr></table><table width=100% ><tr><td class=a14> 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?