a2044802063 发表于 2024-2-12 01:24

7631329 发表于 2024-3-7 16:49

传不了文件,只能这样给你了!


.版本 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_协议头.获取协议头数据 ()

局_结果 = 网页_访问 (局_网址, 局_方式, 局_提交数据, , , 局_提交协议头, , , , , )
局_返回 = 到文本 (编码_编码转换对象 (局_结果))
返回 (局_返回)

57344697 发表于 2024-3-20 13:05

7631329 发表于 2024-3-7 16:49
传不了文件,只能这样给你了!




这是啥代码啊 大佬

MasonXu 发表于 2024-11-10 11:44

57344697 发表于 2024-3-20 13:05
这是啥代码啊 大佬

中文的大概就是易语言吧
页: [1]
查看完整版本: 求个抖音直播弹幕获取工具以及抖音wss协议获取工具