本文原地址:
“遥知之”微信小程序全部源码打包下载:
实现功能实现一个智能生活信息查询的小秘书功能,支持查天气、新闻、日历、汇率、笑话、故事、百科、诗词、邮编、区号、菜谱、股票、节目预告,还支持闲聊、算24点、数学计算、单位换算、购物、搜索等功能。
使用方式上支持摇一摇、点界面按钮、手动输入这三种方式。
扫码试用(左右皆可) 界面展示 开发资源免费开放语义接口平台 olami.ai
微信小程序平台
js, css
源码分析基本延用官方案例的目录结构和命名,index.xx是首页面相关代码,logs.xx是日志页相关代码。
比官方目录结构多了两个文件:
config.js
因为用到一些配置,放在.js里封装起来比较好。
pics/bg.jpg
小程序背景图片,开发环境上加载本地文件作为背景图片是生效的,预览体验时不生效,网上有人说不支持本地文件,因此这里这个图片其实没有用到,只是暂时留着。
小程序根目录文件:app.js, app.json, app.wxss, config.js app.js提供获取用户微信账号昵称和所在地,获取当前地理位置这两个公共接口。
const corpusList = require('./config').corpus var UTIL = require('./utils/util.js'); App({ onShow: function () { UTIL.log('App Show') }, onHide: function () { UTIL.log('App Hide') }, onLaunch: function () { UTIL.log('App Launch') this.updateUserLocation() }, updateUserLocation: function() { var that = this wx.getLocation({ //type: 'wgs84', // gps原始坐标 type: 'gcj02', //国家标准加密坐标 success: function (res) { that.globalData.latitude = res.latitude that.globalData.longitude = res.longitude that.globalData.speed = res.speed //var accuracy = res.accuracy UTIL.log('REFRESH LOCATION: ' + that.globalData.latitude + ' | ' + that.globalData.longitude + ' , speed: ' + that.globalData.speed) }, fail: function(res) { UTIL.log('REFRESH LOCATION FAILED...') } }) }, getUserInfo:function(cb){ var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //调用登录接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo that.globalData.custId = UTIL.getUserUnique(that.globalData.userInfo); typeof cb == "function" && cb(that.globalData.userInfo) } }) }, fail: function () { UTIL.log('登录WX失败了!') } }) } }, clearUserInfo: function() { var that = this that.globalData.userInfo = null; that.globalData.hasLogin = false; }, globalData:{ userInfo:null, corpus: corpusList, custId: '', latitude: 0.0, longitude: 0.0, speed: 0, } }) app.json配置小程序窗体相关属性:标题名称,背景色,网络超时等。
配置首页面为pages/index/index。
{ "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "backgroundTextStyle": "black", "navigationBarBackgroundColor": "#F8F8F8", "navigationBarTitleText": "遥知之 -- olami语义支持", "navigationBarTextStyle": "black", "backgroundColor": "#F8F8F8" }, "networkTimeout": { "request": 10000, "connectSocket": 10000, "uploadFile": 10000, "downloadFile": 10000 } } app.wxss配置了“遥知之”小程序container全局样式
/**app.wxss**/ .container { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; box-sizing: border-box; } 配置文件:config.js保存一些配置信息,包括NLI的key和secret,还有小程序中预置的语料集合。
module.exports = { //NLI appkey appkey: `b4118cd178064b45b7c8f1242bcde31f`, //NLI appsecret appsecret: `7908028332a64e47b8336d71ad3ce9ab`, corpus: [ // '闲聊', // '天气', // '诗词', // '单位换算', // '新闻', // '算24点', // '菜谱', // '汇率', // '邮编', // '区号', // '股票', // '日历', // '节目预告', // '笑话', // '故事', // '购物', // '数学运算', // '百科', // '搜索', '你今年多大啦', '上海今天天气如何', '北京的呢', '李白写过什么诗', '我要听李白的静夜思', '背一首将进酒', '一公里等于多少英尺', '我要看体育新闻', '4567算24点', '红烧肉的做法', '1美元能换算多少人民币', '查一下南昌的邮编', '郑州的区号是多少', '中国石油的股价', '今年中秋节是哪一天', '明晚湖南卫视放什么节目', '来个笑话', '讲个故事听听', '我要买电脑', '1加到100等于多少', '黄山有多高', '百度搜一下薛之谦的照片', ] }; utils目录文件:GUID.js, MD5.js, NLI.js, util.js 获取随机GUID:GUID.js //表示全局唯一标识符 (GUID)。 function Guid(g) { var arr = new Array(); //存放32位数值的数组 if (typeof (g) == "string") { //如果构造函数的参数为字符串 InitByString(arr, g); } else { InitByOther(arr); } //返回一个值,该值指示 Guid 的两个实例是否表示同一个值。 this.Equals = function (o) { if (o && o.IsGuid) { return this.ToString() == o.ToString(); } else { return false; } } //Guid对象的标记 this.IsGuid = function () { } //返回 Guid 类的此实例值的 String 表示形式。 this.ToString = function (format) { if (typeof (format) == "string") { if (format == "N" || format == "D" || format == "B" || format == "P") { return ToStringWithFormat(arr, format); } else { return ToStringWithFormat(arr, "D"); } } else { return ToStringWithFormat(arr, "D"); } } //由字符串加载 function InitByString(arr, g) { g = g.replace(/\{|\(|\)|\}|-/g, ""); g = g.toLowerCase(); if (g.length != 32 || g.search(/[^0-9,a-f]/i) != -1) { InitByOther(arr); } else { for (var i = 0; i < g.length; i++) { arr.push(g[i]); }