微博私信协议

用的是公开的协议
如有侵权,联系删除。
进入到某个用户的私信页面,发送私信。

可以发现,是个post请求
主要关注data里面的数据
text :要发送的内容
uid:要发送私信的用户id
clientid:一个加密的参数,服务端返回,或js生成
source:本人的id,但和用户主页的id不同,还不知道从哪里来。

刷新一下页面,重新捕获一下链接,看是否能找到clientid
在某个链接里面发现了他

这条链接是post请求

https://web.im.weibo.com/im/handshake
data:[{"id":"1","version":"1.0","minimumVersion":"1.0","channel":"/meta/handshake","supportedConnectionTypes":["long-polling","callback-polling"],"advice":{"timeout":60000,"interval":0}}]

data没有特殊的值,固定就好。

clientid的话,也可以在某个js文件中找到

https://conchfairy.sinajs.cn/chat/js/app.000f4c48.js
这样的话,参数就找齐了。
需要注意一点的是各个链接content-type的类型。

import requests
from urllib.parse import quote
import json
import re
import time

class wp():
    def __init__(self):
        self.cookie = '你的cookie'
        self.get_clientid()
        self.getsoureid()

    # 得到sourceid
    def getsoureid(self):
        url = 'https://conchfairy.sinajs.cn/chat/js/app.000f4c48.js'
        headers = {
            'Cookie':self.cookie,

        }
        rg = requests.get(url,headers = headers)
        rt = rg.text
        sourceid = re.findall(r'source=(\d+)"',rt)[-1]
        self.sourceid = sourceid

    # 得到clientid
    def get_clientid(self):
        url = 'https://web.im.weibo.com/im/handshake'
        headers = {
            'Content-Type': 'application/json;charset=UTF-8',
            'Cookie': self.cookie,
            'Referer': 'https://api.weibo.com/'
        }
        data = [{"id":"1","version":"1.0","minimumVersion":"1.0","channel":"/meta/handshake","supportedConnectionTypes":["long-polling","callback-polling"],"advice":{"timeout":60000,"interval":0}}]
        r = requests.post(url,headers = headers,data = json.dumps(data),verify = False)
        if r.status_code == 200:
            rj = r.json()
            print(rj)
            self.clientid = rj[0]['clientId']

    # 私信
    def sixin(self,uid,content):
        source = self.sourceid
        content = quote(content)
        url = 'https://api.weibo.com/webim/2/direct_messages/new.json'
        data = f'text={content}&uid={uid}&extensions=%7B%22clientid%22%3A%22{self.clientid}%22%7D&is_encoded=0&decodetime=1&source={source}'
        print(data)
        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': self.cookie,
            'Referer': 'https://api.weibo.com/chat/'

        }
        rp = requests.post(url,headers = headers,data = data)
        print(rp.status_code)
        if rp.status_code == 200:
            print(rp.text)


仅用于自己的账号,请不要批量操作,非法操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍。并且提供一些选型、实现细节以及优化的建议。 注:...
    maTianHong阅读 2,441评论 4 12
  • 英文文档,一开始我也是抗拒的,边翻译边看,也就花费了1个小时基本就阅读过了,我的英文基础其实很差。附上链接:链接:...
    lonecolonel阅读 10,043评论 3 1
  • 以流的方式处理IM通讯问题好处是无需多次建立连接,另外消息的网络开销少,而xmpp会有很多冗余的信息; 使用开源项...
    sea777777阅读 2,392评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...
    青石电影阅读 10,470评论 1 2