广告位,联系QQ:910488011
当前位置: 首页 > Q协分析 > webqq2协议分析和qq聊天机器人简单实现(2)
Q协分析
webqq2协议分析和qq聊天机器人简单实现(2)
作者: admin  时间: 2012-05-10  点击: 20247
6.其他接口
获取头像
http://face7.qun.qq.com/cgi/svr/face/getface?cache=0&type=1&fid=0&uin=号码

获取个人信息
http://web2-b.qq.com/api/get_single_info?tuin=qq号码
获取签名
http://web2-b.qq.com/api/get_single_long_nick?tuin=qq号码&t=1288751545148
获取好友列表
http://web2-b.qq.com/api/get_user_friends
r {"vfwebqq":"8f1383ba2239bb7295b100af215274aff1ee4be177b467cbc386fc53ff6606a8e5941aca61d0eb51"}
获取在线的qq好友
http://web2-b.qq.com/channel/get_online_buddies?clientid=9547083&psessionid=8368046764001D636F6E6E7365727665725F77656271714031302E3133332E332E323430000062F000000B86026E040043F60C166D0000000A404F526B7558357668476D000000288F1383BA2239BB7295B100AF215274AFF1EE4BE177B467CBC386FC53FF6606A8E5941ACA61D0EB51&t=1288751548600
获取最近联系人
http://web2-b.qq.com/api/get_recent_contact
r {"vfwebqq":"8f1383ba2239bb7295b100af215274aff1ee4be177b467cbc386fc53ff6606a8e5941aca61d0eb51"}

等等。。。

7.附件这是本人通过java写的一个实例客户端,启动后,处于接受qq消息状态,当收到好友发来的消息时,回返回"然后呢?"。。。。
类似qq聊天机器人吧。。。
1.js是qq密码的加密js文件。

。。

完整代码:
Java代码
1. import java.awt.image.BufferedImage;
2. import java.io.BufferedReader;
3. import java.io.File;
4. import java.io.FileReader;
5. import java.io.InputStream;
6. import java.io.InputStreamReader;
7. import java.net.HttpURLConnection;
8. import java.net.URL;
9. import java.net.URLEncoder;
10. import java.util.Date;
11. import java.util.Random;
12. import java.util.regex.Matcher;
13. import java.util.regex.Pattern;
14.
15. import javax.imageio.ImageIO;
16. import javax.script.ScriptEngine;
17. import javax.script.ScriptEngineManager;
18.
19. import atg.taglib.json.util.JSONArray;
20. import atg.taglib.json.util.JSONException;
21. import atg.taglib.json.util.JSONObject;
22.
23.
24. public class QQClient {
25.
26. private int qq = -1;
27. private String pwd = null;
28.
29. private int clientid = 66933334;//这个可以随便写
30. private String psessionid = "";
31.
32. private String ptwebqq;
33. private String vfwebqq;
34.
35. private String skey;
36.
37. private String refer = "http://web2-b.qq.com/proxy.html";
38.
39. private String cookie = "";
40. //读取消息线程
41. private boolean isrun = false;
42. private Thread poolThread =new PollThread();
43. public Thread getPoolThread() {
44. return poolThread;
45. }
46. /**
47. * 记录日志
48. */
49. private void log(String msg){
50. System.out.println(new Date().toLocaleString()+":"+msg);
51. }
52.
53.
54. public QQClient(int qq, String pwd) {
55. this.qq = qq;
56. this.pwd = pwd;
57. try {
58. boolean rs = checkAndLogin();
59. if(rs){
60. isrun = true;
61. poolThread.start();//开始循环接收
62. log("启动成功");
63. }
64. } catch (Exception e) {
65. e.printStackTrace();
66. }
67. }
68. /*****************华丽的分界线*****************/
69. //测试
70. public static void main(String[] args) throws Exception{
71. QQClient q = new QQClient(qq号码, "123");
72. q.getPoolThread().join();
73. }
74.
75. /*****************华丽的分界线*****************/
76. /**
77. * 给toQQ发送一个msg消息,前提是toQQ是你的好友,要不然他收不到
78. */
79. public boolean sendMsg(int toQQ, String message){
80. try {
81. JSONObject json = new JSONObject();
82. json.put("to", toQQ);//要发送的人
83. json.put("face", 0);
84.
85. JSONArray msg = new JSONArray();
86. msg.add(message);
87. JSONArray font = new JSONArray();
88. font.add("font");
89.
90. JSONObject font1 = new JSONObject().put("name", "宋体").put("size", "10");
91.
92. JSONArray style = new JSONArray();
93. style.add(0);
94. style.add(0);
95. style.add(0);
96. font1.put("style", style);
97. font1.put("color", "000000");
98.
99. font.add(font1);
100. msg.add(font);
101.
102. json.put("content", msg.toString());
103. json.put("msg_id", new Random().nextInt(10000000));
104. json.put("clientid", clientid);
105. json.put("psessionid", psessionid);//需要这个才能发送
106. String sendMsgUrl = "http://web2-b.qq.com/channel/send_msg";
107. String content = json.toString();
108.
109. content = URLEncoder.encode(content);//他要需要编码
110. content ="r="+content;
111. //发送
112. String res = postUrl(sendMsgUrl, content);
113. //不出意外,这是返回结果:{"retcode":0,"result":"ok"}
114. JSONObject rh = new JSONObject(res);
115. if("ok".equals(rh.getString("result"))){
116. return true;
117. }
118. } catch (JSONException e) {
119. e.printStackTrace();
120. }
121.
122. return false;
123. }
124.