zoukankan      html  css  js  c++  java
  • 获取QQ群中的所有群友QQ

    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"+"	"+"role"+"	"+"flag"+"	"+"g"+"	"+"join_time"+"	"+"last_speak_time"+"	"+"lv"+"	"+"nick"+"	"+"card"+"	"+"qage"+"	"+"tags"+"	"+"rm"+"	"+"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")+"	"+
                                qq.getString("role")+"	"+
                                qq.getString("flag")+"	"+
                                qq.getString("g")+"	"+
                                TimeStamp2Date(qq.getString("join_time"), "yyyy-MM-dd")+"	"+
                                TimeStamp2Date(qq.getString("last_speak_time"), "yyyy-MM-dd")+"	"+
                                qq.getString("lv")+"	"+
                                qq.getString("nick")+"	"+
                                qq.getString("card")+"	"+
                                qq.getString("qage")+"	"+
                                qq.getString("tags")+"	"+
                                qq.getString("rm")+"	"+
                                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
     
  • 相关阅读:
    Golang的select多路复用以及channel使用实践
    golang-goroutine和channel
    golang类型转换小总结
    golang之终端操作,文件操作
    golang之结构体和方法
    golang基础之三-字符串,时间,流程控制,函数
    Linux Keepliaved安装
    Git打标签、还原到具体标签版本代码
    Git复制已有分支到新分支开发
    记一次内存分析
  • 原文地址:https://www.cnblogs.com/java-h/p/11344428.html
Copyright © 2011-2022 走看看