快手直播间匿名提取工具,采集快手号ID,评论内容,易语言开源版提取!

发布时间 2023-11-22 17:37:09作者: 新壳软件

易语言开发的一个快手直播间提取工具,可以提取快手号等信息,还有评论内容,音乐等信息,源码我下面会公开,用的gzip.dll和小豆鱼[2.1.0]0.ec两个实现的,任何快手直播间都能正常提取的,代码仅供学习和娱乐使用。

软件截图:

 

框架图:

 

源码分享:

==============================================================

.版本 2

.支持库 e2ee

.支持库 iext2

.支持库 iext

.支持库 spec

.支持库 EThread

 

.程序集 窗口程序集_启动窗口

.程序集变量 WSS, WebSocket客户端

.程序集变量 cookie, 文本型

.程序集变量 liveStreamId, 文本型

.程序集变量 弹幕数量, 整数型

.程序集变量 a, 字符格式

 

.子程序 __启动窗口_创建完毕

 

写到文件 (取运行目录 () + “\gzip.dll”, #gzip)

WSS.初始化 (&WSS客户端_收到消息, &WSS客户端_连接成功, &WSS客户端_连接失败, &WSS客户端_断开连接)

 

.子程序 连接

.局部变量 是否成功, 逻辑型

.局部变量 token十六进制, 文本型

.局部变量 liveStreamId十六进制, 文本型

.局部变量 局_结果, 字节集

.局部变量 局_返回, 文本型

.局部变量 直播间链接, 文本型

.局部变量 返回Cookie, 文本型

.局部变量 局_提交数据, 文本型

.局部变量 json, 类_json

.局部变量 token, 文本型

.局部变量 webSocketUrls, 文本型

 

 

cookie = 编辑框1.内容

直播间链接 = 编辑框_直播间地址.内容

.如果真 (直播间链接 = “”)

  信息框 (“请输入直播间链接”, 0, “提示”, _启动窗口.取窗口句柄 ())

  按钮_连接.禁止 = 假

  按钮_断开.禁止 = 假

  返回 ()

.如果真结束

 

局_返回 = 编码_Utf8到Ansi (网页_GZIP解压 (网页_访问_对象 (直播间链接, 0, , , 返回Cookie, #协议头, , , , , , , , , , , , , )))

liveStreamId = 文本_取出中间文本 (局_返回, #常量2, #常量3, , )

.如果真 (liveStreamId = “”)

  信息框 (“你输入的直播间链接不存在或无法访问或检查cookie是否失效或不可用”, 16, “提示”, _启动窗口.取窗口句柄 ())

  按钮_连接.禁止 = 假

  按钮_断开.禁止 = 假

  返回 ()

.如果真结束

 

局_返回 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/liveroom/websocketinfo?liveStreamId=” + liveStreamId, 0, , cookie, , #协议头, , , , , , , , , , , , , ))

json.解析 (局_返回)

token = json.取通用属性 (“data.token”)

webSocketUrls = json.取通用属性 (“data.websocketUrls[0]”)

json.清除 ()

.如果真 (token = “”)

  信息框 (“获取token失败”, 16, “提示”, _启动窗口.取窗口句柄 ())

  按钮_连接.禁止 = 假

  按钮_断开.禁止 = 假

  返回 ()

.如果真结束

是否成功 = WSS.连接 (webSocketUrls, 真, )

token十六进制 = 字节集_字节集到十六进制 (到字节集 (token))

liveStreamId十六进制 = 字节集_字节集到十六进制 (到字节集 (liveStreamId))

 

.判断开始 (是否成功 = 真)

  WSS.发送字节集 (字节集_十六进制到字节集 (“08C8011ADC010AAC01” + token十六进制 + “120b” + liveStreamId十六进制 + “3a1e4a334c6f3455367a37556a4967676e345f31363830373137333030373036”))

  时钟1.时钟周期 = 20000

  按钮_断开.禁止 = 假

.默认

  信息框 (“WSS进房失败”, 16, “提示”, _启动窗口.取窗口句柄 ())

  按钮_断开.禁止 = 假

.判断结束

 

 

.子程序 WSS客户端_收到消息

.参数 消息类型, 整数型

.参数 消息句柄, 整数型

.局部变量 索引, 整数型

.局部变量 消息数据, 字节集

.局部变量 消息文本, 文本型

.局部变量 Protobuf, _UnProtobuf

.局部变量 是否解析成功, 整数型

.局部变量 i, 整数型

.局部变量 key数量, 整数型

.局部变量 用户信息, 个人信息

 

消息数据 = WSS.取回消息数据 (消息句柄)

Protobuf.解析 (消息数据)

key数量 = Protobuf.getCount (“3.5”)

 

a.字体大小 = 9

a.字体名称 = “微软雅黑”

 

.如果真 (key数量 > 0) ' 弹幕

  .计次循环首 (key数量, i)

    弹幕数量 = 弹幕数量 + 1

    用户信息.英文ID = Protobuf.getText (“3.5.2.1”, i)

    用户信息.昵称 = Protobuf.getText (“3.5.2.2”, i)

    用户信息.操作描述 = Protobuf.getText (“3.5.3”, i)

    用户信息.头像 = 子_取头像 (用户信息.英文ID)

 

 

 

    ' 超级列表框1.置标题 (索引, 0, 用户信息.昵称) ' 昵称

    ' 超级列表框1.置标题 (索引, 1, 用户信息.英文ID) ' ID

    ' 超级列表框1.置标题 (索引, 2, 用户信息.操作描述) ' 弹幕

    ' 超级列表框1.置标题 (索引, 3, 用户信息.头像) ' 头像

    ' 超级列表框1.保证显示 (索引)

    ' 标题 = 到文本 (弹幕数量)

 

    索引 = 超级列表框2.插入表项 (, , , , , )

    超级列表框2.置标题 (索引, 0, 用户信息.昵称)

    超级列表框2.置标题 (索引, 1, 用户信息.英文ID)

    超级编辑框1.起始选择位置 = 取文本长度 (超级编辑框1.内容)

    a.文本颜色 = 2155752

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = 用户信息.昵称 + “”

    a.文本颜色 = 13735843

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = “ : ”

    a.文本颜色 = #白色

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = 用户信息.操作描述

 

    a.文本颜色 = #灰色

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = “  ” + 时间_格式化 (取现行时间 (), , “ hh:mm:ss”, 真) + #换行符

 

 

    超级编辑框1.滚动 (超级编辑框1.取行数 ())

  .计次循环尾 ()

.如果真结束

 

key数量 = Protobuf.getCount (“3.2”)

.如果真 (key数量 ≠ 0)

  标签1.标题 = “在线观众:” + Protobuf.getText (“3.1”)

.如果真结束

 

key数量 = Protobuf.getCount (“3.8”)

.如果真 (key数量 > 0)

  .计次循环首 (key数量, i)

    弹幕数量 = 弹幕数量 + 1

    用户信息.昵称 = Protobuf.getText (“3.8.2.2”, i)

    用户信息.英文ID = Protobuf.getText (“3.8.2.1”, i)

    用户信息.操作描述 = “点亮了爱心” + “ ”

    用户信息.头像 = 子_取头像 (用户信息.英文ID)

 

    超级编辑框1.起始选择位置 = 取文本长度 (超级编辑框1.内容)

    a.文本颜色 = 2155752

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = 用户信息.昵称 + “”

    a.文本颜色 = 13735843

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = “ : ”

    a.文本颜色 = #红色

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = 用户信息.操作描述

    a.文本颜色 = #灰色

    超级编辑框1.置选择区字符格式 (a)

    超级编辑框1.被选择文本 = “  ” + 时间_格式化 (取现行时间 (), , “ hh:mm:ss”, 真) + #换行符

 

    超级编辑框1.滚动 (超级编辑框1.取行数 ())

    索引 = 超级列表框1.插入表项 (, , , , , )

    超级列表框1.置标题 (索引, 2, 用户信息.昵称)

    超级列表框1.置标题 (索引, 0, Protobuf.getText (“3.5.3”, i))

 

    索引 = 超级列表框2.插入表项 (, , , , , )

    超级列表框2.置标题 (索引, 0, 用户信息.昵称)

    超级列表框2.置标题 (索引, 1, 用户信息.英文ID)

 

  .计次循环尾 ()

.如果真结束

 

 

 

 

.子程序 WSS客户端_连接成功

 

调试输出 (“WSS_连接成功”)

按钮_连接.标题 = “连接成功”

 

.子程序 WSS客户端_连接失败

 

调试输出 (“WSS_连接失败”)

按钮_连接.标题 = “连接失败”

 

.子程序 WSS客户端_断开连接

 

时钟1.时钟周期 = 0

调试输出 (“WSS_断开连接”)

按钮_连接.标题 = “重新连接”

 

.子程序 _按钮_连接_被单击

 

按钮_连接.禁止 = 真

按钮_断开.禁止 = 真

启动线程 (&连接, , )

 

.子程序 _按钮_断开_被单击

 

WSS.断开 ()

按钮_连接.禁止 = 假

按钮_连接.标题 = “连接”

 

.子程序 用户ID取头像, 文本型

.参数 ID, 文本型

.局部变量 头像地址, 文本型

.局部变量 json, 类_json

 

头像地址 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + ID, , , cookie, , #协议头))

json.解析 (头像地址)

返回 (json.取通用属性 (“data.userInfo.avatar”))

 

.子程序 _时钟1_周期事件

 

WSS.发送字节集 (字节集_十六进制到字节集 (“08011a0708afb4c294f530”))

 

.子程序 _超级列表框1_左键单击表项

.局部变量 返回内容, 文本型

.局部变量 英文ID, 文本型

.局部变量 json, 类_json

.局部变量 用户信息, 个人信息

 

' 英文ID = 超级列表框1.取标题 (超级列表框1.现行选中项, 1)

查询资料_1 (英文ID)

 

.子程序 查询资料_1, , , 个人中心

.参数 英文ID, 文本型

.局部变量 返回内容, 文本型

.局部变量 json, 类_json

.局部变量 用户信息, 个人信息

 

返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/sensitive?principalId=” + 英文ID, , , cookie, , #协议头))

json.解析 (返回内容)

用户信息.英文ID = 英文ID

用户信息.头像 = json.取通用属性 (“data.sensitiveUserInfo.avatar”)

用户信息.昵称 = json.取通用属性 (“data.sensitiveUserInfo.name”)

用户信息.数字ID = json.取属性 (“data.sensitiveUserInfo.originUserId”).取数据文本 ()

用户信息.签名 = json.取通用属性 (“data.sensitiveUserInfo.description”)

用户信息.地区 = json.取通用属性 (“data.sensitiveUserInfo.cityName”)

用户信息.性别 = json.取通用属性 (“data.userInfo.sex”)

.判断开始 (用户信息.性别 = “F”)

  用户信息.性别 = “女”

.判断 (用户信息.性别 = “M”)

  用户信息.性别 = “男”

.默认

  用户信息.性别 = “保密”

.判断结束

 

 

.子程序 查询资料_2, , , 直播名片

.参数 英文ID, 文本型

.局部变量 返回内容, 文本型

.局部变量 json, 类_json

.局部变量 用户信息, 个人信息

 

返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + 英文ID, , , cookie, , #协议头))

json.解析 (返回内容)

用户信息.英文ID = 英文ID

用户信息.头像 = json.取通用属性 (“data.userInfo.avatar”)

用户信息.昵称 = json.取通用属性 (“data.userInfo.name”)

用户信息.数字ID = json.取属性 (“data.userInfo.originUserId”).取数据文本 ()

用户信息.签名 = json.取通用属性 (“data.userInfo.description”)

用户信息.地区 = json.取通用属性 (“data.userInfo.cityName”)

用户信息.性别 = json.取通用属性 (“data.userInfo.sex”)

.判断开始 (用户信息.性别 = “F”)

  用户信息.性别 = “女”

.判断 (用户信息.性别 = “M”)

  用户信息.性别 = “男”

.默认

  用户信息.性别 = “保密”

.判断结束

 

 

 

.子程序 点心, 逻辑型

.局部变量 data, 文本型

.局部变量 返回内容, 文本型

 

data = 子文本替换 (#点心, “[ID]”, liveStreamId, , , 真)

返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/liveroom/like”, 1, data, cookie, , #协议头, , , , 编码_Ansi到Utf8 (data)))

.如果 (返回内容 = “{” + #引号 + “data” + #引号 + “:true}”)

  返回 (真)

.否则

  返回 (假)

.如果结束

 

 

.子程序 网页_取头像1, 文本型

.参数 英文ID, 文本型

.局部变量 局_网址, 文本型

.局部变量 局_提交数据, 文本型

.局部变量 ADD_协议头, 类_POST数据类

.局部变量 局_提交协议头, 文本型

.局部变量 局_结果, 字节集

.局部变量 局_返回, 文本型

.局部变量 json, 类_json

 

调试输出 (1)

局_网址 = “https://www.kuaishou.com/graphql”

局_提交数据 = “{” + #引号 + “operationName” + #引号 + “:” + #引号 + “visionProfile” + #引号 + “,” + #引号 + “variables” + #引号 + “:{” + #引号 + “userId” + #引号 + “:” + #引号 + 英文ID + #引号 + “},” + #引号 + “query” + #引号 + “:” + #引号 + “query visionProfile($userId: String) {\n visionProfile(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” + #引号 + “}”

局_提交数据 = 编码_gb2312到utf8 (局_提交数据)

ADD_协议头.添加 (“Host”, “www.kuaishou.com”)

ADD_协议头.添加 (“Connection”, “keep-alive”)

ADD_协议头.添加 (“accept”, “*/*”)

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”)

ADD_协议头.添加 (“content-type”, “application/json”)

ADD_协议头.添加 (“Origin”, “https://www.kuaishou.com”)

ADD_协议头.添加 (“Sec-Fetch-Site”, “same-origin”)

ADD_协议头.添加 (“Sec-Fetch-Mode”, “cors”)

ADD_协议头.添加 (“Sec-Fetch-Dest”, “empty”)

ADD_协议头.添加 (“Referer”, “https://www.kuaishou.com/profile/3xi9cj4qnixaaug”)

ADD_协议头.添加 (“Accept-Language”, “zh-CN,zh;q=0.9”)

局_提交协议头 = ADD_协议头.获取协议头数据 ()

局_结果 = 网页_访问_对象 (局_网址, 1, , cookie, , 局_提交协议头, , , , 到字节集 (局_提交数据), , , , , , , )

局_返回 = 到文本 (编码_编码转换对象 (局_结果))

json.解析 (局_返回)

返回 (json.取通用属性 (“data.visionProfile.userProfile.profile.headurl”))

 

.子程序 网页_取头像2, 文本型

.参数 英文ID, 文本型

.局部变量 返回内容, 文本型

.局部变量 json, 类_json

.局部变量 用户信息, 个人信息

 

调试输出 (2)

返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/byid?principalId=” + 英文ID, , , cookie, , #协议头))

json.解析 (返回内容)

用户信息.头像 = json.取通用属性 (“data.userInfo.avatar”)

返回 (用户信息.头像)

 

.子程序 网页_取头像3, 文本型

.参数 英文ID, 文本型

.局部变量 返回内容, 文本型

.局部变量 json, 类_json

.局部变量 用户信息, 个人信息

 

调试输出 (3)

返回内容 = 编码_Utf8到Ansi (网页_访问_对象 (“https://live.kuaishou.com/live_api/baseuser/userinfo/sensitive?principalId=” + 英文ID, , , cookie, , #协议头))

json.解析 (返回内容)

用户信息.头像 = json.取通用属性 (“data.sensitiveUserInfo.avatar”)

返回 (用户信息.头像)

 

.子程序 网页_取头像4, 文本型

.参数 英文ID, 文本型

.局部变量 局_网址, 文本型

.局部变量 局_提交cookie, 文本型

.局部变量 局_提交协议头, 文本型

.局部变量 局_结果, 字节集

.局部变量 局_返回, 文本型

 

调试输出 (4)

局_网址 = “https://www.kuaishou.com/profile/” + 英文ID

局_提交协议头 = “Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;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”

网页_访问S (局_网址, 0, , cookie, , 局_提交协议头, , , , , , , , , , , 局_结果, , , , )

局_结果 = 网页_GZIP解压 (局_结果)

局_返回 = 编码_Utf8到Ansi (局_结果)

局_返回 = 文本_取出中间文本 (局_返回, “<img src=#引号”, “#引号 class=”)

返回 (局_返回)

 

.子程序 子_取头像, 文本型

.参数 参_英文ID, 文本型

.局部变量 返回信息, 文本型

 

返回信息 = 网页_取头像1 (参_英文ID)

.如果真 (返回信息 = “”)

  返回信息 = 网页_取头像2 (参_英文ID)

.如果真结束

.如果真 (返回信息 = “”)

  返回信息 = 网页_取头像3 (参_英文ID)

.如果真结束

.如果真 (返回信息 = “”)

  返回信息 = 网页_取头像4 (参_英文ID)

.如果真结束

 

返回 (返回信息)

 

.子程序 _按钮_断开1_被单击

 

编辑框1.可视 = 取反 (编辑框1.可视)

 

=========================================================