##背景需求 出于推广转发群的角度,同时能便于查询疫情的动态信息 ##想法和实现 > * 傻妞支持js,同时提供了push和sendText两种方式发送信息,前者推送otto指定范围,后者谁发起回复谁 > * 疫情查询是一个比较频繁的查询,所以不适用于群体推送 > * 疫情回复信息可能较多,需要考虑将消息段分开发送,也因为分开发送 > * 发送、接收端以及网络的各方面因素会出现消息顺序错乱的情况 针对以上需要分析消息来源api的json结构并数组化,自建sleep函数伪休眠控制多条发送间隔,push跟sendText的接收数据类型还不一样,一个对象一个字符串,所以数组还要处理下 ##代码段 ```javascript function readNCOVArea(obj) { if (obj && obj.newslist) { for (i in obj.newslist) { midArr = obj.newslist[i].riskarea.mid highArr = obj.newslist[i].riskarea.high } } else { content = "风险区域数据查询失败" } newslist.push("中风险区域:"); if (midArr.length > 70) { //信息太长可能存在无法发送的问题,所以截断 arrNum = Math.floor(midArr.length / 2); array2(midArr, arrNum) //js不支持函数重构,所以加个2吧,手动狗头 sendMessage(content); sleep(2000); sendMessage(content1); } else { sendMessage(array(midArr)); } newslist = ["高风险区域:"] content = "" sleep(2000); sendMessage(array(highArr)) } function array(arr) { //根据api来源json对象处理为字符串数组 for (i in arr) { newslist.push((Number(i) + 1) + ". " + arr[i]) } content = newslist.join("\n"); return content } function array2(arr, num) { //截断 for (i in arr) { if ((Number(i) + 1) < num) { newslist.push((Number(i) + 1) + ". " + arr[i]) } else { secondList.push((Number(i) + 1) + ". " + arr[i]) } } content = newslist.join("\n"); content1 = secondList.join("\n"); return content, content1 } function sendMessage(arrobj) { var str = '' for (i in arrobj) { str += arrobj[i] } sendText(str) } function sleep(delay) { var start = (new Date()).getTime(); while ((new Date()).getTime() - start < delay) { continue; } } ``` Last modification:November 11, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 If you think my article is useful to you, please feel free to appreciate
One comment
逆境中的反思充满生命韧性。