批量获取微信公众号的粉丝信息,抓取速度提升87%

有一项目,需要刷新最新的用户信息之后再给部分用户推送消息,之前选择微信的get接口,使用用户openid获取单个用户的信息,然后比对入库,一万个粉丝大概需要40多分钟

比较被动

然后使用批量获取,速度得到极大提升

先来学习一下接口怎么用

批量获取用户基本信息

http请求方式: POST https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN

POST数据示例

批量获取微信公众号的粉丝信息,抓取速度提升87%

这里吐槽一下,参数不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,而是数组,返回值也不是表准json

这就要多些好几行代码来包装一下了

首先需要在数据库里拿出一部分用户,然后取openid

 List<CustomerWechat> customerWechats = cwd.get100StartById(session, startId);        

 如果返回值不是空的话

就进行处理

 JSONObject[] myList = new JSONObject[customerWechats.size()];
            int i = 0;
            for (CustomerWechat cw : customerWechats) {
                JSONObject jb = new JSONObject();
                jb.put("openid", customerWechats.get(i).getOpenid());
                jb.put("lang", "zh_CN");
                myList[i] = jb;
                i++;
            }

 

把数据再组合一下

 JSONObject jsonObject = new JSONObject();            
            jsonObject.put("user_list", myList);

 

然后再从数据库里把接口地址拿出来

ApiWechat api = awd.getApiGetcustomerBatch(session);

 

然后把token加上

  String url = api.getUrl().replace("ACCESS_TOKEN", at.getAccess_token());

 然后

发器post等着返回数据就完事儿了

 // 通过HttpPost来发送post请求
            HttpPost httpPost = new HttpPost(url);
            String jsonString = jsonObject.toJSONString();
            StringEntity entityStr = new StringEntity(jsonString, "UTF-8");
            httpPost.setEntity(entityStr);
            CloseableHttpResponse response = null;
            CloseableHttpClient httpClient = HttpClients.createDefault();
            response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            String resp = "";
            resp = EntityUtils.toString(entity, "UTF-8");
            EntityUtils.consume(entity);//释放资源

 

然后

把返回值没用的数据都删掉

批量获取微信公众号的粉丝信息,抓取速度提升87%

里边的数据就不管了,都是大家最爱的json

批量获取微信公众号的粉丝信息,抓取速度提升87%

 

 

 

   String resArray = resp.substring(resp.indexOf("["), resp.length() - 1);

 最后再把处理之后的数据,也就是表准的json了,转换为对象列表,就行了

  List<CustomerWechat> customerList = JSONObject.parseArray(resArray, CustomerWechat.class);   

 

上一篇:Cf #Round 87 div2


下一篇:PAT A1038 Recover the Smallest Number (30分)