老杨有话讲 發表於 2025-6-14 10:41:00

快手直播间采集工具,提取直播间点赞评论,易语言开发版【仅供学习】

<p>下载地址:https://wwou.lanzoue.com/ilthP2ykwnif</p>
<p>是之前一个客户找我定制的,后面客户付了定金就没找我,所以软件也没交付出去,撑现在还能用,干脆吧源码分享出来,供大家学习参考使用。</p>
<p>源码部分【仅供学习参考】<br>
`.版本 2<br>
.支持库 e2ee<br>
.支持库 iext<br>
.支持库 spec<br>
.支持库 EThread</p>
<p>.程序集 窗口程序集_启动窗口<br>
.程序集变量 WSS, WebSocket客户端<br>
.程序集变量 cookie, 文本型<br>
.程序集变量 liveStreamId, 文本型<br>
.程序集变量 弹幕数量, 整数型</p>
<p>.子程序 __启动窗口_创建完毕</p>
<p>写到文件 (取运行目录 () + “\gzip.dll”, #gzip)<br>
WSS.初始化 (&amp;WSS客户端_收到消息, &amp;WSS客户端_连接成功, &amp;WSS客户端_连接失败, &amp;WSS客户端_断开连接)</p>
<p>.子程序 连接<br>
.局部变量 是否成功, 逻辑型<br>
.局部变量 token十六进制, 文本型<br>
.局部变量 liveStreamId十六进制, 文本型<br>
.局部变量 局_结果, 字节集<br>
.局部变量 局_返回, 文本型<br>
.局部变量 直播间链接, 文本型<br>
.局部变量 返回Cookie, 文本型<br>
.局部变量 局_提交数据, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 token, 文本型<br>
.局部变量 webSocketUrls, 文本型</p>
<p>cookie = 编辑框1.内容<br>
直播间链接 = 编辑框_直播间地址.内容<br>
.如果真 (直播间链接 = “”)<br>
信息框 (“请输入直播间链接”, 0, “提示”, _启动窗口.取窗口句柄 ())<br>
按钮_连接.禁止 = 假<br>
按钮_断开.禁止 = 假<br>
返回 ()<br>
.如果真结束</p>
<p>局_返回 = 编码_Utf8到Ansi (网页_GZIP解压 (网页_访问_对象 (直播间链接, 0, , , 返回Cookie, #协议头, , , , , , , , , , , , , )))<br>
liveStreamId = 文本_取出中间文本 (局_返回, #常量2, #常量3, , )<br>
.如果真 (liveStreamId = “”)<br>
信息框 (“你输入的直播间链接不存在或无法访问或检查cookie是否失效或不可用”, 16, “提示”, _启动窗口.取窗口句柄 ())<br>
按钮_连接.禁止 = 假<br>
按钮_断开.禁止 = 假<br>
返回 ()<br>
.如果真结束</p>
<p>局_返回 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/liveroom/websocketinfo?liveStreamId=” + liveStreamId, 0, , cookie, , #协议头, , , , , , , , , , , , , ))<br>
json.解析 (局_返回)<br>
token = json.取通用属性 (“data.token”)<br>
webSocketUrls = json.取通用属性 (“data.websocketUrls”)<br>
json.清除 ()<br>
.如果真 (token = “”)<br>
信息框 (“获取进房token失败,请查看cookie是否失效或不可用”, 16, “提示”, _启动窗口.取窗口句柄 ())<br>
按钮_连接.禁止 = 假<br>
按钮_断开.禁止 = 假<br>
返回 ()<br>
.如果真结束<br>
是否成功 = WSS.连接 (webSocketUrls, 真, )<br>
token十六进制 = 字节集_字节集到十六进制 (到字节集 (token))<br>
liveStreamId十六进制 = 字节集_字节集到十六进制 (到字节集 (liveStreamId))</p>
<p>.判断开始 (是否成功 = 真)<br>
WSS.发送字节集 (字节集_十六进制到字节集 (“08C8011ADC010AAC01” + token十六进制 + “120b” + liveStreamId十六进制 + “3a1e4a334c6f3455367a37556a4967676e345f31363830373137333030373036”))<br>
时钟1.时钟周期 = 20000<br>
按钮_断开.禁止 = 假<br>
.默认<br>
信息框 (“WSS进房失败”, 16, “提示”, _启动窗口.取窗口句柄 ())<br>
按钮_断开.禁止 = 假<br>
.判断结束</p>
<p>.子程序 WSS客户端_收到消息<br>
.参数 消息类型, 整数型<br>
.参数 消息句柄, 整数型<br>
.局部变量 索引, 整数型<br>
.局部变量 消息数据, 字节集<br>
.局部变量 消息文本, 文本型<br>
.局部变量 Protobuf, _UnProtobuf<br>
.局部变量 是否解析成功, 整数型<br>
.局部变量 i, 整数型<br>
.局部变量 key数量, 整数型<br>
.局部变量 用户信息, 个人信息</p>
<p>消息数据 = WSS.取回消息数据 (消息句柄)<br>
Protobuf.解析 (消息数据)<br>
key数量 = Protobuf.getCount (“3.5”)<br>
.如果真 (key数量 > 0)' 弹幕<br>
.计次循环首 (key数量, i)<br>
弹幕数量 = 弹幕数量 + 1<br>
用户信息.英文ID = Protobuf.getText (“3.5.2.1”, i)<br>
用户信息.昵称 = Protobuf.getText (“3.5.2.2”, i)<br>
用户信息.操作描述 = Protobuf.getText (“3.5.3”, i)<br>
用户信息.头像 = 子_取头像 (用户信息.英文ID)<br>
索引 = 超级列表框1.插入表项 (, , , , , )<br>
超级列表框1.置标题 (索引, 0, 用户信息.昵称)' 昵称<br>
超级列表框1.置标题 (索引, 1, 用户信息.英文ID)' ID<br>
超级列表框1.置标题 (索引, 2, 用户信息.操作描述)' 弹幕<br>
超级列表框1.置标题 (索引, 3, 用户信息.头像)' 头像<br>
超级列表框1.保证显示 (索引)<br>
标题 = 到文本 (弹幕数量)<br>
.计次循环尾 ()<br>
.如果真结束</p>
<p>key数量 = Protobuf.getCount (“3.2”)<br>
.如果真 (key数量 ≠ 0)<br>
标签1.标题 = “在线观众:” + Protobuf.getText (“3.1”)<br>
.如果真结束</p>
<p>key数量 = Protobuf.getCount (“3.8”)<br>
.如果真 (key数量 > 0)<br>
.计次循环首 (key数量, i)<br>
弹幕数量 = 弹幕数量 + 1<br>
用户信息.昵称 = Protobuf.getText (“3.8.2.2”, i)<br>
用户信息.英文ID = Protobuf.getText (“3.8.2.1”, i)<br>
用户信息.操作描述 = “点亮了爱心”<br>
用户信息.头像 = 子_取头像 (用户信息.英文ID)</p>
<pre><code>    索引 = 超级列表框1.插入表项 (, , , , , )
    超级列表框1.置标题 (索引, 0, 用户信息.昵称)
    超级列表框1.置标题 (索引, 1, 用户信息.英文ID)
    超级列表框1.置标题 (索引, 2, 用户信息.操作描述)
    超级列表框1.置标题 (索引, 3, 用户信息.头像)' 头像
    超级列表框1.保证显示 (索引)
    标题 = 到文本 (弹幕数量)
.计次循环尾 ()
</code></pre>
<p>.如果真结束</p>
<p>.子程序 WSS客户端_连接成功</p>
<p>调试输出 (“WSS_连接成功”)</p>
<p>.子程序 WSS客户端_连接失败</p>
<p>调试输出 (“WSS_连接失败”)</p>
<p>.子程序 WSS客户端_断开连接</p>
<p>时钟1.时钟周期 = 0<br>
调试输出 (“WSS_断开连接”)</p>
<p>.子程序 _按钮_连接_被单击</p>
<p>按钮_连接.禁止 = 真<br>
按钮_断开.禁止 = 真<br>
启动线程 (&amp;连接, , )</p>
<p>.子程序 _按钮_断开_被单击</p>
<p>WSS.断开 ()<br>
按钮_连接.禁止 = 假</p>
<p>.子程序 用户ID取头像, 文本型<br>
.参数 ID, 文本型<br>
.局部变量 头像地址, 文本型<br>
.局部变量 json, 类_json</p>
<p>头像地址 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + ID, , , cookie, , #协议头))<br>
json.解析 (头像地址)<br>
返回 (json.取通用属性 (“data.userInfo.avatar”))</p>
<p>.子程序 _时钟1_周期事件</p>
<p>WSS.发送字节集 (字节集_十六进制到字节集 (“08011a0708afb4c294f530”))</p>
<p>.子程序 _超级列表框1_左键单击表项<br>
.局部变量 返回内容, 文本型<br>
.局部变量 英文ID, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 用户信息, 个人信息</p>
<p>英文ID = 超级列表框1.取标题 (超级列表框1.现行选中项, 1)<br>
查询资料_1 (英文ID)</p>
<p>.子程序 查询资料_1, , , 个人中心<br>
.参数 英文ID, 文本型<br>
.局部变量 返回内容, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 用户信息, 个人信息</p>
<p>返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/sensitive?principalId=” + 英文ID, , , cookie, , #协议头))<br>
json.解析 (返回内容)<br>
用户信息.英文ID = 英文ID<br>
用户信息.头像 = json.取通用属性 (“data.sensitiveUserInfo.avatar”)<br>
用户信息.昵称 = json.取通用属性 (“data.sensitiveUserInfo.name”)<br>
用户信息.数字ID = json.取属性 (“data.sensitiveUserInfo.originUserId”).取数据文本 ()<br>
用户信息.签名 = json.取通用属性 (“data.sensitiveUserInfo.description”)<br>
用户信息.地区 = json.取通用属性 (“data.sensitiveUserInfo.cityName”)<br>
用户信息.性别 = json.取通用属性 (“data.userInfo.sex”)<br>
.判断开始 (用户信息.性别 = “F”)<br>
用户信息.性别 = “女”<br>
.判断 (用户信息.性别 = “M”)<br>
用户信息.性别 = “男”<br>
.默认<br>
用户信息.性别 = “保密”<br>
.判断结束</p>
<p>图片框1.图片 = 网页_访问_对象 (用户信息.头像)<br>
标签2.标题 = “昵称:” + 用户信息.昵称<br>
标签3.标题 = “英文ID:” + 英文ID<br>
标签6.标题 = “数字ID:” + 用户信息.数字ID<br>
标签4.标题 = “性别:” + 用户信息.性别<br>
标签7.标题 = “地区:” + 用户信息.地区<br>
标签5.标题 = “签名:” + 用户信息.签名</p>
<p>.子程序 查询资料_2, , , 直播名片<br>
.参数 英文ID, 文本型<br>
.局部变量 返回内容, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 用户信息, 个人信息</p>
<p>返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + 英文ID, , , cookie, , #协议头))<br>
json.解析 (返回内容)<br>
用户信息.英文ID = 英文ID<br>
用户信息.头像 = json.取通用属性 (“data.userInfo.avatar”)<br>
用户信息.昵称 = json.取通用属性 (“data.userInfo.name”)<br>
用户信息.数字ID = json.取属性 (“data.userInfo.originUserId”).取数据文本 ()<br>
用户信息.签名 = json.取通用属性 (“data.userInfo.description”)<br>
用户信息.地区 = json.取通用属性 (“data.userInfo.cityName”)<br>
用户信息.性别 = json.取通用属性 (“data.userInfo.sex”)<br>
.判断开始 (用户信息.性别 = “F”)<br>
用户信息.性别 = “女”<br>
.判断 (用户信息.性别 = “M”)<br>
用户信息.性别 = “男”<br>
.默认<br>
用户信息.性别 = “保密”<br>
.判断结束</p>
<p>图片框1.图片 = 网页_访问_对象 (用户信息.头像)<br>
标签2.标题 = “昵称:” + 用户信息.昵称<br>
标签3.标题 = “英文ID:” + 英文ID<br>
标签6.标题 = “数字ID:” + 用户信息.数字ID<br>
标签4.标题 = “性别:” + 用户信息.性别<br>
标签7.标题 = “地区:” + 用户信息.地区<br>
标签5.标题 = “签名:” + 用户信息.签名</p>
<p>.子程序 点心, 逻辑型<br>
.局部变量 data, 文本型<br>
.局部变量 返回内容, 文本型</p>
<p>data = 子文本替换 (#点心, “”, liveStreamId, , , 真)<br>
返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/liveroom/like”, 1, data, cookie, , #协议头, , , , 编码_Ansi到Utf8 (data)))<br>
.如果 (返回内容 = “{” + #引号 + “data” + #引号 + “:true}”)<br>
返回 (真)<br>
.否则<br>
返回 (假)<br>
.如果结束</p>
<p>.子程序 网页_取头像1, 文本型<br>
.参数 英文ID, 文本型<br>
.局部变量 局_网址, 文本型<br>
.局部变量 局_提交数据, 文本型<br>
.局部变量 ADD_协议头, 类_POST数据类<br>
.局部变量 局_提交协议头, 文本型<br>
.局部变量 局_结果, 字节集<br>
.局部变量 局_返回, 文本型<br>
.局部变量 json, 类_json</p>
<p>调试输出 (1)<br>
局_网址 = “https://www.kuaishou.com/graphql”<br>
局_提交数据 = “{” + #引号 + “operationName” + #引号 + “:” + #引号 + “visionProfile” + #引号 + “,” + #引号 + “variables” + #引号 + “:{” + #引号 + “userId” + #引号 + “:” + #引号 + 英文ID + #引号 + “},” + #引号 + “query” + #引号 + “:” + #引号 + “query visionProfile($userId: String) {\nvisionProfile(userId: $userId) {\n    result\n    hostName\n    userProfile {\n      ownerCount {\n      fan\n      photo\n      follow\n      photo_public\n      __typename\n      }\n      profile {\n      gender\n      user_name\n      user_id\n      headurl\n      user_text\n      user_profile_bg_url\n      __typename\n      }\n      isFollowing\n      __typename\n    }\n    __typename\n}\n}\n” + #引号 + “}”<br>
局_提交数据 = 编码_gb2312到utf8 (局_提交数据)<br>
ADD_协议头.添加 (“Host”, “www.kuaishou.com”)<br>
ADD_协议头.添加 (“Connection”, “keep-alive”)<br>
ADD_协议头.添加 (“accept”, “<em>/</em>”)<br>
ADD_协议头.添加 (“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36”)<br>
ADD_协议头.添加 (“content-type”, “application/json”)<br>
ADD_协议头.添加 (“Origin”, “https://www.kuaishou.com”)<br>
ADD_协议头.添加 (“Sec-Fetch-Site”, “same-origin”)<br>
ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”)<br>
ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”)<br>
ADD_协议头.添加 (“Referer”, “https://www.kuaishou.com/profile/3xi9cj4qnixaaug”)<br>
ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”)<br>
局_提交协议头 = ADD_协议头.获取协议头数据 ()<br>
局_结果 = 网页_访问_对象 (局_网址, 1, , cookie, , 局_提交协议头, , , , 到字节集 (局_提交数据), , , , , , , )<br>
局_返回 = 到文本 (编码_编码转换对象 (局_结果))<br>
json.解析 (局_返回)<br>
返回 (json.取通用属性 (“data.visionProfile.userProfile.profile.headurl”))</p>
<p>.子程序 网页_取头像2, 文本型<br>
.参数 英文ID, 文本型<br>
.局部变量 返回内容, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 用户信息, 个人信息</p>
<p>调试输出 (2)<br>
返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + 英文ID, , , cookie, , #协议头))<br>
json.解析 (返回内容)<br>
用户信息.头像 = json.取通用属性 (“data.userInfo.avatar”)<br>
返回 (用户信息.头像)</p>
<p>.子程序 网页_取头像3, 文本型<br>
.参数 英文ID, 文本型<br>
.局部变量 返回内容, 文本型<br>
.局部变量 json, 类_json<br>
.局部变量 用户信息, 个人信息</p>
<p>调试输出 (3)<br>
返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/sensitive?principalId=” + 英文ID, , , cookie, , #协议头))<br>
json.解析 (返回内容)<br>
用户信息.头像 = json.取通用属性 (“data.sensitiveUserInfo.avatar”)<br>
返回 (用户信息.头像)</p>
<p>.子程序 网页_取头像4, 文本型<br>
.参数 英文ID, 文本型<br>
.局部变量 局_网址, 文本型<br>
.局部变量 局_提交cookie, 文本型<br>
.局部变量 局_提交协议头, 文本型<br>
.局部变量 局_结果, 字节集<br>
.局部变量 局_返回, 文本型</p>
<p>调试输出 (4)<br>
局_网址 = “https://www.kuaishou.com/profile/” + 英文ID<br>
局_提交协议头 = “Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,<em>/</em>;q=0.8,application/signed-exchange;v=b3;q=0.9” + #换行符 + “Accept-Encoding: gzip, deflate, br” + #换行符 + “Accept-Language: zh-CN,zh;q=0.9” + #换行符 + “Cache-Control: max-age=0” + #换行符 + “Connection: keep-alive” + #换行符 + “Host: www.kuaishou.com” + #换行符 + “Sec-Fetch-Dest: document” + #换行符 + “Sec-Fetch-Mode: navigate” + #换行符 + “Sec-Fetch-Site: none” + #换行符 + “Sec-Fetch-User: ?1” + #换行符 + “Upgrade-Insecure-Requests: 1” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36”<br>
网页_访问S (局_网址, 0, , cookie, , 局_提交协议头, , , , , , , , , , , 局_结果, , , , )<br>
局_结果 = 网页_GZIP解压 (局_结果)<br>
局_返回 = 编码_Utf8到Ansi (局_结果)<br>
局_返回 = 文本_取出中间文本 (局_返回, “&lt;img src=#引号”, “#引号 class=”)<br>
返回 (局_返回)</p>
<p>.子程序 子_取头像, 文本型<br>
.参数 参_英文ID, 文本型<br>
.局部变量 返回信息, 文本型</p>
<p>返回信息 = 网页_取头像1 (参_英文ID)<br>
.如果真 (返回信息 = “”)<br>
返回信息 = 网页_取头像2 (参_英文ID)<br>
.如果真结束<br>
.如果真 (返回信息 = “”)<br>
返回信息 = 网页_取头像3 (参_英文ID)<br>
.如果真结束<br>
.如果真 (返回信息 = “”)<br>
返回信息 = 网页_取头像4 (参_英文ID)<br>
.如果真结束</p>
<p>返回 (返回信息)`</p>
<p><img src="https://img2024.cnblogs.com/blog/3661544/202506/3661544-20250614104136349-1737668703.png"></p><br><br>
来源:https://www.cnblogs.com/qianqian3378/p/18928068
頁: [1]
查看完整版本: 快手直播间采集工具,提取直播间点赞评论,易语言开发版【仅供学习】