- #云开发挑战赛#-每日戒糖-冲鸭
「每日戒糖」初衷 过度吃「糖」,可能导致青少年儿童龋齿与肥胖,使中青年人提前衰老,给老年人带来一系列健康问题,与「糖」的斗争持续一生。 基本所有食物都含糖,有的「糖」要少吃或不吃,有的要适量吃,还有的要多吃,到底怎么吃😵?使用「每日戒糖」小程序,让您更具智慧的面对「糖」。 话题热度 「便利店上架越来越多的无糖饮料」 「糖的上瘾程度是可卡因的八倍」 「冻龄明星护肤秘籍居然是戒糖!」 「中国糖尿病患病人数高居全球首位」 「BBC纪录片《碳水化合物的真相》」 「抗氧化护肤品?天价抗糖丸?生酮减肥法?」 … 随着有关「糖与饮食」的话题逐渐热门,越来越多的人开始重视「糖」的问题。是否有一个空间可以用于学习「糖」的知识、与他人交流和付诸行动? 毕竟,吃的对比什么都管用。 戒糖体验 开发者是一名资深的「戒糖玩家」,也曾经一度体重超过230斤,通过戒糖、运动等一系列举措成功减肥70余斤。其中戒糖是成功的关键,使我可以保持身材、改善皮肤,当然初期也走过许多弯路。 开发「每日戒糖」小程序是希望传播戒糖经验分享方法,避免踩坑。 我需要戒糖吗? 「每日戒糖」小程序适用于: 注重糖对皮肤与身材危害的年轻人用户; 注重皮肤保养的各年龄段女性用户; 减重减脂、增肌、健身用户; 存在糖尿病、妊娠期糖尿病、三高等风险的各年龄段用户; 对戒糖等知识感兴趣的用户; 实际上,「每日戒糖」几乎适用于任何人 小程序介绍 用户使用 “每日戒糖”可以为每一个用户提供系统性的完整戒糖体验。 无论是用户是否了解相关知识,是小白还是大神,但总可以快速融入其中。使用步骤如下: 1.首页及知识 假设您从新闻、搜索引擎中大致了解到糖的危害或戒糖的好处。 您此时需要具体了解相关知识,打开「每日戒糖」小程序,首页中提供分专题,专题下分类别的文章供您阅读,您亦可以搜索关键词,以了解您感兴趣或不懂的知识点。 2.行动 您从首页或其他各处得知糖之危害,并准备戒糖。 「每日戒糖」中的「行动」会首先要求您完成一个简单的小测验以评估您的戒糖水平,并给出戒糖分。「行动」页中有「食物记录」,「碳水循环计划」,「每日戒糖目标」,「食物优化」,「戒糖冥想」等行动,帮助您制订和实施计划。 根据你的行动,戒糖分将不断被重新评估,您的努力将反映在戒糖分的提高上。 3.含糖查询 虽然您制定并开始实施计划,但面对各种食物时,您还是不知所措。 查询某食物含糖情况,可以通过输入食物名称或者使用「AI智拍」进行搜索。「AI智拍」通过相机就可以搜索食物含糖,简化搜索过程。其包括「果蔬识别」,「菜肴识别」,「条形码搜索」,「营养成分表识别」四种识别功能,通过「AI智拍」,您基本可以使用相机搜素所有食物。 我们将食物按糖的类型列分为「绿」,「黄」,「蓝」三种便于您直观的了解,并且还提供了各类食物的详细营养数据,方便您了解食物的属性。查询含糖也属于一种「行动」,因为在大量搜索各类食物属性后,您将掌握规律,熟记各类食物属性。那时,您已经是「准大神」了。 4.星球 在您戒糖取得阶段性胜利,或在戒糖过程中您有感想、困惑、喜悦想要分享时。 您可以在「星球」中发送一个图文并貌的帖子表达您想说的,同时也可以了解其他「戒糖星球人」的经验,心情,共享戒糖的乐趣。您可以对他人的帖子点赞,评论,或对某条评论点赞。 没有结束,戒糖永远在路上。 功能结构图 [图片] 技术开发 微信小程序+云开发(云函数,云数据库,静态托管等) [图片] 界面设计 我们认为,界面设计是小程序的灵魂,视觉体验与程序功能同等重要,界面设计的每一步我们都进行了细致的斟酌。 小程序配色:「每日戒糖」的主题色为姜黄色(浅色)与棕色(深色),棕色会让人联想到中药或咖啡等苦味食品,降低对糖的兴趣。而图标、标签等采用较为艳丽的糖果色,以避免风格过于古板,吸引不同年龄段人群的眼球。 卡片式设计:内容显示均采用卡片式扁平设计,卡片带圆角,轻灰色底色,白色与浅棕色相间,提升区分度。 更多细节设计,请扫码查看下方小程序。 展示 视频链接 请移步腾讯视频 小程序展示 [图片] [图片] 后台展示 [图片] 体验 说明 由于「星球」功能涉及用户自行生成内容的发布/分享/交流,属社交范畴,为个人主体小程序未开放类目,故在上线版本中取消了该功能,十分抱歉。其他功能均可正常使用。 小部分iOS设备可能出现某些页面顶部上移错位。该问题已经在「体验版」中修复,不影响小程序功能正常使用。(比赛临近,线上版本暂时不再提交审核更新。) 参赛的专家评审版本为小程序的体验版。 二维码 [图片] 线上版本取消部分功能,参赛的专家评审版本为小程序的体验版 关于开发者 「每日戒糖」开发者:赵鹤宇 男,25岁,现就职于国网新疆电力公司伊犁供电公司。 编程超级爱好者,擅长爬虫、自动化、大数据、移动应用开发等,对于解决复杂问题以及挑战技术难点充满兴趣,希望加入技术圈。 同时热爱运动、健康生活与戒糖饮食,希望与爱好者及专业人士交流经验与心得。 合作、交流WeChat:[代码]zhy-1-_-1[代码]
2020-09-20 - #小程序云开发挑战赛#-AI写诗-CitizenFour
项目名称:AI写诗 项目背景:每个人心目中都住着一个文艺青年,诗歌是人们的一种自然表达,它没有门槛,人人都是徐志摩 应用场景:可以写押韵自由诗、藏头诗、给定若干字作为主题的诗。生活中任何一件事都可以用诗去表达 (可以丰富自己的流量主矩阵小程序,多赚一些广告费) 目标用户:男女通吃,年龄18-40 实现思路: 1、文字安全识别 // 文字内容检测 async function msgSecCheck(event) { try { const res = await cloud.openapi.security.msgSecCheck({ content: event.content }) return res; } catch (err) { return err; } } //文字检测页面调取 msgSecCheck(content) { wx.showLoading({ title: '检测文字中', mask:true }) // new Promise((resolve, reject)=>{ wx.cloud.callFunction({ name: 'contentCheck', data: { content: content, type: "msgSecCheck" }, success: res => { wx.hideLoading(); if (res.result.errCode == 0) { wx.navigateTo({ url: "../poem_detail/detail?type=" + app.globalData.e.type + "&text=" + content }); }else if (res.result.errCode == 87014) { wx.showToast({ title: '文字含有敏感违法内容!', icon: 'none' }); } }, fail: res => { wx.hideLoading(); } }) } 2、AI诗句学习搭建,两种方式任选其一 2-1、serverless搭建 通过 Clone 代码,并且安装相关依赖: pip3 install tensorflow==1.14 word2vec numpy 训练: python3 train.py 此时会生成多个模型在output_poem文件下,我们只用到最好的,提result.json 在项目目录下,安装必要依赖: pip3 install word2vec numpy -t ./ 完成之后,编写函数入口文件: import uuid, json from write_poem import WritePoem, start_model writer = start_model() def return_msg(error, msg): return_data = { "uuid": str(uuid.uuid1()), "error": error, "message": msg } print(return_data) return return_data def main_handler(event, context): # 类型 # 1: 自由 # 2: 押韵 # 3: 藏头押韵 # 4: 藏字押韵 style = json.loads(event["body"])["style"] content = json.loads(event["body"]).get("content", None) if style in '34' and not content: return return_msg(True, "请输入content参数") if style == '1': return return_msg(False, writer.free_verse()) elif style == '2': return return_msg(False, writer.rhyme_verse()) elif style == '3': return return_msg(False, writer.cangtou(content)) elif style == '4': return return_msg(False, writer.hide_words(content)) else: return return_msg(True, "请输入正确的style参数") 同时需要准备好 Yaml 文件: getUserIp: component: "@serverless/tencent-scf" inputs: name: autoPoem codeUri: ./ exclude: - .gitignore - .git - .serverless - .env handler: index.main_handler runtime: Python3.6 region: ap-beijing description: 自动古诗词撰写 namespace: serverless_tools memorySize: 512 timeout: 10 events: - apigw: name: serverless parameters: serviceId: service-8d3fi753 protocols: - http - https environment: release endpoints: - path: /auto/poem description: 自动古诗词撰写 method: POST enableCORS: true 此时,我们就可以通过 Serverless Framework CLI 部署项目。 2-2、自建服务器搭建 搭建服务端API,服务器环境推荐:LNMP。解压server-api.zip到站点根目录。服务器安装python3和pip3。 python3.6+PIP3安装教程:https://www.cnblogs.com/yangzhaon/p/11203395.html 安装依赖:pip3 install tensorflow==1.14 word2vec numpy 搭建人工智能:解压好server-api.zip后,进入目录运行:python3 train.py,需要学习3把王者荣耀排位赛的时间 学习好之后,前台启动服务: python3 poem_server.py,可以看到只有本地+端口可以访问。 后台启动服务:nohup python3 poem_server.py >/dev/null 2>&1 & //如果要上线,请用后台启动服务命令,因为前台启动,一会儿就自动断开了 然后nginx做代理 location / { root html; proxy_pass http://127.0.0.1:5000; index index.html index.htm; } 这样,你就可以用域名访问你的服务端接口。然后把接口放到小程序前端需要修改的位置。 注:服务端为github开源,作者:norybaby,github地址:https://github.com/norybaby/poet [图片] 3、调取人工智能写诗API 由于本人考虑服务器安全性,故不开放api接口,自己根据第二步搭建好,替换下方【你的域名】 requestAI/index.js,第20行,替换【你的域名】,例如:mp.weixin.qq.com async function requestAI(event){ try{ var options = { uri: "http://【你的域名】/poem?style="+ event.style +"&start=" + encodeURI(event.text), headers: { "Content-Type": "application/json" }, json: true }; return request(options) .then(function (res) { console.log(res,"请求获取成功"); return res; }) .catch(function (err) { console.log(err,'请求获取失败'); return err }); } catch (err) { return err; } } 架构图: [图片] 效果截图: 第三个图稍微有点出入,懒的改了 [图片] 视频介绍: [视频] 代码链接:https://citizenfour.coding.net/public/AIPoem/AIPoem/git 作品体验二维码: [图片] 团队简介:玩儿赚流量主,游走在骚操作的第一线。个人主页↓↓↓↓↓别忘了点个赞
2020-09-24 - 小程序云开发时效数据刷新和存储 (access_token等)
小程序云开发时效数据刷新和存储 (access_token等) 1.问题描述 小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数据。本文以小程序云开发使用百度API接口为例,介绍access_token定时刷新和请求机制。 下面是百度调用身份证识别的一段需求,需要传的参数需要有access_token。 请求示例 HTTP 方法:[代码]POST[代码] 请求URL: [代码]https://aip.baidubce.com/rest/2.0/ocr/v1/idcard[代码] URL参数: 参数 值 access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取” access_token 是具有时效性的数据,每次请求一次接口就进行一次请求刷新,显然是对计算机资源的极大浪费,且影响效率。 2.问题解决方案 [图片] 2.1.云数据库配置 新建一个云数据库名为setconfig。作为配置型信息存储数据库,类似access_token的数据都可以向其中存储。 对access_token配置下列字段: _openid (你的openid* 必填) config_name (配置名,填access_token) value (access_token的值,默认为null) id会自动生成,配置完效果如下(这个value是已经更新后的值) [图片] 2.2 定时云函数配置 阅读access_token获取的文档,可知,我们需要请求一个地址来获取access_token的值。 获取Access_Token 请求URL数据格式 向授权服务地址[代码]https://aip.baidubce.com/oauth/2.0/token[代码]发送请求(推荐使用POST),并在URL中带上以下参数: grant_type: 必须参数,固定为[代码]client_credentials[代码]; client_id: 必须参数,应用的[代码]API Key[代码]; client_secret: 必须参数,应用的[代码]Secret Key[代码]; 例如: [代码]https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&[代码] 实现 我们需要在云函数中模拟请求,并根据返回结果刷新云数据库中的access_token值。 想要运行通过该程序,需要开发者自己去百度创建账号并创建应用。 云函数index.js [代码]// 云函数入口文件 index.js const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() var request = require('request') // 定时器 exports.main = async(event, context) => { const appkey = '填写你的百度AppKey'; const appsecret = '填写你的百度AppSecret'; var url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + appkey + '&client_secret=' + appsecret; return new Promise((resolve, reject) => { request({ url: url, method: "POST", json: true, headers: { "content-type": "application/json", }, }, function(error, response, body) { if (!error && response.statusCode == 200) { console.log('通行证为' + body.access_token) resolve(body.access_token) //记得修改.doc('xxx') 中的内容 db.collection('setconfig').doc('aaaf5a56-1dd9-4e50-974b-34688fa47b20').update({ data: { value: body.access_token } }).then(res => { console.log('调用完成') console.log(res) }) } }) }) } [代码] docid是setconfig生成的,每个人不同注意修改 还有一种更新写法,不过更推荐使用上面的方法,效率更高,且稳定。 [代码]db.collection('setconfig').where({ config_name:'access_token' }).update({ data: { value: body.access_token } }) [代码] 云函数config.json(定时触发器功能实现) [代码]{ // triggers 字段是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可添加多个 "triggers": [ { // name: 触发器的名字,规则见下方说明 "name": "myTrigger", // type: 触发器类型,目前仅支持 timer (即 定时触发器) "type": "timer", // config: 触发器配置,在定时触发器下,config 格式为 cron 表达式, //现在为每天凌晨两点触发 "config": "0 0 2 * * * *" } ] } [代码] 云函数整体结构为: [图片] 然后上传并部署(云端安装依赖)。 2.3 小程序端获取Access_token 在小程序进入相应界面的时候,请求云数据库,获取access_token [代码]onLoad: function (options) { //页面初始化 var that = this; db.collection('setconfig').where({ config_name:'access_token' }).get({ success(res){ that.setData({ access_token:res.data[0].value }) //console.log(res.data[0]) }, fail(res){ wx.showToast({ title: '请求失败,无法通过扫描填充数据', }) } }) }, [代码] 3. 参考资料 [1]百度AI鉴权认证机制 [2]微信小程序云开发数据库update函数更新不了数据的问题 [3]小程序云开发定时触发器
2020-03-06 - 微信小程序云开发教程-JavaScript入门(5)-函数异步同步
本小节我们将学习同步和异步的概念 [图片] 同步是指下一行代码必须等待上一行代码执行完成,才执行。 异步是指下一行代码不必等待上一行代码执行完成,才执行。 同步的优点是,关心代码的执行结果,按顺序执行,保证了结果的顺序性; 异步的优点是,不关心代码执行结果,异步执行,可以提高执行效率,尤其适用于给用户发提醒通知的情景 [图片] 所有代码,默认的执行顺序都是同步的。那么,我们应该怎么把一个函数设置成可以异步执行的呢? 只需要在function的前面增加一个关键词async,那么在调用该函数时,该函数就是异步执行的。 在右边的代码里,console.log(2)的执行不必等待test()函数执行完 [图片] 可能有的同学想问,那怎么把异步函数变成同步执行的呢?我们只需要在调用该函数的时候,在前面增加一个关键词await。 那么在右边的代码里,console.log(2)的执行就必须等待test函数执行完毕,并放回对应的直接结果。
2020-08-18