小程序模板网

微信小程序实战——智能小秘“遥知之”源码分享(语义理解基于olami) ...

发布时间:2018-04-21 10:27 所属栏目:小程序开发教程

微信小程序智能生活小秘书开发详解

>>>>>>>>>>>>>>>>>>>>>>>> 欢迎转载 <<<<<<<<<<<<<<<<<<<<<<<<

本文原地址: http://blog.csdn.net/happycxz/article/details/75432928

“遥知之”微信小程序全部源码打包下载: http://download.csdn.net/download/happycxz/9905134

实现功能

实现一个智能生活信息查询的小秘书功能,支持查天气、新闻、日历、汇率、笑话、故事、百科、诗词、邮编、区号、菜谱、股票、节目预告,还支持闲聊、算24点、数学计算、单位换算、购物、搜索等功能。

使用方式上支持摇一摇、点界面按钮、手动输入这三种方式。

扫码试用(左右皆可)

界面展示

开发资源

  1. 免费开放语义接口平台 olami.ai
  2. 微信小程序平台
  3. js, css

源码分析

基本延用官方案例的目录结构和命名,index.xx是首页面相关代码,logs.xx是日志页相关代码。

比官方目录结构多了两个文件:

  1. config.js

    因为用到一些配置,放在.js里封装起来比较好。

  2. 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]);
      }


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23880.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询