我正在尝试使用voiceXML和Yahoo Weather API制作语音天气系统。为了开发我的程序,我使用了voxeo evolution。
要使用带有data
的{{1}} vxml标记来调用Weather API,因为我需要一个动态网址(该程序会要求用户查看天气情况)。
这是我的代码:
srcexpr
由于<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1">
<form id="mainMenu">
<field name="City">
<prompt>
Please, name a spanish city.
</prompt>
<grammar src="city.grammar"/>
</field>
<!-- code taken from the javascript example of the yahoo weather api -->
<script>
<![CDATA[
var callbackFunction = function(data) {
var wind = data.query.results.channel.wind;
alert(wind.chill);
};
]]>
</script>
<data srcexpr="https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid in (select woeid from geo.places where text='"+City+", spain')&callback=callbackFunction"/>
</form>
</vxml>
标记连接到天气API,该程序无法正常工作,但我不知道原因。有人知道为什么会失败吗?
答案 0 :(得分:0)
我终于解决了我的问题,让php脚本连接到yahoo api并在VoiceXML中使用submit
标签调用它。
<?php
$City = $_REQUEST["City"];
$Day = $_REQUEST["Day"];
$BASE_URL = "http://query.yahooapis.com/v1/public/yql";
$yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="('.$City.', spain)") and u="c"';
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$yahooapi = curl_exec($session);
$weather = json_decode($yahooapi,true);
$weather_resumen = $weather['query']['results']['channel']['item']['forecast'];
$weather_today = $weather_resumen[0]['day'];
// yahoo api returns an array with the weather for the next week ordered by
// day (0 -> today, 1 -> tomorrow...). Function get_day gets the index of
// the day the user said
$index_weather = get_day($weather_today, $Day);
$condition_index = $weather_resumen[$index_weather]['code'];
$weather_condition = $cond_met[intval($condition_index)];
$min_temp = $weather_resumen[$index_weather]['low'];
$max_temp = $weather_resumen[$index_weather]['high'];
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
?>
<vxml version="2.1" xml:lang="es-ES">
<form id="form_main">
<block>
<prompt>
The weather for <?php echo $Day ?> in <?php echo $City ?> is <?php echo $weather_condition ?>. The lowest temperature will be <?php echo $min_temp ?> and the highest <?php echo $max_temp ?>.
<break/>
</prompt>
</block>
</form>
</vxml>