接入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()

运行结果如下:

相关推荐
学java的小菜鸟啊9 分钟前
第五章 网络编程 TCP/UDP/Socket
java·开发语言·网络·数据结构·网络协议·tcp/ip·udp
新手嵌入式学习36 分钟前
网络协议头分析
网络·网络协议
运维Z叔2 小时前
云安全 | AWS S3存储桶安全设计缺陷分析
android·网络·网络协议·tcp/ip·安全·云计算·aws
weixin_456732592 小时前
网络-内核是如何与用户进程交互
网络·交互
测试界柠檬2 小时前
面试真题 | web自动化关闭浏览器,quit()和close()的区别
前端·自动化测试·软件测试·功能测试·程序人生·面试·自动化
陈大爷(有低保)3 小时前
UDP Socket聊天室(Java)
java·网络协议·udp
爱吃涮毛肚的肥肥(暂时吃不了版)3 小时前
计算机网络34——Windows内存管理
网络·计算机网络·udp
码哝小鱼4 小时前
firewalld封禁IP或IP段
linux·网络
sec0nd_4 小时前
1网络安全的基本概念
网络·安全·web安全
青柠视频云5 小时前
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
服务器·网络·音视频