本文原地址: http://blog.csdn.net/happycxz/article/details/75432928
“遥知之”微信小程序全部源码打包下载: http://download.csdn.net/download/happycxz/9905134
实现一个智能生活信息查询的小秘书功能,支持查天气、新闻、日历、汇率、笑话、故事、百科、诗词、邮编、区号、菜谱、股票、节目预告,还支持闲聊、算24点、数学计算、单位换算、购物、搜索等功能。
使用方式上支持摇一摇、点界面按钮、手动输入这三种方式。




基本延用官方案例的目录结构和命名,index.xx是首页面相关代码,logs.xx是日志页相关代码。
比官方目录结构多了两个文件:
config.js
因为用到一些配置,放在.js里封装起来比较好。
pics/bg.jpg
小程序背景图片,开发环境上加载本地文件作为背景图片是生效的,预览体验时不生效,网上有人说不支持本地文件,因此这里这个图片其实没有用到,只是暂时留着。
提供获取用户微信账号昵称和所在地,获取当前地理位置这两个公共接口。
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,
}
})
配置小程序窗体相关属性:标题名称,背景色,网络超时等。
配置首页面为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
}
}
配置了“遥知之”小程序container全局样式
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
保存一些配置信息,包括NLI的key和secret,还有小程序中预置的语料集合。
module.exports = {
//NLI appkey
appkey: `b4118cd178064b45b7c8f1242bcde31f`,
//NLI appsecret
appsecret: `7908028332a64e47b8336d71ad3ce9ab`,
corpus: [
// '闲聊',
// '天气',
// '诗词',
// '单位换算',
// '新闻',
// '算24点',
// '菜谱',
// '汇率',
// '邮编',
// '区号',
// '股票',
// '日历',
// '节目预告',
// '笑话',
// '故事',
// '购物',
// '数学运算',
// '百科',
// '搜索',
'你今年多大啦',
'上海今天天气如何',
'北京的呢',
'李白写过什么诗',
'我要听李白的静夜思',
'背一首将进酒',
'一公里等于多少英尺',
'我要看体育新闻',
'4567算24点',
'红烧肉的做法',
'1美元能换算多少人民币',
'查一下南昌的邮编',
'郑州的区号是多少',
'中国石油的股价',
'今年中秋节是哪一天',
'明晚湖南卫视放什么节目',
'来个笑话',
'讲个故事听听',
'我要买电脑',
'1加到100等于多少',
'黄山有多高',
'百度搜一下薛之谦的照片',
]
};
//表示全局唯一标识符 (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]);
}