接入Websocket,自动接收CSDN短消息

最近在研究Websocket功能,本来想接入抖音和快手的弹幕功能,以及短消息功能。

在了解的过程中,也开发了一些测试项目。

这不是,就把CSDN的短消息项目给弄出来了。

直接上代码:

python 复制代码
# !/usr/bin python3
# -*- encoding=utf-8 -*-
# Description : 
# Author  : 
# @Email : 
# @File : csdn.py
# @Time : 2023-09-05 15:18:58
# @Project : live_core

import requests
import websocket
import threading
import time
import json
import logging
import re


class CSDN(object):

    user_name = ''
    device_id = ''
    cookie = ''

    def init_wws(self, cookie):
        try:
            self.cookie = cookie
            self.user_name = re.search('UserName=(.*?);', cookie).group(1)
            self.device_id = re.search('uuid_tt_dd=(.*?);', cookie).group(1)
        except Exception as e:
            logging.error('错误'.format(e.args))

    def _connect_data(self):
        _url = 'https://bizapi.csdn.net/im-manage/v1.0/dispatch/do'
        _h = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
            'Cookie': self.cookie
        }

        _d = {
            'appId': "CSDN-PC",
            'channelType': "privateMsg",
            'deviceId': self.device_id,
            'groupId': "CSDN-private-MSG",
            'linkType': 1,
            'token': "",
            'userId': self.user_name
        }

        _req = requests.post(_url, headers=_h, json=_d)
        return _req.json()

    def _on_open(self, ws):
        _body = self._connect_data()
        # print(_body.get('data'))
        _body_data = _body.get('data')
        _data = {
            'body': {
                'userId': self.user_name,
                'appId': 'CSDN-PC',
                'imToken': _body_data.get('imToken'),
                'groupId': 'CSDN-private-MSG'
            },
            'cmdId': 2,
            'isZip': 0,
            'ver': '1.0'
        }
        ws.send(json.dumps(_data))
        threading.Thread(target=self._keep_heart_beat, args=(ws,), daemon=True).start()

    def _keep_heart_beat(self, ws: websocket.WebSocketApp):
        while True:
            time.sleep(5)
            _payload = {
                'cmdId': 1
            }
            ws.send(json.dumps(_payload))

    def _on_message(self, ws: websocket.WebSocketApp, message):
        logging.info(message)

    def _on_error(self, ws: websocket.WebSocketApp, error):
        logging.error(error)

    def _on_close(self, ws):
        logging.info('close')

    def wss_start(self):
        websocket.enableTrace(False)
        ws = websocket.WebSocketApp(
            'wss://im-linkserver-66.csdn.net/', on_message=self._on_message, on_error=self._on_error, on_close=self._on_close,
            on_open=self._on_open
        )
        ws.run_forever()


if __name__ == '__main__':
    LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
    logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)

    # cookies 这里填CSDN的Cookies
    _c = ''

    _csdn = CSDN()
    _csdn.init_wws(_c)
    _csdn.wss_start()

运行结果如下:

相关推荐
测试开发技术37 分钟前
如何在 Pytest 中调用其他用例返回的接口参数?
面试·自动化·pytest·接口·接口测试·api测试
车载测试工程师1 小时前
汽车功能安全-嵌入式软件测试(软件合格性测试)【目的、验证输入、集成&验证要求】11
功能测试·网络协议·测试工具·安全·车载系统·汽车·测试覆盖率
chao_7892 小时前
Selenium 自动化实战技巧【selenium】
自动化测试·selenium·算法·自动化
宇钶宇夕2 小时前
S7-1200 系列 PLC 中 SCL 语言的 PEEK 和 POKE 指令使用详解
运维·服务器·数据库·程序人生·自动化
IPdodo全球网络服务2 小时前
什么是IP关联?跨境卖家如何有效避免IP关联?
网络·网络协议·tcp/ip
南棱笑笑生2 小时前
20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
网络
知北游天4 小时前
Linux:多线程---同步&&生产者消费者模型
java·linux·网络
EasyCVR4 小时前
EasyCVR视频汇聚平台国标接入设备TCP主动播放失败排查指南
网络·tcp/ip·音视频
kfepiza4 小时前
`nmcli con add type vlan`中的: `ifname` , `dev` ,`vlan.parent`, `id`,`vlan.id`
linux·网络协议·tcp/ip
kfepiza4 小时前
Linux的NetworkManager的`nmcli connection add` 笔记250712
linux·网络协议·tcp/ip