2019独角兽企业重金招聘Python工程师标准>>>

主要是通过java实现3GQQ的登陆,抓取好友信息(昵称,QQ号等等),以及获取聊天信息等等。

代码的灵感来自 @水之子哈哈 分享的一个php登陆3GQQ的代码。其实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链接等等。

        /*** 获取所有分组信息*/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;}

转载于:https://my.oschina.net/building/blog/74329

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

  1. 浙里办开发票据认证单点登陆、令牌获取用户信息

    浙里办开发票据认证单点登陆.令牌获取用户信息(JAVA后端处理)   最近在搞浙里办开发,周边的人里都没人接触过,以至于自己摸索搞起来比较心累.浙里办单点登陆需要在IRS上走申请,审核流程通过后,和指 ...

  2. java解析xml实例——获取天气信息

    获取xml并解析其中的数据: package getweather.xml;import java.io.IOException; import java.util.HashMap; import j ...

  3. Python 淘宝系列(三): 模拟登陆成功后获取购物车信息

    http://my.oschina.net/u/811744/blog/192604(本文的转载地址) ================================================ ...

  4. python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...

    依然采用IE的F12开发者工具分析抓取到的数据. 关键问题 获取token后,重定向地址的获取 一般网站登录成功后,跳转方式主要有两种:(1)服务器返回的响应头中包含 location header, ...

  5. Facebook实现第三方登陆(WEB)并获取用户信息

    [size=medium][u][b]网站如何实现用FaceBook登录[/b][/u][/size] [color=blue]1:登陆https://developers.facebook.com/ ...

  6. java微信公众号中文乱码,java微信公众平台获取用户信息中文乱码解决办法(第十五课)...

    开发者在开发微信公众平台的时候,往往需要获取关注公众号的基本用户信息,其中信息中含有中文,但是根据微信官方文档,调用接口返回的用户json字符串信息中含有中文乱码,我们先来看看接口调用地址. 参数描述 ...

  7. java短信api获取回执信息,报告(回执)消息

    ## 报告消息 通过HTTP批量推送方式可以接收短信状态报告(SmsReport) ### 请求说明 请求内容为JSON格式,单次请求只有单条报告结果 #### 请求数据格式 ``` "js ...

  8. 微信能从图片获取位置信息,原理其实很简单

    在微信朋友圈上传图片时,点击位置可以自动识别照片拍摄的地理位置 过去我们发送朋友圈时,可以显示自己所在的位置信息,而现在自动读取照片拍摄位置让不少人联想到了图像识别技术.事实上,微信所做的并没有这么复 ...

  9. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

最新文章

  1. Java调用python打包的程序.exe,包括获取exec()中打印的日志,亲测有效
  2. 上大学后男生的两种变化
  3. 最全知识点总结!| 大数据学习路线指南
  4. Missing iOS Distribution signing identity for XXXXX
  5. 计算机视觉领域最好用的开源图像标注工具
  6. PHP字符编码绕过漏洞总结
  7. 韦东山freeRTOS系列教程之【第一章】FreeRTOS概述与体验
  8. c语言取反运算详细步骤,C语言之位运算详解
  9. tp6配置日志 - nginx下配置Thinkphp6网站 - tp6实现简单路由跳转
  10. 大数据可视化是什么意思?
  11. 学习笔记:简谈推挽电路
  12. un4 unreal4 创建路径 曲线 管道 Spline组件 使用方法
  13. 很多时候,你不得不被生活的种种琐事所牵绊
  14. 【V-REP自学笔记(八)】控制youBot抓取和移动物体
  15. Goodnotes如何导出到windows电脑
  16. 对数据库某个字段进行去重
  17. clion 2019去掉灰色参数提示(parameters hints)
  18. ZUCC_操作系统原理实验_实验九 消息队列
  19. 深圳住房公积金制度即将施行 非深户也可缴存
  20. Gscoolink 基石 GSV2011 HDMI接口芯片 HDMI芯片 HDMI2.0芯片

热门文章

  1. Nginx具体配置(三)
  2. CVE-2014-0160:心脏出血(心血)漏洞
  3. 集体封盘,深度回撤,量化私募的高光时刻已不再?
  4. 【技术分享】python web 安全总结
  5. PHP充值怎么打折,教大家如何用PHP语言写一个简单的商品打折小程序!
  6. The file “XXX.app” couldn’t be opened because you don’t have permission to view it.
  7. 干货分享 | 杭州“边缘计算” 研讨会
  8. 那个经常加班的人后来怎么样了?
  9. 【数据库】SQL server 评估期已过。有关如何升级的测试版软件的信息,请访问..
  10. 给VBA窗体增加最大化、最小化窗体按钮