日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

微信公众号关注用户的信息拉取

發(fā)布時(shí)間:2025/3/12 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众号关注用户的信息拉取 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

微信關(guān)注用戶(hù)的詳細(xì)信息均保存在騰訊的微信服務(wù)器內(nèi)。因此,若想獲得公眾號(hào)的關(guān)注用戶(hù)的詳細(xì)信息,必須通過(guò)相應(yīng)的接口進(jìn)行調(diào)用。而接口規(guī)定一次拉取只能拉取一萬(wàn)條openid,當(dāng)用戶(hù)較多時(shí)我們需要循環(huán)調(diào)用接口進(jìn)行拉取操作。

首先我們需要獲得accesstoken,這是微信接口調(diào)用憑證。

// 獲取微信access_tokenString accessToken = WxBase.getToken();// 跨域請(qǐng)求需在服務(wù)器端設(shè)置響應(yīng)頭response.setHeader("Access-Control-Allow-origin", "*");JSONArray user_info_list = new JSONArray();// 拉取完全部用戶(hù)之后存儲(chǔ),也是本方法的最終返回對(duì)象。JSONArray current_info_list = new JSONArray();// 每次獲取之后存儲(chǔ)的單元JSONArray openidList = new JSONArray();// 作為批量獲取用戶(hù)信息方法batchGetUserInfo的參數(shù)String nextOpenId = "";int counter = 0;int total = 0;int count = 0;do {// 利用do-while循環(huán)可以解決粉絲數(shù)超過(guò)一萬(wàn)或者不足一萬(wàn)的情況,避免代碼冗余。// 取openid列表JSONObject userJsonObject = WxUser.getUserList(accessToken, nextOpenId);// total為全部用戶(hù),count為本次拉取的用戶(hù)條數(shù)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"));Iterator<Object> 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:暫時(shí)先默認(rèn)是簡(jiǎn)體中文,后續(xù)可能會(huì)做判斷openidList.add(jo);}current_info_list = WxUser.batchGetUserInfo(openidList, accessToken);user_info_list.addAll(current_info_list);// 全部放入另一個(gè)jsonarray中。} while (total != counter);// 當(dāng)累加器沒(méi)有達(dá)到最大值則繼續(xù)循環(huán),如果累加器已經(jīng)達(dá)到最大粉絲數(shù),則停止獲取用戶(hù)信息。log.info(user_info_list);

要獲得詳細(xì)的用戶(hù)信息,還需要先行調(diào)用獲取關(guān)注用戶(hù)的openid列表,因?yàn)楂@得用戶(hù)詳細(xì)信息的接口需要我們傳入這個(gè)列表,因此是兩次接口調(diào)用,如果還是不太明白,就去微信公眾開(kāi)發(fā)手冊(cè)中查看:微信公眾平臺(tái)

另外還有微信硬件接口開(kāi)發(fā)的連接地址:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-1

在獲取到的關(guān)注用戶(hù)詳細(xì)信息中,用戶(hù)的關(guān)注時(shí)間是一串?dāng)?shù)字,這時(shí)我們就需要進(jìn)行重新格式化一下,同樣需要用到循環(huán)語(yǔ)句:

????????// 將取出的用戶(hù)列表中的subscribe_time循環(huán)格式化Iterator<Object> iterator = user_info_list.iterator();JSONArray userList = new JSONArray();// 處理subscribeTime時(shí)需要用到的變量JSONObject userJo = new JSONObject();Long time = 0L;DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String subscribeTime = "";while (iterator.hasNext()) {// 取出每個(gè)用戶(hù)并轉(zhuǎn)換為JsonObject便于操作userJo = (JSONObject) iterator.next();// 取出用戶(hù)關(guān)注時(shí)間轉(zhuǎn)化為L(zhǎng)ong型time = Long.parseLong(userJo.getString("subscribe_time"));// 格式化subscribeTime = df.format(new Date(time * 1000L));// 放回用戶(hù)對(duì)象中userJo.put("subscribe_time", subscribeTime);// 放回current_info_list中。userList.add(userJo);}return userList;

至此,我們通過(guò)后臺(tái)Java語(yǔ)句獲得了存儲(chǔ)于微信服務(wù)器上的關(guān)注者基本信息。

接下來(lái)是前端的顯示工作。

由于如今h5的流行,以及spring boot的使用,可以將項(xiàng)目壓縮為一個(gè)jar包直接放到服務(wù)器上運(yùn)行,而jsp在打包的過(guò)程中會(huì)非常麻煩,因此我們只能使用jQuery將數(shù)據(jù)通過(guò)動(dòng)態(tài)創(chuàng)建<tr>標(biāo)簽的方式進(jìn)行展示:

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++) {//這里是動(dòng)態(tài)添加tr的過(guò)程。if (i > 0) {var tr = $("tbody").append("<tr class='gradeC'></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++) {//循環(huán)取出th值,指定需要從data[i]中需要取哪個(gè)屬性。var field = $(".tr-thead").children("th:eq(" + j + ")").text();$(".gradeX").children("td:eq(" + j + ")").text(eval("data[i]." + field)); //這條語(yǔ)句會(huì)把之前的顯示覆蓋掉。}}}}); });

以上jQuery代碼雖然看似不多,但是卻讓我這個(gè)對(duì)前端知識(shí)不甚了解的人花了好久,而且中間也出現(xiàn)過(guò)一次關(guān)鍵問(wèn)題上的錯(cuò)誤,即后臺(tái)傳過(guò)來(lái)的結(jié)果的確是個(gè)數(shù)組,這個(gè)數(shù)組中的每個(gè)元素包含一個(gè)關(guān)注者的基本信息,每個(gè)基本信息是通過(guò)鍵值對(duì)的json形式進(jìn)行編排的,關(guān)注者與關(guān)注者之間是數(shù)組元素的關(guān)系,但是每個(gè)關(guān)注者中的基本信息并非是數(shù)組關(guān)系,我們并不能通過(guò)循環(huán)取出,而只能通過(guò)key進(jìn)行讀取。而<th>中我們已經(jīng)寫(xiě)死了表頭,因此這里我并沒(méi)有按照后臺(tái)返回值的自然順序進(jìn)行排序,而是對(duì)<th>標(biāo)簽中的值進(jìn)行順序取,再通過(guò)這個(gè)獲得的值在后臺(tái)返回值中進(jìn)行關(guān)注者信息的取出。

此處應(yīng)當(dāng)留意eval(“xxxx”)的使用。

總結(jié)

以上是生活随笔為你收集整理的微信公众号关注用户的信息拉取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。