2016-12-01 70 views
0

我正在尝试使用voiceXML和Yahoo Weather API制作语音天气系统。为了开发我的程序,我正在使用voxeo进化。从VoiceXML调用Yahoo Weather API

要调用Weather API,我使用的data vxml标记与srcexpr,因为我需要一个动态URL(该程序要求用户检查天气的城市)。

这里是我的代码:

<?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> 

该程序不会因为data标签的工作连接到天气的API,但我不知道为什么。做一个人知道为什么失败?

回答

0

我终于解决了我的问题,让一个php脚本连接到雅虎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>