一、背景
背景是私营主高某想要做一个类似于“民意调查”的东西,但是这个东西要形式友好,做好有二维码
作为推广物料,并且让参与的人愿意参与
、操作简单
和不抵触
。
一开始我们的方案是使用电子问卷,比如问卷星这样的H5产品,但是问卷这东西大家都懂,现在太铺天盖地,当别人发给你一份问卷的时候,第一反应就是头大。所以显然问卷不符合我们形式友好、操作简单的诉求。于是自然而言想到微信公众号
这个主流平台,微信背书,产品友好,而且自然流量巨大,容易推广。
二、准备工作
第一步就是需要有个微信公众号
,最好是企业订阅号,这一点高某已经满足,并且公众号有专人维护。那么接下来就是要把微信公众号本身提供的强大的运营功能用起来。
作为从事过微信生态开发的人都知道,微信生态具备强大的可开发性(公众号、订阅号、小程序、小游戏),公众号内部还可以跳转网页,而微信本身为网页加载提供了专门的Webview作为容器进行承载,所以任何由开发者维护合法H5网页都可以通过微信公众号内部打开。
但是高某的诉求是方案一定是要同时面向使用者和维护者都简单易用,不能搞的太复杂,而且实现快,所以我们最好是利用微信公众平台提供的现有功能来实现这一诉求。
三、方案实施
微信公众平台
我们看一下一个普通的微信公众号管理后台是什么样的,可以做什么。☞ 传送门
我们这次的方案主要使用到【自动回复】【自定义菜单】【消息管理】这3个菜单,分别看一下
第一步:自动回复
我们通过编辑被关注回复
设置用户关注本公众号后的首次问候如下
第二步:收到消息回复
这里的内容用于在收到用户向公众号发送消息后的立即响应
,可以给用户一个良好的反馈感
第三步:自定义菜单
这里我们可以自定义设置用户关注公众号后看到的公众号底部菜单,通过如下设置,进入到我们的公众号后便可在底部看到
效果如下
四、消息收集
当我们做好这个功能以后,如何管理用户发给我们的消息,微信公众平台提供了消息管理
菜单给我们查看最多近五天的所有用户消息
但是高某希望能够不仅限于通过微信公众平台来看用户消息,而想能够把这些内容导出到excel表格
中,这个能不能做到呢?
从微信公众平台只管来看,是没有为我们提供消息导出功能的,但这功能又想实现,怎么办。是时候展现真正的技术了!
五、奇淫技巧
控制台分析XHR请求
首先我们实现的方案前提是尽可能少的通过开发手段解决,那就只能利用现有资源进行组合来实现我们的诉求。消息既然已经能看到,那我们打开浏览器控制台看看有没有接口可以用来捕捉数据。
原来消息列表竟然不是通过接口请求获得的,那么看一下URL地址
消息竟然是通过URL请求直接返回页面资源并内嵌其中的,既然PC端走不通,那我们考虑一下移动端抓包。因为查看公众号消息不仅可以通过微信公众平台查看,还可以使用官方提供的小程序【公众平台助手】在移动设备上管理粉丝消息,如下
移动端抓包
再看看这个小程序我们抓包抓到了什么
JSON解析
通过JSON工具解析一下如下
六、数据处理
实现JSON转Excel
既然我们已经能够拿到序列化后的JSON数据,那后续操作就简单了,就是简单地实现将JSON整理导出为excel文件,实现代码如下
<html>
<head>
<p style="font-size: 20px;color: red;">使用a标签方式将json导出csv文件</p>
<button onclick='tableToExcel()'>导出</button>
</head>
<body>
<script>
function prefixDate(origin) {
const str = origin && origin.toString()
if (str.length === 2) return origin
if (str.length === 1) return '0' + str
}
function getDate(dateValue) {
let temp = dateValue
if (temp && temp.toString().length === 10) temp = temp * 1000
const date = new Date(temp)
const year = date.getFullYear()
let month = prefixDate(date.getMonth() + 1)
let when = prefixDate(date.getDate())
let hour = prefixDate(date.getHours())
let minute = prefixDate(date.getMinutes())
let sec = prefixDate(date.getSeconds())
return `${year}-${month}-${when} ${hour}:${minute}:${sec}`
}
function tableToExcel() {
const jsonData = [
...
]
//列标题,逗号隔开,每一个逗号就是隔开一个单元格
let str = `微信名称,消息内容,是否已回复,发送时间,微信头像\n`;
//增加\t为了不让表格显示科学计数法或者其他格式
for (let i = 0; i < jsonData.length; i++) {
const data = jsonData[i]
const nick_name = data.nick_name.toString()
const content = data.content.toString()
const has_reply = data.has_reply === 1 ? '是' : '否'
const dateStr = getDate(data.date_time)
const avatar = data.wx_headimg_url.toString()
str += `${nick_name}\t,${content}\t,${has_reply}\t,${dateStr}\t,${avatar}\n`
}
//encodeURIComponent解决中文乱码
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
//通过创建a标签实现
let link = document.createElement("a");
link.href = uri;
//对下载的文件命名
link.download = "用户消息.xls";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
</body>
</html>
导出下载
使用浏览器打开这个HTML文件
点击【导出】,最终得到效果如下
七、如何使用
- 配置微信公众平台
- 使用
公众平台助手
小程序抓包得到数据源 - 将数据源配置到导出脚本
- 导出下载Excel文件
八、总结
方案实现流程