Java登陆3GQQ以及获取好友信息与好友聊天的简单实现

openkk 12年前

  主要是通过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;  }