package com.jm.mail.tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List; import com.jm.hsw.tools.File_Tools; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class Gain_QQ { /**
* POST
**/
public static String sendPostRequest(String requestUrl, String payload,String Cookie) {
StringBuffer jsonString = new StringBuffer();
HttpURLConnection connection=null;
BufferedReader br=null;
try {
URL url = new URL(requestUrl);
connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST"); connection.setRequestProperty("user-agent", "Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; Trident/5.0)");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
connection.setRequestProperty("Cookie",Cookie);
connection.setRequestProperty("origin","https://qun.qq.com");
connection.setRequestProperty("referer","https://qun.qq.com/member.html"); connection.setReadTimeout(300000);
connection.setConnectTimeout(300000); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
writer.write(payload);
writer.close();
br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line;
while ((line = br.readLine()) != null) {
jsonString.append(line);
}
br.close();
connection.disconnect(); }catch(Exception e){
e.printStackTrace();
br = new BufferedReader(new InputStreamReader(connection.getErrorStream()) );
String line;
try {
while ((line = br.readLine()) != null) {
jsonString.append(line);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
connection.disconnect();
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return jsonString.toString();
} /**
* 将Unix时间戳转换成指定格式日期
* @param timestampString Unix时间戳
* @param formats 格式("yyyy-MM-dd HH:mm:ss")
* @return
*/
public static String TimeStamp2Date(String timestampString, String formats){
Long timestamp = Long.parseLong(timestampString)*1000;
String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp));
return date;
} /**
* 获取数据并处理数据
* @param qq_name QQ群的名字
* @param size qq群总人数
* @param gc qq群号
* @param bkn 我也不知道是啥
* @param Cookie 进入https://qun.qq.com/member.html#gid=224392232,按F12 点击网络,点开请求"http://qun.qq.com/cgi-bin/qun_mgr/search_group_members" 获取里面的参数和Cookie
* @return QQ数据
* @throws Exception
*/
public static List<String> processing(String qq_name,int size,String gc,String bkn,String Cookie) throws Exception{
//存放每个QQ详细数据
List<String> olist = new ArrayList<String>();
olist.add("uin"+"\t"+"role"+"\t"+"flag"+"\t"+"g"+"\t"+"join_time"+"\t"+"last_speak_time"+"\t"+"lv"+"\t"+"nick"+"\t"+"card"+"\t"+"qage"+"\t"+"tags"+"\t"+"rm"+"\t"+"mailbox");
//控制偏移量
int i = 0;
//控制循环次数
int j = 0;
//控制是否跳出循环的boolean
boolean judge = true;
while(judge){
int st = i; //from(开始)
int end = i+20; //end(结束)
System.out.println(st+"---"+end+"---"+j+"---"+size/20);
String requestUrl = "http://qun.qq.com/cgi-bin/qun_mgr/search_group_members?gc="+gc+"&st="+st+"&end="+end+"&sort=0&bkn="+bkn;
//把获取的参数转换成JSON字符串并清洗成可使用数据
JSONObject json_all = JSONObject.fromObject(sendPostRequest(requestUrl, "",Cookie));
//获取JSON串中的mems数组
if(json_all.get("mems")!=null){
String qq_all = json_all.get("mems").toString(); //把数组导入到JSONArray中方便数据处理
JSONArray json_qq = JSONArray.fromObject(qq_all);
for(int le = 0 ; le <json_qq.size();le++){
JSONObject qq = JSONObject.fromObject(json_qq.get(le));
//把每个QQ转换成一条数据并存入List集合
String all = qq.getString("uin")+"\t"+
qq.getString("role")+"\t"+
qq.getString("flag")+"\t"+
qq.getString("g")+"\t"+
TimeStamp2Date(qq.getString("join_time"), "yyyy-MM-dd")+"\t"+
TimeStamp2Date(qq.getString("last_speak_time"), "yyyy-MM-dd")+"\t"+
qq.getString("lv")+"\t"+
qq.getString("nick")+"\t"+
qq.getString("card")+"\t"+
qq.getString("qage")+"\t"+
qq.getString("tags")+"\t"+
qq.getString("rm")+"\t"+
qq.getString("uin")+"@qq.com"; olist.add(all);
}
}
j++; //控制循环次数
if(j==size/21){
judge = false; //循环完毕后跳出循环
}else{
i+=21;
} System.out.println("已扫描人数:"+i);
Thread.sleep(1500);
}
return olist;
} public static void main(String[] args) throws InterruptedException {
//QQ群的名字
String qq_name = "淘宝优惠券购物21(795017653) ";
//qq群总人数
int size = 1975;
//qq群号
String gc = "795017653";
//我也不知道是啥,反正一定要填
String bkn = "965542128";
//网址Cookie
String Cookie = "pgv_pvid=8083393588; pgv_pvi=5516345344; RK=mgZFXvKpRv; ptcz=25714188ed89e451a67f74be787ccf060a153d84fc8348cff2a6d79ed1c821eb; ts_last=qun.qq.com/member.html; ts_uid=6204078620; ts_refer=xui.ptlogin2.qq.com/cgi-bin/xlogin; pgv_info=ssid=s928689886; pgv_si=s3042974720; _qpsvr_localtk=0.17590207084640497; ptisp=ctc; p_uin=o3385341634; pt4_token=wjsRFVOzK-kGq7B3P2B54XADw5Ik6jXlt6J**zw3rcc_; p_skey=jChYYIB*ibH--AKwTf1846Vv5VxZV1aNd17yRM8u7so_; traceid=9a4df933cb; uin=o3385341634; skey=@zFiVy8rCf";
List<String> olist;
try {
olist = processing(qq_name, size, gc, bkn, Cookie);
if(olist.size()>0){
File_Tools.add_File_list("D:\\结果\\"+qq_name+".txt", olist);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

获取这些信息的网站:https://qun.qq.com/member.html#gid=QQ群号

然后F12打开无障碍环境属性

点击网络 找到

请求网址:https://qun.qq.com/cgi-bin/qun_mgr/search_group_members
请求方法:POST
 

获取QQ群中的所有群友QQ的更多相关文章

  1. 在Spark集群中,集群的节点个数、RDD分区个数、​cpu内核个数三者与并行度的关系

    梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数.Executor数.core数目的关系. 输入可能以多个文件的形式存储在H ...

  2. 第四讲 smart qq 获取联系人信息 ,分组 好友 群聊

    首先从post一下  http://s.web2.qq.com/api/get_user_friends2 这个链接获取分组categories ,好友信息 friends,info. string ...

  3. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  4. 十代雅阁广东车友群,雅阁广州车友群,深圳雅阁车友群,雅阁微信群、雅阁车友群、十代雅阁交流微信QQ群

    最近一直在关注第十代雅阁,不论是普通汽油版本还是油电混动版本都很不错,在网上看到很多评测文章和视频 后续都会整理发布到微信群中. 由于论坛发帖,博客发文都不是很方便,为了及时沟通,先创建了微信群,方便 ...

  5. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  6. zookeeper动态添加/删除集群中实例(zookeeper 3.6)

    一,用来作为demo操作的zookeeper集群中的实例: 机器名:zk1 server.1=172.18.1.1:2888:3888 机器名:zk2 server.2=172.18.1.2:2888 ...

  7. ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...

  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  9. 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片

    说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...

随机推荐

  1. Fleck WebSocket使用

    Fleck WebSocket使用 作为笔记存储. 最近公司有这方面的使用需求.在网上查了一些资料后.得到了想要的结果.以下记录摘抄至网上资料. 1.首先,服务端.项目NuGet直接引用Fleck类库 ...

  2. 树莓派4B踩坑指南 - (6)安装常用软件及相关设置

    安装软件 安装LibreOffice中文包 sudo apt-get install libreoffice-l10n-zh-cn sudo reboot 安装codeblocks并汉化: sudo ...

  3. linux压缩包管理

    1.gzip 文件 ----> .gz格式的压缩包 2.bzip2 文件 ----> .bz2格式的压缩包 3.tar -- 不使用z/j参数 该命令只能对文件或目录打包 参数: c -- ...

  4. 三 Spring和DI(面试)

      IOC:控制反转,将对象的创建权反转给了Spring DI:依赖注入,前提要有IOC的环境.Spring管理这个类的时候会将类的依赖的属性,在xml注入(设置)进来. 面向对象的时候,类和类之间的 ...

  5. Cortex-M3学习小结

  6. PostgreSQL存取jsonb

    从PostgreSQL 9.3开始,json就成了postgres里的一种数据类型,也就是和varchar.int一样,我们表里的一个字段的类型可以为json了. 与此同时,postgres还提供了j ...

  7. linux命令系列-mv(移动-重命名)

    #常用命令选项 默认覆盖 -n 不覆盖 -i 交互 -f 不交互直接覆盖 -u 只移动新的文件 -v 显示详细信息 #移动覆盖3个文件到/tmp目录 mv a.txt b.txt c.txt /tmp ...

  8. yum软件仓库常用命令

    一.PRM简化安装软件的复杂度 安装软件的命令格式 prm -ivh filename.rpm 升级软件的命令格式 prm -Uvh filename.rpm 卸载软件的命令格式 prm -e fil ...

  9. 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下

    1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...

  10. Java 在Excel单元格中应用一种/多种字体样式

    在Excel表格中,设置单元格字体样式时,可以对单元格内的所有字符应用同一样式,即获取指定单元,应用样式即可:另外也可以对单元格内的不同字符内容应用不同字体样式,即获取单元格中的字符位置,应用样式:本 ...