webqq2協議分析和qq聊天機器人簡單實現

經過webqq接口,能夠實現發送qq消息接收qq消息等,這樣,想實現一個qq聊天機器人,就不是什麼難事情了了,下面開始一步步作。javascript

1。首先調用http://ptlogin2.qq.com/check?appid=1003903&uin=qq號碼,來獲取該qq號碼驗證碼之類的信息。看返回結果決定是否是要輸入驗證碼登錄。
若是返回:ptui_checkVC('1','95ab7db15e5ab17f50f25d33598259e83ccc098c4af2f8a4');須要輸入驗證碼,這裏須要記住這個長字符串(獲取驗證碼圖片用)以及cookie
若是返回:ptui_checkVC('0','!MPG');不須要輸入驗證碼,驗證碼值用!MPG代替。可能爲其餘字符串,可是以感嘆號開頭
若是須要輸入驗證碼:則調用
http://captcha.qq.com/getimage?aid=1003903&&uin=qq號碼&vc_type=95ab7db15e5ab17f50f25d33598259e83ccc098c4af2f8a4
獲取驗證碼圖片。。。
2。開始登錄,在登錄以前,須要將密碼加密,tx的加密方法很複雜,不過還好,弄到了他的js文件,而後經過java的ScriptEnginee來執行這個js來獲取加密後的字符串。。。

代碼:html

ScriptEngineManager m = new ScriptEngineManager();
            ScriptEngine se = m.getEngineByName("javascript");
            se.eval(new FileReader(new File("1.js")));
            Object t = se.eval("md5(md5_3(\""+p+"\")+\""+code.toUpperCase()+"\");");
            return t.toString();

如今調用登錄接口,以得到相關的cookie。注意Referer。這個必定得加上,不然不成功:Referer : http://web2-b.qq.com/proxy.html
http://ptlogin2.qq.com/login?u=qq號碼&p=密碼和驗證碼加密後的字符串&verifycode=驗證碼&remember_uin=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Fstrong%

3Dtrue&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert

登錄成功後,要記住返回的cookie值。
如其中ptwebqq,skey等。

3。這尚未完成,還須要再次登陸,這個好像就是qq聊天接口登錄了(剛纔的登錄能夠理解爲登錄qq網站),只有此次登錄,纔算真正登錄qq,這個時候,若是你qq已經登錄,會把你的qq踢下線,並且這次登錄纔算上線時間。
地址:http://web2-b.qq.com/channel/login,把一個數據結構post給它就夠了
r=%7B%22status%22%3A%22%22%2C%22ptwebqq%22%3A%22{1}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{2}%22%7D
其中{1}是ptwebqq,在第2步登錄後cookie返回的,{2}clientId,本身隨便定義一個數字吧。

若是成功:
會返回一個json數據結構:
{"retcode":0,"result":

{"uin":qq號碼,"mode":"master","index":1055,"port":38138,"status":"online","vfwebqq":"f72a8722c988252aef4e0268f1d26a3d647f06f6ff353a5c6cdaaa49abb2fcdf0cee2d8d64373ac2","psessionid":"

8368046764001D636F6E6E7365727665725F77656271714031302E3133332E332E3234300000235100000B79026E040043F60C166D0000000A404746365677767041316D00000028F72A8722C988252AEF4E0268F1D26A3D647F06F6

FF353A5C6CDAAA49ABB2FCDF0CEE2D8D64373AC2"}}
記住其中的psessionid。後面在發送消息和獲取qq消息都須要這個參數。

4。發送一個qq消息給好友
地址:http://web2-b.qq.com/channel/send_msg
一樣是post:r={"to":qq號碼,"face":0,"content":"[\"23\",[\"font\",{\"name\":\"宋體\",\"size\":\"10\",\"style\":

[0,0,0],\"color\":\"000000

\"}]]","msg_id":7780001,"clientid":"15778909","psessionid":"8368046764001D636F6E6E7365727665725F77656271714031302E3133332E332E3234300000326F00000B71026E040043F60C166D0000000A4042725946

34574676716D00000028E7D8E44718236B0C17365E824FD3817ED2EF6C879FEE88D07EA92D030CEA72EE8E59309863128A3E"}
{"retcode":0,"result":"ok"}
須要把這個json UrlEncode一下再發送,不然會返回錯誤。

發送成功返回:{"retcode":0,"result":"ok"}

5。循環獲取消息接口:
經過這個接口你能夠實時的不間斷的獲取最新的消息。
http://web2-b.qq.com/channel/poll?

clientid=15778909&psessionid=8368046764001D636F6E6E7365727665725F77656271714031302E3133332E332E3234300000326F00000B71026E040043F60C166D0000000A404272594634574676716D00000028E7D8E447182

36B0C17365E824FD3817ED2EF6C879FEE88D07EA92D030CEA72EE8E59309863128A3E&t=1288591644319

返回格式:java

{"retcode":0,"result":[{"poll_type":"message","value":{"msg_id":9712,"from_uin":qq號碼,"to_uin":qq號碼,"msg_id2":217523,"msg_type":9,"reply_ip":2887452740,"time":1288591740,"content":[["font",{"size":9,"color":"000000","style":

[0,0,0],"name":"\u5B8B\u4F53"}],"hello world"],"raw_content":"hello world"}}]}
其中的poll_type表示消息格式,message就是普通的qq消息,能夠看到發送人,發送時間,以及消息的內容等。
此接口很特殊,在實現時,須要循環不間斷調用,若是沒有消息返回,該接口會一直等待到,有消息,讀取完後要當即再調用該接口。



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"}web


等等。。。json

相關文章
相關標籤/搜索