获取QQ好友列表、QQ分组信息、QQ群成员数据接口实现

news/2024/10/31 3:18:59/

完整源码下载

点击下载完整源码
如果对你有用,请给个Star,你的支持,是我最大的动力

1 获取所有QQ

这里主要通过抓包,抓取QQ空间中的数据
记得将访问空间权限改为QQ好友

获取QQ好友列表

 

接口地址:
https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/right/get_entryuinlist.cgi?uin=741047261&fupdate=1&action=1&offset=0&g_tk=847821819&qzonetoken=24dd9cbc92e1ba657addcd982f7f4d0fa1a9ee8ba7b8d52863703a10274f08f9325d1298e5afac11

这里uin 为你的QQ号
offset 偏移量 ,每次增加 50 即可
g_tk是从cookie中获取的 p_skey 再通过算法获得;

java版实现此算法:
 

public class GetTk {public static String getTk(String skey) {int hash = 5381;  for(int i = 0, len = skey.length(); i < len; ++i){  hash += (hash << 5) + (int)(char)skey.charAt(i);  }  return (hash & 0x7fffffff)+"";  }  }

完整版java实现:

package com.pibigstar.qq.main;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import com.pibigstar.qq.domain.User;
import com.pibigstar.qq.utils.GetCookies;
import com.pibigstar.qq.utils.GetTk;
import com.pibigstar.qq.utils.JSONUtil;/*** 获取所有的QQ用户列表* @author pibigstar**/
public class GetAllUser {public static List<User> getAll(Map<String, String> cookies) throws IOException{List<User> allUser = new ArrayList<>();String qq = cookies.get("o_cookie");String pskey = cookies.get("p_skey");String g_tk = GetTk.getTk(pskey);for(int i=0;;) {Document document = Jsoup.connect("https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/right/get_entryuinlist.cgi?uin=741047261&fupdate=1&action=1&offset="+i+"&g_tk="+g_tk).cookies(cookies).header("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36").timeout(10000).ignoreContentType(true).get();String strJson = document.getElementsByTag("body").text().replace("_Callback(", "").replace(");", "");JSONObject jsonObject = new JSONObject(strJson);String jsonData =((JSONObject) jsonObject.get("data")).get("uinlist").toString();List<User> users = JSONUtil.JSONToList(jsonData, User.class);if (users==null||users.size()==0) {break;}allUser.addAll(users);i+=50;}return allUser;}}

2 获得QQ信息
接口地址:
http://cgi.find.qq.com/qqfind/buddy/search_v3

post请求,需要两个参数:
keyword : 你要查询的QQ号码
lwd : g_tk 值

注意:此g_tk 的值为 cookie中 skey 计算得来的 而不是 p_skey

java实现
 

