源码已上传:www.pan38.com/share.php?c… 提取码:8888
.版本 2 .支持库 spec .支持库 e2ee .支持库 eAPI .程序集 窗口程序集_启动窗口 .程序集变量 g_ws, 整数型 .程序集变量 g_连接状态, 逻辑型 .程序集变量 count, 整数型 .子程序 __启动窗口_创建完毕 WSS_全局_初始化 (, , ) ??? () ' <!!!> g_连接状态 = 假 .子程序 _按钮_连接状态_被单击 .局部变量 V8, , , , <!!!> .局部变量 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 特征码 = “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, , , , <!!!> .局部变量 密文, 文本型 明文 = “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_文本 (明文, , , ) ??? () ' <!!!> signature = ??? () ' <!!!> 返回 (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) 返回 (假) .如果真结束 返回 (真)