[Python] 纯文本查看 复制代码
.版本 2
.支持库 RSCProject
.支持库 spec
.支持库 e2ee
.支持库 eAPI
.程序集 窗口程序集_启动窗口
.程序集变量 g_ws, 整数型
.程序集变量 g_连接状态, 逻辑型
.程序集变量 count, 整数型
.子程序 __启动窗口_创建完毕
WSS_全局_初始化 (, , )
rsV8CreateIsolate (1, )
g_连接状态 = 假
.子程序 _按钮_连接状态_被单击
.局部变量 V8, RSJSCriptV8
.局部变量 signature, 文本型
.局部变量 ip解析类型, 整数型
.局部变量 url, 文本型
按钮_连接状态.禁止 = 真
signature = 获取signature ()
url = “wss://webcast5-ws-web-lf.douyin.com/webcast/im/push/v2/?app_name=douyin_web&version_code=180800&webcast_sdk_version=1.0.12&update_version_code=1.0.12&compress=gzip&device_platform=web&cookie_enabled=true&screen_width=1600&screen_height=900&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0%20(Windows%20NT%206.1;%20WOW64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/114.0.5735.289%20Safari/537.36&browser_online=true&tz_name=Asia/Shanghai&cursor=r-7340189586645192273_rdc-3_d-1_u-1_h-1_t-1709021074291&internal_ext=internal_src:dim|wss_push_room_id:” + 编辑框_roomid.内容 + “|wss_push_did:7340188135290095119|first_req_ms:1709020746857|fetch_time:1709021074291|seq:3|wss_info:0-1709021049507-1-0|wrds_v:7340189603824930129&host=https://live.douyin.com&aid=6383&live_id=1&did_rule=3&endpoint=live_pc&support+_wrds=1&user_unique_id=&im_path=/webcast/im/fetch/&identity=audience&need_persist_msg_count=15&insert_task_id=&live_reason=&room_id=” + 编辑框_roomid.内容 + “&heartbeatDuration=0&signature=” + signature
.判断开始 (g_连接状态)
WSS_连接_断开 (g_ws)
.默认
ip解析类型 = #WSS_EnIPAddrType_IPT_ALL
g_ws = WSS_连接_启动 (url, #wss协议头, , , , , , &ws_连接成功, &ws_连接断开, &ws_收到消息, , , , ip解析类型, , , )
WSS_设置_心跳函数 (g_ws, 500, &心跳函数)
.如果真 (g_ws = 0)
按钮_连接状态.禁止 = 假
信息框 (“创建ws失败”, 0, , )
.如果真结束
.判断结束
.子程序 心跳函数
.参数 id, 整数型
WSS_发送_字节集 (id, 编码_BASE64解码 (“OgJoYg==”, ))
.子程序 ws_连接成功
.参数 ws, 整数型
g_连接状态 = 真
按钮_连接状态.标题 = “断开”
按钮_连接状态.禁止 = 假
.子程序 ws_连接断开, , , 易语言学习资源、源码下载站:www.eyuyan.la
.参数 ws, 整数型
g_连接状态 = 假
按钮_连接状态.标题 = “连接”
按钮_连接状态.禁止 = 假
调试输出 (“断开”)
.子程序 ws_收到消息
.参数 ws, 整数型
.参数 opcode, 整数型
.局部变量 wass_var, 文本型
.局部变量 url, 文本型
.局部变量 signature, 文本型
.局部变量 ip解析类型, 整数型
wass_var = 字节集_到十六进制 (WSS_取回数据_字节集 (ws))
抖音_弹幕解析 (wass_var, )
.子程序 抖音_弹幕解析
.参数 wass_var, 文本型
.参数 BASE664, 文本型, 可空
.局部变量 json, json对象
.局部变量 n, 整数型
.局部变量 i, 整数型
.局部变量 txt, 文本型
.局部变量 特征码, 文本型
.局部变量 len, 整数型
.局部变量 arr, 文本型, , "0"
.局部变量 msg, 文本型
.局部变量 data, 字节集
.局部变量 json2, json对象
.局部变量 勋章, 文本型
.局部变量 礼物, 文本型
.局部变量 弹幕, 文本型
.局部变量 标记, 文本型
.局部变量 人数, 文本型
.局部变量 值, 文本型
.局部变量 opcode, 通用型, , "0"
.局部变量 ws, 整数型
txt = wass_var
' 功能_网页访问 (“sj=” + txt)
特征码 = “1F8B080”
len = 寻找文本 (txt, 特征码, , 真)
txt = 取文本中间 (txt, len, 取文本长度 (txt) - len)
data = 字节集_十六进制到字节集 (txt)
data = GZIP解压数据 (data)
txt = 编码_utf8到gb2312 (PB转JSON (data))
.如果真 (json.解析 (txt, ))
n = json.取成员数 (, )
.计次循环首 (n, i)
msg = json.取文本2 (到文本 (i - 1), )
.判断开始 (文本_是否包含关键词 (msg, “WebcastMemberMessage”)) ' 加入直播间"
.如果真 (json2.解析 (msg, ))
' 人数 = json2.取文本2 (“value/1/value/2/value”, )
' 值 = 选择 (文本_取出中间文本 (json2.取数据文本 (), #前, #后, , ) = “”, 文本_取出中间文本 (json2.取数据文本 (), #前, #后, 寻找文本 (json2.取数据文本 (), #后, , 假), ), 文本_取出中间文本 (json2.取数据文本 (), #前, #后, , )) + 文本_取出中间文本 (json2.取数据文本 (), #前, #后, , ) + “来了,直播间人数” + 人数
人数 = json2.取文本2 (“value/1/value/2/value”, )
值 = json2.取文本2 (“value/1/value/0/value/4/value/3/value/2/value/0/value/12/note”, ) + “来了,直播间人数” + 人数
列表框_用户进入.现行选中项 = 列表框_用户进入.取项目数 () - 1
列表框_用户进入.加入项目 (格式化文本 (“消息:%s”, 值), )
.如果真结束
.判断 (文本_是否包含关键词 (msg, “WebcastGiftMessage”)) ' 送礼物"
.如果真 (json2.解析 (msg, ))
勋章 = “荣誉等级” + 文本_取出中间文本 (json2.取数据文本 (), “荣誉等级”, #引号, , )
礼物 = json2.取文本2 (“value/1/value/0/value/5/note”, )
列表框_用户送礼.现行选中项 = 列表框_用户送礼.取项目数 () - 1
列表框_用户送礼.加入项目 (格式化文本 (“消息:%s”, 礼物 + 勋章), )
.如果真结束
.判断 (文本_是否包含关键词 (msg, “WebcastLikeMessage”)) ' 点赞
.如果真 (json2.解析 (msg, ))
标记 = 文本_取出中间文本 (json2.取数据文本 (), #前, #后, , ) + json2.取文本2 (“value/1/value/0/value/4/value/4/value/1/note”, )
列表框_点赞.现行选中项 = 列表框_点赞.取项目数 () - 1
列表框_点赞.加入项目 (格式化文本 (“消息:%s”, 标记), )
.如果真结束
.判断 (文本_是否包含关键词 (msg, “WebcastChatMessage”)) ' 评论
.如果真 (json2.解析 (msg, ))
弹幕 = 文本_取出中间文本 (json2.取数据文本 (), #前, #后, , ) + “:” + json2.取文本2 (“value/1/value/2/note”, )
列表框_弹幕.现行选中项 = 列表框_弹幕.取项目数 () - 1
列表框_弹幕.加入项目 (格式化文本 (“消息:%s”, 弹幕), )
.如果真结束
.默认
.判断结束
.计次循环尾 ()
.如果真结束
.子程序 _按钮_连接状态1_被单击
.局部变量 返回值, 文本型
.局部变量 roomid, 文本型
.局部变量 返回_cookies, 文本型
.局部变量 unique_id, 文本型
返回_cookies = 获取cookies (编辑框1.内容)
返回值 = UTF8到文本 (网页_访问_对象 (“https://live.douyin.com/” + 编辑框1.内容, , , 返回_cookies, , #协议头, , , 真, , , , , , , , , , ))
roomid = 文本_取出中间文本 (返回值, #room_前, #room_后, , )
编辑框_roomid.内容 = roomid
.子程序 获取cookies, 文本型, , 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 roomid, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_提交cookie, 文本型
.局部变量 返回_cookies, 文本型
局_网址 = “https://live.douyin.com/” + roomid
网页_访问_对象 (局_网址, 0, , , 返回_cookies, #协议头, , , , , , , , , , , , , )
返回 (返回_cookies)
.子程序 获取signature, 文本型
.局部变量 明文, 文本型
.局部变量 signature, 文本型
.局部变量 v8, RSJSCriptV8
.局部变量 密文, 文本型
明文 = “live_id=1,aid=6383,version_code=180800,webcast_sdk_version=1.0.12,room_id=” + 编辑框_roomid.内容 + “,sub_room_id=,sub_channel_id=,did_rule=3,user_unique_id=,device_platform=web,device_type=,ac=,identity=audience”
密文 = 校验_取md5_文本 (明文, , , )
v8.RunJSCript (#js, 真, 0, 0, )
signature = v8.Call (“man_x”, 假, 假, 密文)
返回 (signature)
.子程序 字节集_到十六进制, 文本型, 公开, 将字节集用16进制表示.可以将字节集用系统标准16进制表示
.参数 原始字节集, 字节集, , 用于转换的字节集
.局部变量 局_文件句柄, 整数型
.局部变量 局_字节集长度, 整数型
.局部变量 局_i, 整数型
.局部变量 局_文本, 文本型
局_文件句柄 = 打开内存文件 ()
局_字节集长度 = 取字节集长度 (原始字节集)
.计次循环首 (局_字节集长度, 局_i)
插入文本 (局_文件句柄, 到十六进制 (原始字节集 [局_i]))
处理事件 ()
.计次循环尾 ()
移到文件首 (局_文件句柄)
局_文本 = 读入文本 (局_文件句柄, )
关闭文件 (局_文件句柄)
返回 (局_文本)
.子程序 到十六进制, 文本型, , 返回转换后的十六进制文本
.参数 十进制数据, 整数型, , 传入十进制整型数据
.局部变量 局部_结果, 文本型
局部_结果 = 取十六进制文本 (十进制数据)
.如果真 (取文本长度 (局部_结果) % 2 = 1)
返回 (“0” + 局部_结果)
.如果真结束
返回 (局部_结果)
.子程序 PB转JSON, 文本型, 公开
.参数 PB数据, 字节集
.局部变量 p, 整数型
.局部变量 s, 文本型
p = PbToJson (PB数据, 取字节集长度 (PB数据))
s = 指针到文本 (p)
Cfree (p)
返回 (s)
.子程序 文本_是否包含关键词, 逻辑型
.参数 msg, 文本型
.参数 val, 文本型
.如果真 (寻找文本 (msg, val, , 假) = -1)
返回 (假)
.如果真结束
返回 (真)
.子程序 功能_网页访问, 文本型, , 本命令由【精易网页调试助手】生成,请配合精易模块使用。
.参数 sj, 文本型
.局部变量 局_网址, 文本型
.局部变量 局_方式, 整数型
.局部变量 局_提交数据, 文本型
.局部变量 ADD_协议头, 类_POST数据类
.局部变量 局_提交协议头, 文本型
.局部变量 局_结果, 字节集
.局部变量 局_返回, 文本型
' https://zb.yywgou.net/python/test/testtest
局_网址 = “http://zb.gxwwmj.com/python/test/testtest”
局_方式 = 1
' a=3245354326546
局_提交数据 = sj
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36”)
局_提交协议头 = ADD_协议头.获取协议头数据 ()
局_结果 = 网页_访问 (局_网址, 局_方式, 局_提交数据, , , 局_提交协议头, , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果))
返回 (局_返回)