package com.pibigstar.qq.main;import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import com.pibigstar.qq.domain.User;
import com.pibigstar.qq.utils.GetTk;
import com.pibigstar.qq.utils.JSONUtil;public class GetInfo{public static User getInfo(String qq,Map<String, String> cookies) {User user = new User();Map<String, String> data = new HashMap<>();//注意这里,获得信息是用的skey 而获得全部好友使用的为p_skeyString skey = cookies.get("skey");String g_tk = GetTk.getTk(skey);data.put("keyword", qq);data.put("ldw", g_tk);Document document;try {document = Jsoup.connect("http://cgi.find.qq.com/qqfind/buddy/search_v3").cookies(cookies).header("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36").ignoreContentType(true).data(data).timeout(10000).post();String allJson = document.getElementsByTag("body").text();System.out.println(allJson);JSONObject result = (JSONObject) new JSONObject(allJson).get("result");JSONObject buddy = (JSONObject) result.get("buddy");JSONArray jsonArray = buddy.getJSONArray("info_list");JSONObject dataJson = (JSONObject) jsonArray.get(0);user = JSONUtil.jSONToObject(dataJson.toString(), User.class);JSONObject birthdayJson = (JSONObject) dataJson.get("birthday");String year = birthdayJson.get("year").toString();String month = birthdayJson.get("month").toString();String day = birthdayJson.get("day").toString();String birthday = year+"-"+month+"-"+day;user.setBirthday(birthday);Calendar calendar = Calendar.getInstance();int now = calendar.get(Calendar.YEAR);if (year!=null&&year.length()>0) {int age = now - Integer.parseInt(year);user.setAge(age);}} catch (IOException e) {e.printStackTrace();}return user;}}

把user的bean也放一下

package com.pibigstar.qq.domain;public class User {private String data;//QQ号private String label;//用户名/备注名private String nick;//昵称private String gender;//性别 1为男  2为女private String city;//城市private String country;//国家private String lnick;//个性签名private String personal;//个人说明private String college;//学校private String birthday;//生日private String email;//邮箱private String phone;//手机private String uin;//qq号private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getUin() {return uin;}public void setUin(String uin) {this.uin = uin;}public String getData() {return data;}public void setData(String data) {this.data = data;}public String getLabel() {return label;}public void setLabel(String label) {this.label = label;}public String getNick() {return nick;}public void setNick(String nick) {this.nick = nick;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}public String getLnick() {return lnick;}public void setLnick(String lnick) {this.lnick = lnick;}public String getPersonal() {return personal;}public void setPersonal(String personal) {this.personal = personal;}public String getCollege() {return college;}public void setCollege(String college) {this.college = college;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "User [data=" + data + ", label=" + label + ", nick=" + nick + ", gender=" + gender + ", city=" + city+ ", country=" + country + ", lnick=" + lnick + ", personal=" + personal + ", college=" + college+ ", birthday=" + birthday + ", email=" + email + ", phone=" + phone + "]";}}

以上仅供学习参考。

QQ好友列表获取

QQ好友列表获取软件   qq群交流:573714756

 


http://www.ppmy.cn/news/617545.html

相关文章

PCQQ official算法逆向

在分析pcqq协议时&#xff0c;0836包里有一个official算法&#xff0c;经多次测试发现&#xff0c;如果这个算法没有或者错误&#xff0c;会导致账号被冻结或屏蔽。为了解决这个问题&#xff0c;我们要逆向这个算法 1.用od调试找到这个算法的汇编代码为 mov eax, [ebp0Ch] mov…

多元回归梯度下降算法实现(SGD优化)(数据集随机生成)

多元回归梯度下降算法实现&#xff08;SGD优化&#xff09;&#xff08;数据集随机生成&#xff09; 下面就是代码。其实博主做了很多实验&#xff0c;实验效果好不好&#xff0c;跟数据集的质量&#xff0c;跟学习率的选择&#xff0c;SGD 优化器batch的选择都很重要。 下面…

gitlab 配置QQ邮箱

gitlab 配置QQ邮箱 gitlab版本官方文档邮箱厂商需要修改的配置文件修改的配置内容调试控制台正确测试结果[rootxxxxxxxxxxxxxx gitlab]# gitlab-rails consoleGitLab: 11.2.3 (06cbee3) GitLab Shell: 8.1.1 postgresql: 9.6.8 gitlab版本 我安装的是ee版11.2.3&#xff0c;跟…

qq协议 0825 和 0836 udp 登录包解析

qq协议 0825 和 0836 udp 登录包解析 参考使用工具:概念解释udp报文解析0825 udp 发送包报文原始数据:解析 0825 返回包原始数据解析 0836 发送包原始数据解析 参考 0825包参考: https://www.cnblogs.com/mRRRR/p/5288931.html 虽然是2016年的, 但是里面的结构大体还是不变 参…

查询QQ会员账号信息API接口

接口地址&#xff1a; https://api.hackeus.cn/api/qqvip 请求协议&#xff1a; HTTP、HTTPS 请求方式&#xff1a; GET/POST 返回格式&#xff1a; JSON 请求示例&#xff1a; https://api.hackeus.cn/api/qqvip?api_key您的apiKey&qq598765401&skeyHackApi 请求…

ros 如何禁止qq

ros是个非常好用的路由设备&#xff0c;我用它实现了公司的带宽管理&#xff0c;有效保障了视频会议和业务应用的带宽。但是ros没有完善的应用管理功能&#xff0c;一直想用ros实现禁止qq的功能&#xff0c;网上查了查&#xff0c;内容很乱&#xff0c;于是自己动手抓包试验。我…

【matlab之QQ图】

文章目录 1.QQ图原理&#xff1a;2.效果图&#xff1a;3.代码: 1.QQ图原理&#xff1a; 数据中一串数目的每个点都是该数据的某分位点&#xff0c;把这些点的&#xff08;称为样本分位数点&#xff09;和相应的理论上的分位数配对做出散点图&#xff0c;如果该数据服从正态分布…

Shell 脚本配置发送QQ邮件

文章目录 方法一1进入QQ邮箱网页界面客服端2用root用户&#xff0c;执行脚本 方法二&#xff1a; 方法一 1进入QQ邮箱网页界面客服端 ①点击设置 》点击账户 ② 开启SMTP服务 》生成授权码 2用root用户&#xff0c;执行脚本 #!/bin/bash. /etc/init.d/functionsif [ $# -…