新浪微博私信,即时聊天接口研究

由于要写个chrome插件来进行发发私信什么的 你懂得,,,,


由于是个插件,就不要去研究模拟登陆啦,cookie问题不用考虑,可以用ajax任意访问weibo的所有地址


但是如果两人从来没有交流过,那么第一次发私信是要过验证码的


但是有种情况不需要,那就是用新浪的im,就是右下角的即时聊天的那个玩意,研究发现,如果需要调用者个即时聊天的接口,需要如下几个步骤


第一步之前:获取服务器,管道


ajax,GET发送内容到:http://nas.im.api.weibo.com/im/webim.jsp


  1. v:
    1.1
  2. returntype:
    json
  3. uid:
    1824450144
  4. callback: callback
返回的内容有两个,全部保存下来

{"channel":"/im/51sr84_1824450144", "server":"http://13.79.web1.im.weibo.com/"}




第一步: 握手 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":" 这里是一开始获取到的chanel","id":4,"clientId":" 第一步取到的clientid"},{"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,其实还是有其它的一下接口的,这里不再细说

我写的一个微博插件 https://github.com/suxianbaozi/autoreply



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值