主要是經過java實現3GQQ的登錄,抓取好友信息(暱稱,QQ號等等),以及獲取聊天信息等等。 php
代碼的靈感來自 @水之子哈哈 分享的一個php登錄3GQQ的代碼。其實3GQQ的登錄以及抓取好友很簡單,只要成功登錄後拿到SID就能夠隨心所欲了。代碼寫的很粗糙,主要是爲了功能實現,還有不少能夠優化的地方,把這個放出來,你們能夠隨意指點,歡迎吐槽。java
整塊代碼的邏輯不算複雜,由於3GQQ的流程很簡單。你們使用Chrome 或者 firefox打開 wap.3g.qq.com ,點擊QQ打開登錄頁面,而後右鍵查看網頁源碼就知道回事。在程序中使用的到,查看好友分組信息,根據分組獲取該分組下的QQ好友等等。都是經過查看網頁源碼實現的。多線程
這篇只是講解登錄,下篇開始實現發送消息和獲取消息。優化
具體的WebUtils的實現,請移步 http://url.cn/65b9am (PS:請問怎麼複製本身的文章地址鏈接啊。。。)url
第一步:spa
登錄3GQQ,拿到SID。.net
/** * 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連接等等。
/** * 獲取全部分組信息 */ 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號,我這邊是單線程實現的,你們能夠考慮使用多線程的方式去分組獲取。firefox
/** * 根據好友分組的列表信息獲取全部信息 * @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("(?<=&u=).+?(?=&)"); 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; }