【度客Creator】技能开发cfc函数node.js开发天气预报
易伟 发布于2018-10-14 21:58 浏览:663 回复:2
2
收藏

对于cfc使用网络请求一直是很多网友咨询的,官方也给了一个机票的案例,不过过于复杂,下面以cfc函数node.js开发天气预报为例说明。功能实现如下,输入城市,回复天气(晴、多云等)。词槽就用sys.city,略过。

异步网络请求使用了request-promise地址在https://github.com/request/request-promise

按照官方的指导要下载zip包,然后本地安装node.js,将依赖包安装后再打包,这个方法安装时有部分报错。直接用微信小程序的云开发,安装完后,将node_modules的包都复制过来。这两个方法大家可以选择一个。

核心代码如下:

注意词槽需要解析一下,获得城市,如北京。拼接url,api使用百度天气,自己更换ak。json解析出天气。注意最后需要返回的是Promise.reslove,异步请求。理解不了,就先记住。

    const rp = require('request-promise');
    const qs = require('querystring');



this.addIntentHandler('getcity', () => {

                let loc = this.getSlot('sys.city');
                console.log(loc)
                loc = JSON.parse(loc)
                loc = loc.city
                console.log(loc)
                let url = 'http://api.map.baidu.com/telematics/v3/weather?output=json&ak=XXXXX' + qs.escape(loc)
                console.log(url)
                var options = {
                    uri: url,
                    headers: {
                        'User-Agent': 'Request-Promise'
                    },
                    json: true // Automatically parses the JSON string in the response
                };
                var res = rp(options).then(function (html) {

                    console.log("***************")
                    console.log(html.results[0].weather_data[0].weather)
                    return { outputSpeech: html.results[0].weather_data[0].weather }
                })


                return Promise.resolve(res)








            });
        }

 

 



收藏
点赞
2
个赞
共2条回复 最后由DuerOS-河豚回复于2018-10-18 14:37
#2kunkun0830回复于2018-10-15

点赞!

比官方例子还简单!

只是那个链接点不开,因为链接后面加了个句号。。。

0
#3DuerOS-河豚回复于2018-10-18

赞,可以编辑下帖子,去掉那个句号hh

0
TOP