【问题标题】:Calling Yahoo Weather API from VoiceXML从 VoiceXML 调用 Yahoo Weather API
【发布时间】:2017-04-16 09:31:25
【问题描述】:

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

为了调用 Wea​​ther API,我使用带有 srcexprdata vxml 标记,因为我需要一个动态 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,程序无法运行,但我不知道为什么。有人知道为什么会失败吗?

【问题讨论】:

    标签: api yahoo weather vxml voicexml


    【解决方案1】:

    我终于解决了我的问题,我制作了一个连接到 yahoo api 并使用 VoiceXML 中的submit 标签调用它的 php 脚本。

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

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      相关资源
      最近更新 更多