新浪微博私信,即時聊天介面研究

weixin_34198881發表於2019-01-08

由於要寫個chrome外掛來進行發發私信什麼的 你懂得,,,,


由於是個外掛,就不要去研究模擬登陸啦,cookie問題不用考慮,可以用ajax任意訪問weibo的所有地址


但是如果兩人從來沒有交流過,那麼第一次發私信是要過驗證碼的


但是有種情況不需要,那就是用新浪的im,就是右下角的即時聊天的那個玩意,研究發現,如果需要呼叫者個即時聊天的介面,需要如下幾個步驟


第一步: 握手 handleshake

這是im的根地址,看前邊的數字,估計有很多伺服器,我們們隨便選一個,就它了

http://11.79.web1.im.weibo.com/im

ajax,GET傳送內容到該地址

 

  1. jsonp: callback
  2. message:
    [{"version":"1.0","minimumVersion":"0.9","channel":"/meta/handshake","supportedConnectionTypes":{"0":"callback-polling"},"id":1}]

由於新浪是用script來模擬一個get來跨域請求這個介面的,所以每次返回的內容,自動將返回內容對你設定的回撥函式進行執行,我們在ajax裡只要eval一下即可,比如:

 

callback([{"id":"1","minimumVersion":"1.0","supportedConnectionTypes":["websocket","callback-polling","long-polling"],"successful":true,"channel":"/meta/handshake","ext":{"timesync":{"ts":1377155460536,"tc":1377155466453,"p":0,"a":5917},"ack":true},"clientId":"1n8zz1g60ncoj1hxuumbuutbw9f5ri","version":"1.0"}])


我們只要事先定義一個callback函式即可,這一步,我們得到一個重要的引數,那就是clientId,儲存下來。

ps:看上邊返回的資料,還支援websocket,但是不知道具體的協議是什麼,沒法呼叫


第二步:連線 connect

要想傳送訊息,還需要連線

ajax,GET傳送如下內容到根地址


 

  1. jsonp: callback
  2. message:
    [{"channel":"/meta/connect","connectionType":"callback-polling","id":3,"clientId":"1n8zz1g60ncoj1hxuumbuutbw9f5ri"}]

注意callback的用法上邊講過了,上邊的資料,注意那個clientId,是第一步的握手得到的

 

連線之後的返回內容,基本沒啥用,如下:

callback([{"id":"3","successful":true,"advice":{"interval":0,"reconnect":"retry","timeout":180000},"channel":"/meta/connect"}])

告訴你是否成功,等等


第三步:註冊 subscribe

也可以翻譯成出席,等等,仁者見仁

ajax,GET傳送如下資料

 

  1. jsonp: callback
  2. message:
    [{"channel":"/meta/subscribe","subscription":"/im/gcny3v_1824450144","id":4,"clientId":"1n8zz1g60ncoj1hxuumbuutbw9f5ri"},{"channel":"/im/req","data":{"online":"1","limit":"2000","seq":"min","cmd":"roster"},"id":2,"clientId":"1n8zz1g60ncoj1hxuumbuutbw9f5ri"}]

 

 

可以看到message是個陣列,意思是其實每次可以連續傳送多條資訊,上邊的第一條是個註冊資訊,緊接著應該是一條我上線啦的資訊,可以刪除


第四部:就可以傳送訊息咯

 

  1. jsonp: callback
  2. message:
    [{"channel":"/im/req","data":{"uid":"1905031563","seq":"1905031563","msg":"撒旦法","cmd":"msg"},"id":18,"clientId":"1r2fn1qx5aa1eho5ot122pgyldmkmci"}]
uid改成你要傳送的uid還有seq,,訊息你懂得

ok,其實還是有其它的一下介面的,這裡不再細說

 

 




 

相關文章