• 技术文章 >微信小程序 >小程序开发

    一文看看如何撸出春节“智能迎春对联”小程序!

    青灯夜游青灯夜游2022-01-23 09:30:42转载436
    2022已经正式来临,距离中国人的农历春节仅剩十几天了,春节必不可少的就是春联了,下面本篇文章看看怎么实现春节“智能迎春对联”小程序,希望对大家有所帮助!

    新年将至,做个智能迎春对联小程序给大伙助助兴!提前祝各位掘友们,2022新年快落!新春快落!

    一、效果展示

    随机春联

    1.gif

    指定姓氏

    2.gif

    体验地址
    微信扫描下面的二维码 or 微信搜索宝藏程序

    3.gif

    源码地址

    Gitee:https://gitee.com/nanfangzhe/wechat_demo

    二、准备工作

    掌握语言微信小程序语言
    技术要点:①微信小程序云开发百度AI智能创作平台-智能写春联

    三、游戏流程与规则

    游戏流程:可以通过点击随机春联指定姓氏来获取所想要的春联~
    名词解释:①随机春联,随机显示一对春联。 ②指定姓氏:输入你的姓氏,生成对联。

    四、部署步骤

    1️⃣注册微信小程序流程,开启云开发
    2️⃣注册百度AI平台——》控制台——》创建自然语言处理的应用——》百度认证授权,拿到token——》再拿token去智能春联API接口
    3️⃣需要修改的地方:APPID(用微信开发者工具打开时输入的APPID)、百度token(在couplet文件夹里的index.js文件)、云开发环境env(在app.js文件)

    五、逻辑讲解与核心代码

    1 随机春联的逻辑讲解

    由于百度提供的智能春联API接口是需要传参的,所以我们可以提前预备一个小型数据集合,通过点击的时候能进行传值,然后返回需要的对联。因此,是收集了部分迎春过年的字词、词语。

    var RANDOM_TEXT_LIST = ["虎", "虎年", "迎春", "春节", "过年", "年兽", "过春节", "初一", "年初", "红红火火", "红火", "开心", "开开心心", "健康", "健健康康", "长寿", "平安", "平平安安", "家庭", "家庭和睦", "和睦", "子子孙孙", "勤劳", "福气", "福", "致富", "富裕", "富", "合家欢喜", "合家", "欢喜", "喜庆", "喜", "囍", "生意兴隆", "恭喜发财", "大富大贵", "富贵", "富裕", "丰年", "子孙满堂", "心欢喜", "人间喜", "灯火", "灯笼", "烟花", "爆竹"]

    4.png

    2 指定姓氏的逻辑讲解

    这个和随机春联是类似的逻辑,只不过需要用户输入姓氏,但是用到的api接口有点拉胯,输入单单一个姓的字,输出的内容是有点不合理。所以在这处理办法是拼接加一个“家”字进去,比如输入姓氏:柳,传值的就是柳家;输入的是张,就是张家...

      ok: function () {
        var text = this.data.textV
        if (!text || text.length > 4) {
          wx.showToast({
            title: '姓氏暂不支持超过4个字哦!',
            icon: 'none'
          })
          return;
        }
        this.getCoupletByTxt(text + "家") // 智能写对联
        this.setData({
          showModal: false
        })
      },

    3 核心代码

    经过前面的逻辑讲解,你可能就知道,核心代码是公共调用的方法。(Bingo~ 你猜对了)

    随机春联调用的方法

    // 随机春联的调用方法
      bindGetRandomCouplet() {
        let that = this
        var num = parseInt(Math.random() * (MAX_NUM - MIN_NUM + 1) + MIN_NUM, 10); // 生成[n,m]的随机整数
        that.getCoupletByTxt(RANDOM_TEXT_LIST[num]) // 智能写对联
      },

    指定姓氏调用的方法

    // 随机春联的调用方法
      ok: function () {
        var text = this.data.textV
        if (!text || text.length > 4) {
          wx.showToast({
            title: '姓氏暂不支持超过4个字哦!',
            icon: 'none'
          })
          return;
        }
        this.getCoupletByTxt(text + "家") // 智能写对联
        this.setData({
          showModal: false
        })
      },

    调用智能春联的公共方法

      // 智能写对联(API接口来源,参考百度-语言处理技术-智能创作平台-智能写对联:https://ai.baidu.com/ai-doc/NLP/Ok53wb6dh)
      getCoupletByTxt(text) {
        let that = this
        console.log(text) // 字符串(限5字符数以内)即作诗的主题
        if (!text || text.length > 5) {
          wx.showToast({
            title: '主题限制5个字以内哦!',
            icon: 'none'
          })
          return;
        }
        wx.cloud.callFunction({
          name: 'couplet',
          data: {
            action: 'getCoupletByTxt',
            text
          }
        }).then(res => {
          console.log(res)
          if (res.result.error_code) {
            if ("17".indexOf(res.result.error_code) != -1) {
              wx.showToast({
                title: '调用次数用完啦,点击右下角小电话,联系开发者充次钱充次数啦!',
                icon: 'none',
                duration: 3000,
              })
            } else {
              wx.showToast({
                title: '当前对联不太行,请重试!',
                icon: 'none'
              })
            }
            return;
          }
          that.setData({
            couplets: res.result.couplets
          })
        })
      },

    云函数调用的公共方法

    // 注:先看readme.md文件
    // 对联生成请求
    const cloud = require('wx-server-sdk')
    var rp = require('request-promise')
    cloud.init({
      env: cloud.DYNAMIC_CURRENT_ENV
    })
    const DB = cloud.database()
    // 天行数据的KEY
    var TIAN_XING_KEY = ''
    // 天行数据的接口API
    var TIAN_XING_API = 'http://api.tianapi.com/duilian/index'
    // 百度Token
    var BAI_DU_ACCESS_TOKEN = '' // 这里需要自行去申请咯~
    // 百度接口api
    var BAI_DU_API = [
      "https://aip.baidubce.com/rpc/2.0/creation/v1/poem", // 智能写诗
      "https://aip.baidubce.com/rpc/2.0/creation/v1/couplets" // 智能写对联
    ]
    
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      var { action, text } = event
      var data = {}
      switch (action) {
        case 'getPoemByTxt': {
          data.text = text
          if (text == "")
            return {
              message: '缺少参数text'
            }
          // 智能写诗(API接口来源,参考百度-语言处理技术-智能创作平台-智能写诗:https://ai.baidu.com/ai-doc/NLP/ak53wc3o3)
          return new Promise((resolve, reject) => {
            try {
              rp({
                method: 'POST',
                headers: {
                  "content-type": "application/json",
                },
                body: JSON.stringify(data),
                url: BAI_DU_API[0] + '?access_token=' + BAI_DU_ACCESS_TOKEN, // text必要参数,写诗的主题内容
              }, function (error, response, body) {
                if (error) {
                  return reject(error);
                }
                return resolve(JSON.parse(body));
              })
            } catch (e) {
              return reject(e)
            }
          });
        }
        case 'getCoupletByTxt': {
          data.text = text
          if (text == "")
            return {
              message: '缺少参数text'
            }
          // 智能写对联(API接口来源,参考百度-语言处理技术-智能创作平台-智能写对联:https://ai.baidu.com/ai-doc/NLP/Ok53wb6dh)
          return new Promise((resolve, reject) => {
            try {
              rp({
                method: 'POST',
                headers: {
                  "content-type": "application/json",
                },
                body: JSON.stringify(data),
                url: BAI_DU_API[1] + '?access_token=' + BAI_DU_ACCESS_TOKEN,  // text必要参数,对联的主题内容
              }, function (error, response, body) {
                if (error) {
                  return reject(error);
                }
                return resolve(JSON.parse(body));
              })
            } catch (e) {
              return reject(e)
            }
          });
        }
        case 'getRandomCouplet': {
          // 随机一对对联(无横批)(API接口来源,天行数据:https://www.tianapi.com/console/)
          return new Promise((resolve, reject) => {
            rp({
              url: TIAN_XING_API + '?key=' + TIAN_XING_KEY,
              method: "POST",
              json: true,
            }, function (error, response, body) {
              console.log("响应" + body)
              resolve(body)
              if (!error && response.statusCode == 200) {
                try { } catch (e) {
                  reject()
                }
              }
            })
          })
        }
        default: {
          return {
            message: 'action错误!'
          }
        }
      }
    
    }

    (中间有些多余的代码,并不是多余的,只是未整理,并且还在继续开发这个小程序...)

    完整代码地址:https://gitee.com/nanfangzhe/wechat_demo

    【相关学习推荐:小程序开发教程

    以上就是一文看看如何撸出春节“智能迎春对联”小程序!的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    上一篇:利用Taro + Vue3如何开发小程序?(实践) 下一篇:浅析如何从小程序跳到H5页面?(示例解析)
    PHP编程就业班

    相关文章推荐

    • 微信小程序算一个系统吗• 一个邮箱可以有几个微信小程序• 如何利用小程序的canvas来绘制二维码?• 手把手带你在小程序中怎么实现3d裸眼轮播效果• 利用Taro + Vue3如何开发小程序?(实践)

    全部评论我要评论

  • P粉610565763

    请写明原文出处!!!

    2022-01-21

  • P粉610565763

    请写明原文出处!!!

    2022-01-21

  • 取消发布评论发送
  • 1/1

    PHP中文网