从VoiceXML调用Yahoo Weather API

时间:2016-12-01 16:35:05

标签: api yahoo weather vxml voicexml

我正在尝试使用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,该程序无法正常工作,但我不知道原因。有人知道为什么会失败吗?

1 个答案:

答案 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>