关键词优化流程,肥城市区seo关键词排名,做公益网站,做网站都需要自己的服务器吗微信关注用户的详细信息均保存在腾讯的微信服务器内。因此#xff0c;若想获得公众号的关注用户的详细信息#xff0c;必须通过相应的接口进行调用。而接口规定一次拉取只能拉取一万条openid#xff0c;当用户较多时我们需要循环调用接口进行拉取操作。
首先我们需要获得acc…微信关注用户的详细信息均保存在腾讯的微信服务器内。因此若想获得公众号的关注用户的详细信息必须通过相应的接口进行调用。而接口规定一次拉取只能拉取一万条openid当用户较多时我们需要循环调用接口进行拉取操作。
首先我们需要获得accesstoken这是微信接口调用凭证。// 获取微信access_tokenString accessToken WxBase.getToken();// 跨域请求需在服务器端设置响应头response.setHeader(Access-Control-Allow-origin, *);JSONArray user_info_list new JSONArray();// 拉取完全部用户之后存储也是本方法的最终返回对象。JSONArray current_info_list new JSONArray();// 每次获取之后存储的单元JSONArray openidList new JSONArray();// 作为批量获取用户信息方法batchGetUserInfo的参数String nextOpenId ;int counter 0;int total 0;int count 0;do {// 利用do-while循环可以解决粉丝数超过一万或者不足一万的情况避免代码冗余。// 取openid列表JSONObject userJsonObject WxUser.getUserList(accessToken, nextOpenId);// total为全部用户count为本次拉取的用户条数total userJsonObject.getIntValue(total);// 比如是20000count userJsonObject.getIntValue(count);// 10000counter count;// 10000nextOpenId userJsonObject.getString(next_openid);JSONObject dataJsonObject JSONObject.parseObject(userJsonObject.getString(data));JSONArray openidArray JSON.parseArray(dataJsonObject.getString(openid));IteratorObject iterator openidArray.iterator();while (iterator.hasNext()) {String openid (String) iterator.next();JSONObject jo new JSONObject();jo.put(openid, openid);jo.put(lang, zh-CN);// TODO:暂时先默认是简体中文后续可能会做判断openidList.add(jo);}current_info_list WxUser.batchGetUserInfo(openidList, accessToken);user_info_list.addAll(current_info_list);// 全部放入另一个jsonarray中。} while (total ! counter);// 当累加器没有达到最大值则继续循环如果累加器已经达到最大粉丝数则停止获取用户信息。log.info(user_info_list);
要获得详细的用户信息还需要先行调用获取关注用户的openid列表因为获得用户详细信息的接口需要我们传入这个列表因此是两次接口调用如果还是不太明白就去微信公众开发手册中查看微信公众平台
另外还有微信硬件接口开发的连接地址http://iot.weixin.qq.com/wiki/new/index.html?page3-4-1
在获取到的关注用户详细信息中用户的关注时间是一串数字这时我们就需要进行重新格式化一下同样需要用到循环语句// 将取出的用户列表中的subscribe_time循环格式化IteratorObject iterator user_info_list.iterator();JSONArray userList new JSONArray();// 处理subscribeTime时需要用到的变量JSONObject userJo new JSONObject();Long time 0L;DateFormat df new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String subscribeTime ;while (iterator.hasNext()) {// 取出每个用户并转换为JsonObject便于操作userJo (JSONObject) iterator.next();// 取出用户关注时间转化为Long型time Long.parseLong(userJo.getString(subscribe_time));// 格式化subscribeTime df.format(new Date(time * 1000L));// 放回用户对象中userJo.put(subscribe_time, subscribeTime);// 放回current_info_list中。userList.add(userJo);}return userList;
至此我们通过后台Java语句获得了存储于微信服务器上的关注者基本信息。
接下来是前端的显示工作。
由于如今h5的流行以及spring boot的使用可以将项目压缩为一个jar包直接放到服务器上运行而jsp在打包的过程中会非常麻烦因此我们只能使用jQuery将数据通过动态创建tr标签的方式进行展示
jQuery(document).ready(function() {var url http://localhost:8080//wxgz/wxuser/alluser;$.post(url,function(data, status) {var thArr $(.tr-thead).children();for (var i 0; i data.length; i) {//这里是动态添加tr的过程。if (i 0) {var tr $(tbody).append(tr classgradeC/tr);for (var j 0; j thArr.length; j) {var field $(.tr-thead).children(th:eq( j )).text();tr.append(td eval(data[i]. field) /td);}} else {for (var j 0; j thArr.length; j) {//循环取出th值,指定需要从data[i]中需要取哪个属性。var field $(.tr-thead).children(th:eq( j )).text();$(.gradeX).children(td:eq( j )).text(eval(data[i]. field)); //这条语句会把之前的显示覆盖掉。}}}});
});
以上jQuery代码虽然看似不多但是却让我这个对前端知识不甚了解的人花了好久而且中间也出现过一次关键问题上的错误即后台传过来的结果的确是个数组这个数组中的每个元素包含一个关注者的基本信息每个基本信息是通过键值对的json形式进行编排的关注者与关注者之间是数组元素的关系但是每个关注者中的基本信息并非是数组关系我们并不能通过循环取出而只能通过key进行读取。而th中我们已经写死了表头因此这里我并没有按照后台返回值的自然顺序进行排序而是对th标签中的值进行顺序取再通过这个获得的值在后台返回值中进行关注者信息的取出。
此处应当留意eval“xxxx”的使用。