本文原地址: 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]); }