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

           主要是經過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("(?<=&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;
	}
 
相關文章
相關標籤/搜索