您的位置 首页 > 数码极客

手机公众号如何查看粉丝量

现如今基于微信公众号开发的应用服务在我们的日常生活中随处可见,很多从事软件开发的同学或多或少都会接触到与微信公众号开发的相关内容。这篇文章主要是分享如何快速批量获取微信公众号关注者(公众号粉丝)用户数据信息,文章以代码为主题,讲解整个实现过程,方便日后有需要的同学快速接入使用。

一、接口准备

整个过程中我们需要调用微信公众平台官网提供的三个API接口,如下:

微信公众号API

二、接口说明

这里只对接口做简单的基本信息描述,更加详细API描述可参考官网内容。

官网地址:

获取Access token接口描述

获取用户列表接口描述

获取用户基本信息接口描述

三、代码实现

我们把调用微信API的代码统一封装成工具类(如WeC),完整代码如下:

import cn.; import cn.; import cn.; import cn.; import com.; import lombok.ex; import javax.cry; import javax.cry; import javax.cry; import javax.net.; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.URL; import java.; import java.u; import java.u; import java.u; import java.u; /** * 微信小程序工具类 * * @ClassName WeChatUtil * @Date 2021/8/5 16:10 * @Version V1.0 */ @Slf4j public class WeChatUtil { private static final String ACCESS_TOKEN_URL = ";appid=%s&secret=%s"; private static final String GET_USER_LIST_URL = ";; private static final String GET_UNIONID_URL = ";openid=%s&lang=zh_CN"; /** * 获取微信公众号AccessToken * * @param appId 微信公众号APPID * @param secret 微信公众号secret * @return 返回AccessToken */ public static String getAccessToken(String appId, String secret) { String accessToken = ""; String url = S(ACCESS_TOKEN_URL, appId, secret); // 发送请求,返回Json字符串 String jsonStr = sendRequest(url, "GET", null); if (jsonStr)) { // 转成Json对象 获取openid JSONObject obj = JSONU(jsonStr); accessToken = obj.getStr("access_token"); } return accessToken; } /** * 获取公众号用户列表 * * @param accessToken 访问token * @param startOpenId 第一个拉取的OPENID,不填默认从头开始拉取 * @return 返回用户列表数据 */ public static Map<String, Object> getUserList(String accessToken, String startOpenId) { log.info("**********获取微信公众号用户列表数据**********"); Map<String, Object> resultMap = new HashMap<>(); String url = S(GET_USER_LIST_URL, accessToken); if (startOpenId)) { url += ("&next_openid=" + startOpenId); } // 发送请求,返回Json字符串 String jsonStr = sendRequest(url, "GET", null); log.info("**********获取微信公众号用户列表数据返回:" + jsonStr + "**********"); if (jsonStr)) { // 转成Json对象 JSONObject obj = JSONU(jsonStr); Integer total = obj.getInt("total"); Integer count = obj.getInt("count"); String nextOpenId = obj.getStr("next_openid"); JSONObject dataObj = obj.getJSONObject("data"); if (dataObj != null) { JSONArray openidList = da("openid"); if (total != null && total > 0 && count != null && count > 0 && openidList != null && !o()) { log.info("**********当前微信公众号总用户数:" + total + ",本次获取:" + count + ",nextOpenId=" + nextOpenId + "**********"); re("nextOpenId", nextOpenId); re("openidList", o)); } } } return resultMap; } /** * 获取公众号用户详细信息 * * @param accessToken 访问token * @param openId 用户openId * @return 返回用户信息 */ public static Map<String, String> getUserInfo(String accessToken, String openId) { log.info("**********获取微信公众号用户详细信息**********"); Map<String, String> resultMap = new HashMap<>(); String url = S(GET_UNIONID_URL, accessToken, openId); // 发送请求,返回Json字符串 String jsonStr = sendRequest(url, "GET", null); log.info("**********获取微信公众号用户详细信息数据返回:" + jsonStr + "**********"); if (jsonStr)) { // 转成Json对象 JSONObject obj = JSONU(jsonStr); String unionid = obj.getStr("unionid"); String nickname = obj.getStr("nickname"); String headimgurl = obj.getStr("headimgurl"); if (unionid) && S(nickname)) { re("unionid", unionid); re("nickname", nickname); re("headImgUrl", S(headimgurl) ? headimgurl : ""); } } return resultMap; } /** * 发送微信请求 * * @param path 请求地址 * @return 返回请求结果 */ private static String sendRequest(String path, String requestMethod, String outputStr) { try { URL url = new URL(path); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connec(true); connec(true); connec(false); connec(requestMethod); // 当有数据需要提交时 if (null != outputStr) { OutputStream outputStream = connec(); // 注意编码格式,防止中文乱码 ou("UTF-8")); ou(); } // 从输入流读取返回内容 InputStream inputStream = connec(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; StringBuffer buffer = new StringBuffer(); while ((str = bu()) != null) { bu(str); } bu(); in(); in(); connec(); return bu(); } catch (Exception e) { e.printStackTrace(); } return ""; } }

以上是对获取微信公众号用户信息接口的封装,实际中我再根据业务情况调用工具类的方法完成用户数据获取功能。例如,我们想同步拉取所有用户数据,则实现代码大概如下:

String accessToken = WeC("AppId", "Secret"); Map<String, Object> resultMap = WeC(accessToken, null); if () > 0) { while ("nextOpenId") != null && S("nextOpenId").toString())) { startOpenId = re("nextOpenId").toString(); resultMap = WeC(accessToken, startOpenId); if () == 0) { break; } } }

建议:accessToken在项目中最好统一获取刷新,否则容易造成冲突,而相互覆盖失效。获取到的accessToken我们最好缓存到本地,加上时效(目前accessToken的有效时间是7200秒之内),因为接口调用次数是有限制的。

感兴趣的同学,记得点赞[赞]并“关注”[握手]本头条号,一起指间Coding[中国赞]

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“手机公众号如何查看粉丝量,手机如何查看自己的公众号”边界阅读