Java登陸3GQQ以及獲取好友信息與好友聊天的簡單實現

openkk 12年前發布 | 51K 次閱讀 Java Java開發

  主要是通過java實現3GQQ的登陸,抓取好友信息(昵稱,QQ號等等),以及獲取聊天信息等等。 其實3GQQ的登陸以及抓取好友很簡單,只要成功登陸后拿到SID就可以為所欲為了。代碼寫的很粗糙,主要是為了功能實現,還有很多可以優化的地方,把這個放出來,大家可以隨意指點,歡迎吐槽。

          整塊代碼的邏輯不算復雜,因為3GQQ的流程很簡單。大家使用Chrome 或者 firefox打開 wap.3g.qq.com ,點擊QQ打開登陸頁面,然后右鍵查看網頁源碼就知道回事。在程序中使用的到,查看好友分組信息,根據分組獲取該分組下的QQ好友等等。都是通過查看網頁源碼實現的。

            這篇只是講解登陸,下篇開始實現發送消息和獲取消息。

            具體的WebUtils的實現,請移步  http://url.cn/65b9am  (PS:請問怎么復制自己的文章地址連接啊。。。)

 第一步:

    登陸3GQQ,拿到SID。

/**
 * QQ登陸
 */
public static String login(String qq,String password){
    HashMap<String, String> params=new HashMap<String, String>();
    params.put("login_url", "http://pt.3g.qq.com/s?aid=nLogin");
    params.put("sidtype", "1");
    params.put("loginTitle", "手機騰訊網");
    params.put("bid", "0");
    params.put("qq", qq);
    params.put("pwd", password);
    params.put("loginType", "1");
    try {
        String response=WebUtils.doPost(QQ_LOGIN_URL, params, 0, 0);
        int sidIndex=response.indexOf("sid");
        SID=response.substring(sidIndex+4, sidIndex+28);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return SID;
}
第二步,根據SID獲取所有的分組信息,包括分組名,分組序號,該分組的URL鏈接等等。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 獲取所有分組信息
     */
    public static List<Group> getFrendGroup(String sid){
        List<Group> groupList=null;
        try {
            String response=WebUtils.doGet("http://q16.3g.qq.com/g/s?sid="+sid+"&aid=nqqGroup");
            Pattern pattern = Pattern.compile("(?<=border=\"0\"/>).+?(?=<span class=\"no\">)");
            Matcher matcher=pattern.matcher(response);
            groupList=new ArrayList<Group>();
            Group group=null;
            int i=-1;
            while(matcher.find()){
                i++;
                group=new Group();
                group.setGroupUrl("http://q32.3g.qq.com/g/s?sid="+sid+"&aid=nqqGrpF&name="+matcher.group()+"&id="+i+"&gindex="+i+"&pid=1");
                group.setGroupIndex(i);
                group.setGroupName(matcher.group());
                groupList.add(group);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return groupList;
    }
第三步、根據獲取到的分組信息抓取所有的好友QQ號,我這邊是單線程實現的,大家可以考慮使用多線程的方式去分組獲取。
/**
 * 根據好友分組的列表信息獲取所有信息
 * @param groupInfoList
 * @return
 */
public static List<String> getFriendsFromGroup(List<Group> groupInfoList) {
    List<String> friendList=null;
    if(groupInfoList!=null&&groupInfoList.size()!=0){
        friendList=new ArrayList<String>();
        for(Group group:groupInfoList){
            String response;
            try {
                response = WebUtils.doGet(group.getGroupUrl());
            } catch (IOException e) {
                e.printStackTrace();
            }
            Pattern pattern = Pattern.compile("(?<=&amp;u=).+?(?=&amp)");
            Matcher matcher=null;
            int hasNext=-1;
            int pid=0;
            do{
                pid=pid+1;
                response=QQClient.getFrindsByGroupUrl(getGroupUrl(group.getGroupUrl(),pid));
                hasNext=response.indexOf("下頁");
                matcher=pattern.matcher(response);
                while(matcher.find()){
                    String firendQQ=matcher.group();
                    friendList.add(firendQQ);
                }   
            }while(hasNext!=-1);
        }
    }
    return friendList;
}

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!